Ассемблер (ASM) для AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
hammer2000
Родился
Сообщения: 12
Зарегистрирован: Сб ноя 26, 2011 15:13:05
Откуда: комсомольск-на-амуре

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение hammer2000 »

спасибо большое за внимание. Просто, как то поскромничал, думал поменьше написать, чтоб места не занимать в посте. Но в данном случае понял- не получится:)
К тому же вопрос не совсем по ассемблеру наверно, а больше по протеусу.
Начало проблемы: решил в протеусе собрать схемку http://www.ua4nx.qrz.ru/lcd.htm.
Началось все с того, что при симуляции нарисованной схемы по программе http://www.ua4nx.qrz.ru/fail/LCD.zip
сначала ошибка в логе.(рис1). Это касалось строчки .def z =r19; Ограничение времени приема 40 битов.
Переменной Z я в программе не нашел, и я ее забил ";" после чего лог протеуса был без ошибок, но почему-то вывод 8 контроллера находился в 3-ем состоянии и соответственно индикация не работала. Решил может глюк какой в модели конкретного контроллера решил попробовать на другом контроллере(другой модели).
Включил AT90S2313 на той же программе, только изменил .DEVICE. При этой симуляции тоже индикации нет и появляется лог (рис.2)
Сделал вывод, что в данном случае проблема в стеке и попытался добавить туда строчки:
.def temp =r24 регистр 24 вроде нигде не используется в программе.
ldi temp, Ramend ;
out spl,temp
При попытке симуляции появляется лог (рис.3)
Кстати to GP1:заменил spl на sp - пропала ошибка "неопределенный символ" напротив этой строчки. Лог стал (рис.4) и кстати как подключить *.inc файл? потому что слабо представляю где его искать:(
напоследок попробовал с Attiny2313 той же программой (без строчек про стек, но .DEVICE поправил) индикация появилась, но кривоватая и судя по описаниям на контроллеры - там придется программку доработать(разные биты в регистрах таймера и прерывания разные....
Вложения
4.jpg
(55.84 КБ) 306 скачиваний
3.jpg
(55.6 КБ) 309 скачиваний
2.jpg
(210.42 КБ) 226 скачиваний
1.jpg
(67.27 КБ) 335 скачиваний
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ploop »

Это касалось строчки .def z =r19; Ограничение времени приема 40 битов.

Ошибка потому, что идентификаторами X, Y и Z обозначают последние 6 регистров, образующие регистровые пары XH:XL, YH:YL и ZH:ZL. Так же к ним можно обращаться как R27:R26, R29:R28 и R31:R30 соответственно. Ну или по отдельности.
Поэтому на попытку еще раз задефайнить Z он заругался.
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение GP1 »

hammer2000 писал(а):...кстати как подключить *.inc файл? потому что слабо представляю где его искать:(
...

файлы описания идут в комплекте с AVRStudio пути к ним прописаны в системе, так что необходимо в нужном месте исходника вставить строку:
.include <имя def-файла>
именуются эти файлы примерно так:
m48def.inc
tn13def.inc
и т.п.
описание камня вставляют в самом начале исходника, обычно сразу после директивы
.device

шпрота не юзаю из-за его глючности :dont_know:
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ploop »

Я, например, использую gavrasm, там не надо inc'и таскать, просто пишешь .device ATmega48 - и вперёд.
hammer2000
Родился
Сообщения: 12
Зарегистрирован: Сб ноя 26, 2011 15:13:05
Откуда: комсомольск-на-амуре

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение hammer2000 »

Попробовал gavrasm. tavrasm вообще под win не нашел....грустно как-то стало:( от разнообразия или бардака...как назвать:) мало того что контроллеры все разные по прерываниям, флагам и т.д. Так еще и компиляторы отличаются...те файлы, которые во встроенном в протеус компиляторе avrasm вопросов не вызывали, gavrasm забраковал(исходник и файл с ошибками в приложении)
wavrasm кстати не ругается на .def z =r19 (про эту запись в исходнике в прошлом посте упоминал). Выходит, что делая программу, нужно вместе с программой еще указывать чем прошивку компилировали:(а если пргу не проверить на реальной железке, то не факт что работать будет....
AVRstudio пробовал, но там схемы нет, только порты регистры и все такое. VMLAB тоже пробовал. Но протеус интереснее, тем что наглядно можно работу всей схемы проследить....
Насчет SP вместо SPL - понятно. А что вместо Ramend? 0xDF указать? вроде там по описанию конец ОЗУ для AT90s2313
Вложения
lcd.zip
(2.86 КБ) 151 скачивание
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение GP1 »

как по мне, так ничего лучше чем Студия для АВРок нет, в любом случае окончательная отладка происходит в железе, ни один симулятор не дает 100% результатов работоспособности устройства.
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ploop »

hammer2000 ассемблер, по сути, стандартизирован, и код можно перекомпилить практически без переделок. За исключением мелких нюансов, типа указания контроллера inc-файлами, напрямую, или по другому.

Касаемо вашей проблемы с gavrasm, смотрите внимательней на ошибку:

Код: Выделить всё

Name (SREG) already in use for a constant or variable

SREG - это имя статусного регистра, а вы пытаетесь обозвать так еще R5.
Как по вашему будет выглядеть код: IN R5, SREG? Будет IN SREG, SREG. Теперь попробуйте на месте компилятора разобраться, что куда...

А что вместо Ramend

Ничего. Если правильно указали контроллер, вместо этой константы будет конец ОЗУ.
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ploop »

Посмотрел бегло ваш код. Не знаю, кто/как/где это писал, но во-первых все идентификаторы портов ввода-вывода заданы числовыми значениями (по сути допускается такое, но мозг взорвётся), во-вторых код корявый (достаточно взглянуть на подпрограмму decod).

Такое ощущение, что Сишный (или другого ЯВУ) вывод компилятора переписали под ассемблер.
hammer2000
Родился
Сообщения: 12
Зарегистрирован: Сб ноя 26, 2011 15:13:05
Откуда: комсомольск-на-амуре

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение hammer2000 »

Да я видел ошибки:( Самое интересное, программа-то не моя....а скаченная по ссылке (смотри мой пост от 29.11.11) и вроде как должна быть рабочей.... там не одна статья у человека написана. в общем "не верь глазам своим"
А вместо ramend не хочет ни avrasm, ни в vmlab конец ОЗУ подставлять:(
поставлю еще студию:)поэкспериментируем....
To ploop: Я хоть и начинающий, но тоже показалось странным, что порты ввода-вывода заданы адресными значениями... не наглядно как-то:(
в общем попробуем вместе с самообучением творчески переработать программку;)
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение pyzhman »

Согласен с ploop'ом насчет переделки Сишного кода в асмовский, очень даже смахивает. Сказать-то что хотел: простая замена 1200 на 2313 не канает, у первого стек железный. Да и еще наверняка есть разница, лень смотреть.
Docendo discimus
hammer2000
Родился
Сообщения: 12
Зарегистрирован: Сб ноя 26, 2011 15:13:05
Откуда: комсомольск-на-амуре

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение hammer2000 »

Подскажите исходя из приложенного скрина, я правильно понимаю, что в программе для at90s2313 вместо "Ramend" я могу написать 0xdf ? Если нет, то какой адрес тогда должен быть?
Вложения
1.jpg
(91.93 КБ) 309 скачиваний
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3868
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Engineer_Keen »

hammer2000 писал(а):в программе для at90s2313 вместо "Ramend" я могу написать 0xdf ?

Да.
А вообще, не мучайтесь с цифрами, вот файл со всеми определениями для at90s2313. Подключите его как GP1 написал.
Вложения
2313def.zip
(3.62 КБ) 167 скачиваний
Последний раз редактировалось Engineer_Keen Ср ноя 30, 2011 09:21:38, всего редактировалось 1 раз.
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение pyzhman »

Так нужно писать.
Docendo discimus
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ploop »

вместо "Ramend" я могу написать 0xdf

Да, можно.

Вообще, суть в том, что если пытаться использовать чужой ассемблеровский код в своей программе, то нужно на 100% знать, как он работает, т.е. уметь легко написать его самому, смысл брать чужой сводится только к экономии времени. Разумеется, если программа сложнее мигания светодиодом.

Это не Си, где цепанул библиотеку, а что там внутри - плевать. Регистры, прерывания, тайминги, всё должно быть под контролем. Зато он даёт большие преимущества в скорости и объёме кода. Слышал, на 2313 реализовывали такие вещи, где модные ардуины зашивались...
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Gudd-Head »

У кого-нибудь есть пример кода реализации Линейно Рекуррентного Регистра (ЛРР) для АВР? Я в небольшом ступоре: вместо последовательности максимальной длины 2^N-1 = 255 у меня получается... 217! :shock: Ладно бы 127, а тут вообще какое-то странное число.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ploop »

Линейно Рекуррентного Регистра

о_О
Гуглить пришлось, чтоб узнать, хоть что это такое. Наткнулся на подробное описание, может пригодится... http://dxdy.ru/topic9474.html
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Gudd-Head »

ploop писал(а):Гуглить пришлось, чтоб узнать, хоть что это такое.

Ну, тогда можно было и не отвечать. Естессно, я обгуглил всё что можно. В теории всё красиво, а на практике...

Идея была реализовать простой и компактный генератор псевдослучайной последовательности. Последовательность получилась, но она короткая и не охватывает все 255 значений :(
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение pyzhman »

Дык ведь этож генератор псвевдослучайных битов, но никак не чисел. Теорию подучить-с.
Docendo discimus
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ploop »

Gudd-Head, может проще аппаратный задействовать? В виде АЦП например...
Хотя алгоритм пригодился бы, если сделаешь, надеюсь, поделишься? :beer:
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Gudd-Head »

pyzh_man писал(а):Дык ведь этож генератор псвевдослучайных битов, но никак не чисел. Теорию подучить-с.

Ну дык, раз у меня последовательность байтов в регистре длины 217, то и последовательность битов на конце этого регитсра никак не может быть длинее. Не?
ploop писал(а):может проще аппаратный задействовать? В виде АЦП например...
Хотя алгоритм пригодился бы, если сделаешь, надеюсь, поделишься?

Не, не проще)
Алгоритм элементарный, 8 строчек кода... правда, работает на 85% :)))
Естессно поделюсь, я это для статейки задумал.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Ответить

Вернуться в «AVR»