|
Инструкции JMP и CALL, call k: Unsupported instruction on ATmeg8 |
|
|
|
Aug 23 2009, 16:18
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 31-05-09
Пользователь №: 49 779

|
Добрый день! Столкнулся вот с такими непонятками... 1. Есть абсолютно работающий проект на AVRStudio 4.16 с файлом C:\Program Files\Atmel\AVR Tools\AvrAssembler\Appnotes\m8def.inc просматривая папку AVR Tools обнаружил вот такой файл C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\m8def.inc на первый взгляд он оказался более дополненный именами регистров и битов решил его включить в проект... Теперь при компиляции ругается на инструкции JMP и CALL error: call k: Unsupported instruction on ATmega8 error: jmp k: Unsupported instruction on ATmega8 при замене файла m8def.inc обратно все работает. нашел на форуме http://electronix.ru/forum/index.php?showtopic=23748но никак не пойму что к чему, и если команды больше не поддерживаются почему же программы до сих пор работают? и теперь для переноса проекта например от mega16 на мега8 надо команды поменять на rjmp и rcall? 2. Установил пакет AvrStudio417Setup.exe и теперь а) при запуске файлов проектов *.aps выдается сообщение ОС WinXP отказано в доступе б) если сделать открыть файл с помощью AvrStudio проект запускается но при включении появляется окошечко с именем файла и восклицательным знаком при откане на 4.16 все нормально В чем трабл не пойму? Объясните пожалуйста. Спасибо.
Сообщение отредактировал svchost - Aug 23 2009, 17:00
|
|
|
|
|
Aug 23 2009, 17:29
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 31-05-09
Пользователь №: 49 779

|
что же получается, теперь возможен вариант что покупая новую mega8 и прошивая старый *.hex мы можем получить неработающее железо ? (поскольку команды jmp и call больше не поддерживаются) То есть для новых разработок надо использовать библиотеку C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\m8def.inc и ставить для mega8 галочку в настройках ассемблера: Project-Assembler Options-Wrap Relative Jumps я использую для передачи параметров в подпрограмму связку call print .db 'Текст'.0 с вычислением в подпрограмме адреса возврата и переходом к команде следующей за параметрами по команде ijmp и теперь в новых версиях кристалла программы не будут работать поскольку учитывают длину команды call ... вот засада хорошо что сейчас проявилось, а то пришлось бы искать иголку в стоге сена...
Сообщение отредактировал svchost - Aug 23 2009, 17:45
|
|
|
|
|
Aug 23 2009, 18:09
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(SasaVitebsk @ Aug 23 2009, 20:50)  А чтобы вас вообще не волновали тонкости конкретного набора команд - переходите на Си. Есть еще полумера - задефайнить Код #ifdef _MEGA8_ #define jmp rjmp #define call rcall #endif Переписывать не придется. Правда, не верится, что у топикстартера не было проблем с переходом avrasm 1->2
|
|
|
|
|
Aug 23 2009, 18:11
|
Местный
  
Группа: Свой
Сообщений: 443
Регистрация: 22-07-06
Из: Украина, г. Харьков
Пользователь №: 19 006

|
Цитата(_Pasha @ Aug 23 2009, 20:11)  Они официально не поддерживаются. Значит, начиная с некоторого часа Х, версии асм матюгаются. В старых даташитах писали, что поддерживает. Помню, я еще удивлялся: зачем, ведь rjmp всю память покрывает. Сейчас новый посмотрел - и правда нету. Но скорее всего это просто так убрали, чтоб у таких как я лишних вопросов не возникало. Врядли они там специально под восьмую мегу из ядра эту команду выкорчевывали. Другой вопрос зачем эту команду использовать, если rcall на все случаи жизни подходит?
|
|
|
|
|
Aug 23 2009, 18:17
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 31-05-09
Пользователь №: 49 779

|
получается для переноса проекта с mega8 на mega16 и выше опять все переходы и подпрограммы заменять, которые будут выходить за пределы окна
перейти на СИ или на BASCOM для меня принципиально (все противоречит внутри когда приходиться использовать подпрограммы или инструкции которые не понятно что выполняют, а главное какое время). Несомненно уменьшают время разработки программ, особенно где приходиться использовать математику.
Сообщение отредактировал svchost - Aug 23 2009, 18:21
|
|
|
|
|
Aug 23 2009, 18:26
|
Местный
  
Группа: Свой
Сообщений: 443
Регистрация: 22-07-06
Из: Украина, г. Харьков
Пользователь №: 19 006

|
Цитата(svchost @ Aug 23 2009, 21:17)  также получается для переноса проекта с mega8 на mega16 и выше опять все переходы и подпрограммы заменять, которые будут выходить за пределы окна При помощи Find->Replace это делается за 5 секунд. Дай бог, чтоб это была самая большая проблема при портировании, пусть даже на кристалл того же семейства. Кроме того использование rjmp сэкономит немного флеша. Мелочь, а приятно  .
|
|
|
|
|
Aug 23 2009, 18:32
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 31-05-09
Пользователь №: 49 779

|
#ifdef _MEGA8_ #define jmp rjmp #define call rcall #endif
не позволяет избавиться от ошибок при компиляции
быстрая замена удобно когда проект состоит из одного файла а если в проекте из 7-10
|
|
|
|
|
Aug 23 2009, 20:41
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 31-05-09
Пользователь №: 49 779

|
#define jmp rjmp #define call rcall
вставил в файл m8def.inc компиляция прошла без ошибок
компилятор не ругается на команды JMP и CALL по идее теперь все переходы и вызовы подпрограмм должны замениться на RJMP и RCALL. Так?
проводим эксперимент с программой в 2 строки...
JMP START ; метка по адресу $200 RJMP start ; ..
получается компилятор должен скомпилировать исходные строки как
RJMP start ; RJMP start ; ...
но в бинарном файле получаем
940С 0200 ; это чистая команда JMP START С1FD ; а это RJMP START
получается компилятор ничего не заменил... блин что за глюки? объясните пожалуйста. Дело уже принципа. Спасибо.
|
|
|
|
|
Aug 24 2009, 06:14
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 31-05-09
Пользователь №: 49 779

|
Ответ от компании Atmel...
Dear customer,
ATmega8 is not support JMP and CALL Instructions, so you should replace these instructions using RJMP and RCALL.
For more information, you could refer to the Instruction Set Summary (page 289) which is in the ATmega8’s datasheet.
Best Regards, Sidney Liang Atmel Technical Support Team
|
|
|
|
|
Aug 24 2009, 07:59
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(svchost @ Aug 23 2009, 21:17)  получается для переноса проекта с mega8 на mega16 и выше опять все переходы и подпрограммы заменять, которые будут выходить за пределы окна А если с Mega на xMega (к примеру) - прикинь объём работы. Цитата перейти на СИ или на BASCOM для меня принципиально (все противоречит внутри когда приходиться использовать подпрограммы или инструкции которые не понятно что выполняют, а главное какое время). Несомненно уменьшают время разработки программ, особенно где приходиться использовать математику. При разработке "с нуля" не уменьшает время. При сопровождении, развитии, портировании - в несколько раз. Если используются библиотеки, то и разработка значительно сокращается (всётаки асмовые библиотеки сложнее в использовании). Про ваши "противоречия" что-то совсем не понял. Как раз именно в асме приходится заглядывать регулярно в хидеры п/п с целью прояснить что именно делает п/п и какие регисты при этом использует. В Си - всё прозрачно. Если требуется точное время исполнения п/п, то никто не мешает написать её на ассемблере. Хотя я от этого теперь стараюсь уйти всеми силами. Подытоживая - вы просто банально боитесь неизвестности. А надо попробовать.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|