ReAl (28.06.2006 01:10, просмотров: 1) ответил Bill на Все правильно, только, опять же, Atmel считает словами, а IAR байтами.
Во-во! Почему-то для MSP430 или ARM-а никого не удивляет то, что адресация в байтах, а команды располагаются с соответствующим выравниванием.
А привычка атмеловского асма считать память кода в словах...
Если бы архитектура не позволяла в принципе читать байты из кода - другое дело, тогда всё равно что как и где. Но необходимость в avrasm-е строковыэ литералы размещать в памяти кода только по чётным адресам и множить эти адреса слов на два (и терять при этом среднестатистически пол-байта на каждой строке) меня изначально бесила. При первой же возможности перелез на IAR asm (голый асм+линкер без никаких оболочек когда-то на сайте атмела лежал, бесплатно).
А для CALL - да какая мне разница, какая адресация. Я метку в команде указал и всё. И пусть ассемблер сам внутри себя разбирается, чему равно её числовое значение после линковки, не царское это дело.
Ну а (*(void(*)())3)(); - это, с моей точки зрения, вообще моветон. 0 ещё куда ни шло, но другие "магические числа"...
Правильно - как минимум
(*(void(*)()КАКОЙ_НАДО_vect)(); /* кстати, насколько я помню, левая звёздочка тут не вредна, но бесполезна, правые () сами производят разименование */
И один раз в нужных h-файлах нужные константы прописаны/проверены и дальше всё равно.