Open jdose100 opened 2 months ago
Да, многострочные макросы сейчас не поддерживаются как и не-регистровые аргументы у inline proc
.
Кстати, для управления пинами можно использовать что-то такое
#define OUTPUT 1
#define INPUT 0
pin myPin1 = D1
proc main() {
myPin1->ddr = OUTPUT ; это строка скомпилируется в одну команду SBI
}
Я просто хотел написасть что-то вроде библиотеки Arduino.h, чтобы можно было использовать новичкам удобно. Да и приятно не залазить в data sheet чтобы вспомнить какой пин у мк, если у ардуинки пин 9. Кажется у меня есть идея, а насчёт синтаксиса с пинами я знал, у меня есть желание его адаптировать для ардуинки так-как я её сейчас использую, но он всё таки гораздо удобней чем на чистом asm'е
А я хотел бы уточнить о директиве #error, она вообще есть? При просмотре примеров я её увидел в файле f-counter.art. Но при вызове она не работает
Кстати следующую конструкцию он может обработать:
pin_t->port = 1
Я просто хотел написасть что-то вроде библиотеки Arduino.h, чтобы можно было использовать новичкам удобно. Да и приятно не залазить в data sheet чтобы вспомнить какой пин у мк, если у ардуинки пин 9. Кажется у меня есть идея, а насчёт синтаксиса с пинами я знал, у меня есть желание его адаптировать для ардуинки так-как я её сейчас использую, но он всё таки гораздо удобней чем на чистом asm'е
Имхо, ассемблер и подход ардуино - две совершенно несовместимые вещи. Первое про работу с железом и глубокое понимание чтобы выжимать максимум из этого железа. Второе - про простоту и нежелание копать глубже.
Если нужно удобно работать с пинами ардуины по номеру, то можно и определить их как pin1
, pin2
, ...
Директива #error, похоже, не работает. Точнее, работает в том плане, что прекращает компиляцию, но не выводит ошибку. Я её изначально заложил, но никогда не пользовался и забыл реализовать
Я имел ввиду что удобство записи команд, таже настройка порта не по ddr, а pinMode(pin, mode). Но на ассемблер я перешёл так как хочу узнать о avr поглубже, да и меня немного раздражает стандартный c++ для ардуино. Когда видишь что у тебя всего 32кб памяти и то на mega, а просто мерцающая лампочка ест уже килобайт у меня отходит желание кодить на c++ для ардуинки, да так и интереснее. Узнаёшь про работу устройста не только со стороны электроники, но и со стороны кода. Так что совместимы, но только с правильным подходом. Я кста недавно узнал про ШИМ, а так даже не подозревал о нём
При написании макроса pinMode у меня возникла проблема, из-за того что он многострочный компилятор отказывается нормально передавать аргументы в него. Код:
define OUTPUT 0x1
define pinMode(pin_t, mode) \
proc main() { pinMode(13, OUTPUT) } Пишет данное сообщение: "path_to_file/file.asm:16:17: Unexpected expression" Причина не использования "inline proc" в том, что я не смог его заставить передавать аргументы не через регистр. Сдесь я мог накосячить с "inline proc"