[an error occurred while processing this directive]
|
1. Любой мусор, который написан в строке после имени МАКРООПРЕДЕЛЕНИЯ, игнорируется в AVRASM1 и считается ошибкой в AVRASM2. Никакие "параметры" из этого мусора в макроопределение НЕ ПЕРЕДАЮТСЯ:
.macro DEMO foo1 << foo2 >> foo3 <== это мусор
2. Параметры передаются в тело макроконструкции при ее ВЫЗОВЕ и подставляются в ассемблерные команды БУКВАЛЬНО. На повторном проходе ассемблер пытается узреть в сконструированном таким образом тексте разрешенные синтаксические конструкции, и решить найденные там выражения (expressions), если таковые отвечают синтаксическим требованиям. Вот это есть ВЫЗОВ, но не ОПРЕДЕЛЕНИЕ макроконструкции:
DEMO (VALUE+10), (1 << FLAG1 + 0b01000000)
В итоге вместо @0 будет подставлен текст (VALUE+10), а вместо @1 - текст (1 << FLAG1 + 0b01000000).
3. Если текст не составил выражения, то он считается меткой (label) или числовой константой. И то, и другое, и третье проверяется на валидность и решается - строковое числовое выражение преобразуется в двоичные данные соответствующего типа (byte, word, double), метка - в назначенный или ранее вычисленный ее численный эквивалент. Полученный результат подставляется в соответствующие поля очередного слова програмной памяти и ассемблер переходит на обработку следующей строки.
4. НЕ НАДО МНЕ ПИЗДЕТЬ! Мега603 - это отбраковка Меги103 с половиной Flash и RAM, и единственная инструкция, которая не имеет смысла в М603, хотя и существует, и поддерживается, и выполняется - это ELPM, т.к. для Flash M603 достаточно 16-ти бит LPM. А инструкция STS там есть, о чем написано прямо на стр.123 документа по ссылке. Прчитай, тщательно перепиши фломастером себе на лоб и с чувством выполненного долга ступай... в народ
E-mail: info@telesys.ru