реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> ATmega64 - Operand 1 out of range: 0x36?, Ругается компилятор ассемблера.
jokolemene
сообщение May 6 2010, 06:12
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 14-03-10
Пользователь №: 55 950



Написал программу для ATmega64 на Си. Использовал IAR C. Всё нормально, всё работает. Теперь встала задача написать бутлоадер, чтобы грузить прошивку в проц удалённо. Решил писать на ассемблере. Выяснилось, что ассемблер IAR-а балдеет от русских комментариев - то повиснет, то какие-то другие глюки начинают происходить. Пришлось с IAR перейти на AVR Studio 4 и AVR Assembler. Теперь другая проблема - компилятор ругается на совершенно легальные команды типа "sbi tifr,icf1", что мол "Operand 1 out of range: 0x36". По доке на процессор видно, что адрес 0x36 попадает в область I/O этого проца и с включенным режимом совместимости с ATmega103 и с выключенным. Что за тема, не въеду? Как это победить?
Go to the top of the page
 
+Quote Post
V_G
сообщение May 6 2010, 06:40
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Достаточно почитать хэлп на инструкцию SBI (поставить курсор на инструкцию и нажать F1). Она работает с адресами до 31 (0x1F)
Go to the top of the page
 
+Quote Post
rezident
сообщение May 9 2010, 00:02
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(jokolemene @ May 6 2010, 12:12) *
Выяснилось, что ассемблер IAR-а балдеет от русских комментариев - то повиснет, то какие-то другие глюки начинают происходить.
Вовсе не от любого комментария на русском, а только от маленького кириллического символа "я", который в кодировке WIN-1251 имеет код конца файла (0xFF). Для компиляции в IAR уже готового исходника достаточно средствами реактора заменить маленькую "я" на большую "Я". Читаемость комментариев нисколько не ухудшиться, но ошибки, связанные с этим символом, пропадут.
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 9 2010, 06:41
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(rezident @ May 9 2010, 03:02) *
только от маленького кириллического символа "я", который в кодировке WIN-1251 имеет код конца файла (0xFF).

Это не конец файла - "конец" ^Z, т.е. 0x1A
Болезьнью 0xFF до сих пор болели текстовые редакторы, которым необходимо было в процессе редактирования иметь во внутреннем представлении редактируемого файла иметь виртуальные разделители. Для компиляторов это явный баг, видимо отрыжка unicode sad.gif.
Если не требуется вывод кирилицей в WIN кодировке, то лечится использованием нормальных редакторов поддерживающих разные кодировки и работа в "досовской" CP866. Кстати, нормальные редакторы можно попросить и менять 'я' на 'Я' при вводе. А еще можно не писать комментарии на русском smile.gif экономит время на переключении раскладок smile.gif.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение May 9 2010, 15:04
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Могу ещё кое что добавить. smile.gif
У меня есть версия IAR 5.11, которая ни грамма не ругается, а прекрассно всё компилит. А вот версия 5.4 действительно не может пережить "я". Обратил внимание, что там какая-то локализация типа японской что-ли.

По бутлоадеру - обычно достаточно прописать на асме только узкие части. Я, например писал дешифрацию и crc. На остальном потери незначительны, зато поддерживать на Си легче.
Go to the top of the page
 
+Quote Post
rezident
сообщение May 9 2010, 17:02
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(zltigo @ May 9 2010, 12:41) *
Это не конец файла - "конец" ^Z, т.е. 0x1A
Я имел в виду символ EOF, а не скан-код.
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 9 2010, 17:21
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(rezident @ May 9 2010, 20:02) *
Я имел в виду символ EOF

С этими еще проще - он по жизни int, посему с 0xFF не соотносится.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
XVR
сообщение May 11 2010, 06:39
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(zltigo @ May 9 2010, 21:21) *
С этими еще проще - он по жизни int, посему с 0xFF не соотносится.
К сожалению, у некоторых 'софтописателей' (язык не поворачивается назвать их програмистами) есть некоторое непонимание того факта, что char может быть по умолчанию знаковым (т.е. signed char), а буквы могут занимать и вторую половину ASCII таблицы. Так что 0xFF после расширения знака замечательно преобразуется в -1, каковая и является EOF.
Go to the top of the page
 
+Quote Post
jokolemene
сообщение May 12 2010, 15:09
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 14-03-10
Пользователь №: 55 950



Да, насчёт sbi я уже разобрался, help почитал. Так что спасибо за подсказку. Просто ни разу не писал на ассемблере для atmega. Раньше работал всё больше с пиками. Поэтому тут был несколько удивлён такими ограниченными командами, которые могут работать или только с частью регистров или с частью портов ввода/вывода или с малыми константами. Такие странные ограничения несколько напрягли.

И спасибо за подсказку насчёт IAR ассемблера. Правда сейчас я на него уже вряд-ли буду переходить, потому что бутлоадер уже в стадии отладки.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 14:17
Рейтинг@Mail.ru


Страница сгенерированна за 0.01433 секунд с 7
ELECTRONIX ©2004-2016