|
Работает ли Atmega8 команда jmp? |
|
|
|
 |
Ответов
(1 - 8)
|
Nov 21 2006, 18:04
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(CD_Eater @ Nov 20 2006, 04:46)  И не должна работать, т.к. на 8 КБайтах её функциональность полностью покрывается командой rjmp. То есть, разработчикам МК не было смысла реализовывать её. Не совсем так. "Функциональность" НЕ "покрывается полностью командой rjmp", поскольку команда относительного перехода работает в пределах +-2Кслова, но в атмеге8 имеется 4Кслова памяти, так что для перехода, скажем, из конца памяти в ее начало потребуется два rjmp, а не один.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Nov 21 2006, 18:46
|
Частый гость
 
Группа: Новичок
Сообщений: 173
Регистрация: 3-09-04
Из: Moscow
Пользователь №: 595

|
Цитата(=GM= @ Nov 21 2006, 18:04)  команда относительного перехода работает в пределах +-2Кслова, но в атмеге8 имеется 4Кслова памяти, так что для перехода, скажем, из конца памяти в ее начало потребуется два rjmp, а не один. Память программ организована циклически на аппаратном уровне (отбрасыванием старших бит), поэтому в любую точку программы можно прыгнуть из любой А ещё есть флажок компилятора, который позволяет разрешить или запретить такую интерпретацию адреса (но, конечно же, не может запретить её аппаратную реализацию). Странно, что Вы не знали.
Сообщение отредактировал CD_Eater - Nov 21 2006, 18:47
|
|
|
|
|
Nov 21 2006, 19:11
|
Частый гость
 
Группа: Участник
Сообщений: 146
Регистрация: 16-05-05
Пользователь №: 5 069

|
=GM= Цитата Не совсем так. "Функциональность" НЕ "покрывается полностью командой rjmp", поскольку команда относительного перехода работает в пределах +-2Кслова, но в атмеге8 имеется 4Кслова памяти, так что для перехода, скажем, из конца памяти в ее начало потребуется два rjmp, а не один. Запускаем AVRStudio (4.12.498, у старых тоже должно быть), отрываем Help-AVR Studio User Guide-Поиск. Ищем слово wrap. Находим Assembly project. Читаем раздел: Цитата Wrap relative jumps The AVR RJMP/RCALL instructions allow a 12-bit PC-relative offset, corresponding to +/-2k words. For devices with 4k words (8k bytes) or less FLASH program memory, the Wrap option causes the assembler's offset calculation to wrap around over the addressable program memory range, enabling the entire program memory to be addressed using these instructions.
For devices with more than 4k words of program memory, using this option may cause unpredictable results and it should be turned off. If it is left on, the assembler will produce a warning when wrap takes effect:
warning: Wrap rjmp/rcall illegal for device > 4k words - Turn off wrap option and use jmp/call
This diagnostic is given as a warning and not an error to retain compatibility with earlier versions of the assembler, but should be treated as an error by the user. The JMP/CALL 2-word instructions take 22-bit absolute addresses and should be used instead. То есть, для мега8 ставим галочку в настройках ассемблера: Project-Assembler Options-Wrap Relative Jumps и гуляем с помощью rjmp, или rcall по всей флэши. А если у нас мега16 и выше, то эту галочку надо объязательно убрать. ____________________ Александр 2006 11 21 PS. Вот тут аналогичная тема обсуждалась: http://www.fulcrum.ru/cgi-bin/bbs/mess_sel...4966&page=1
|
|
|
|
|
Nov 21 2006, 20:09
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(Laksus @ Nov 21 2006, 16:11)  Цитата Wrap relative jumps The AVR RJMP/RCALL instructions allow a 12-bit PC-relative offset, corresponding to +/-2k words. For devices with 4k words (8k bytes) or less FLASH program memory, the Wrap option causes the assembler's offset calculation to wrap around over the addressable program memory range, enabling the entire program memory to be addressed using these instructions.
For devices with more than 4k words of program memory, using this option may cause unpredictable results and it should be turned off. If it is left on, the assembler will produce a warning when wrap takes effect:
warning: Wrap rjmp/rcall illegal for device > 4k words - Turn off wrap option and use jmp/call
This diagnostic is given as a warning and not an error to retain compatibility with earlier versions of the assembler, but should be treated as an error by the user. The JMP/CALL 2-word instructions take 22-bit absolute addresses and should be used instead.
То есть, для мега8 ставим галочку в настройках ассемблера: Project-Assembler Options-Wrap Relative Jumps и гуляем с помощью rjmp, или rcall по всей флэши. А если у нас мега16 и выше, то эту галочку надо обязательно убрать Не знал я, что авр-студия позволяет представлять смещение как беззнаковое (фактически это так), и не учитывать переполнения 12-битного счетчика команд. Теперь буду знать, спасибо, Александр.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|