Павел В. (28.06.2006 19:45, просмотров: 1) ответил ReAl на Во-во! Почему-то для MSP430 или ARM-а никого не удивляет то, что адресация в байтах, а
Короче, полевые испытания показали следующее На счет звездочек в конструкциях вида "(*(void(*)())3)()" - тут я был неоригинален, все делал по Кернигану-Ричи. Правые () ничего не разыменовывают, без левой * ИАР вываливается с ошибкой, что, на мой взгляд, правильно.
На счет моветонов... В последних релизах IAR AVR ввел много интринсиков и новых ключевых слов, например "__raw". Функция прерывания не сохраняет никакие регистры вообще! Разве _ТАКОЕ_ можно использовать в прличном обществе? Однако, можно. Например, вылет по таймауту в фатальную ошибку (у меня одна такая функция сразу "похудела" на 80 байт кода). Чувствуется тенденция "ожелезячивания" компилятора, что не может не радовать. Т.к. я считаю, что Си-компилятор должен позволять делать все, на что способен набор машинных команд процессора.
Поставив и обкатав версию 4.20А, могу сообщить следующее
точнее,изложить очевидные fuckты :-))):
Отцы-основатели архитектуры AVR привязали программный счетчик к командам. И,
симулируя бутлоадер Меги128 в AVRStudio, мы видим, что после сброса значение
PC==0xF000. Инкрементируется PC на 1. Т.е., PC бывает и четным и нечетным.
Что соответствует AVR Instruction Set.
IAR же считает PC не в командах, а в байтах. Скорее всего, по причине
использования одного универсального линкера на все архитектуры. Поэтому, тот же
самый бутлоадер в его дебаггере после сброса имеет значение PC==0x1E000.
Инкрементируется PC всякий раз на 2. Т.е. у ИАРа программный счетчик всегда
только четный. Всякие "Call 3" приводят к ошибкам. Но уже не внутренним, тут они
поправились. Если я корректно заявляю, что мне нужен третий адрес:
(*(void(*)())3)();
то в версии 4.20А это уже компилится в ассемблерную команду:
CALL 0x06,
что IAR'овский ассемблер транслирует обратно в тройку:
940E0003
Так же корректно работает интринсиковый косвенный "прыг":
__indirect_jump_to(0x03);
LDI R30, 3
LDI R31, 0
IJMP
Резюме? С выходом патча (и последней версии компилятора), полагаю, все остались довольны... :-))))