Ассемблеру для корректной работы этой фичи нужно сказать "-w"
(«Телесистемы»: «Конференция «Микроконтроллеры и их применение»»)

миниатюрный аудио-видеорекордер mAVR

Отправлено BLACKEAGLE 23 апреля 2003 г. 15:07
В ответ на: RCALL и RJMP можно ли применять во всем адресном диапазоне ATmega8? отправлено ВМФ 23 апреля 2003 г. 13:26

...а в Студии соответственно поставить галку "Wrap Relative Jumps" в Project->Project Settings->Code Generation.

Фича состоит в следующем. В теле команды RJMP/RCALL содержится 12-битное поле (11 бит+знак), значение которого в момент исполнения такой команды знаково суммируется с текущим значением програмного счетчика. Результат суммирования записывается обратно в програмный счетчик, который, например, в Меге8 имеет длину 12 бит (4096 слов), т.е. суммирование идет в этом случае по модулю 4096. Если метка перехода отстояла от места ее вызова более чем на -2048/+2047, то ассемблер должен сообщать об ошибке типа "Relative jump too large". Но если разрешить "заворот", то вместо кода, эквивалентного RJMP PC-3456 (что некорректно), будет сгенерирован код RJMP PC+(4096-3456), т.е. RJMP (PC+640)mod 4096, и все будет корректно.

Эту фичу можно разрешать абсолютно безболезненно для всех AVR с длиной Flash 4 КБ и более, а для более мелких она просто не будет иметь смысла. Разумеется, ценность ее обратно пропорциональна длине Flash, т.к. она будет эффективна только в намых нижних и самых верхних 2048 адресах.

Составить ответ ||| Конференция ||| Архив

Ответы



Перейти к списку ответов ||| Конференция ||| Архив ||| Главная страница ||| Содержание

E-mail: info@telesys.ru