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