Страница 108 из 400
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт ноя 25, 2011 12:12:26
Gudd-Head
Нормально (будет работать и не изврат ли), если МК будет тупить
ожидая прерывания (таймер), а в обработчике прерывания сделает свои дела и перед выходом увеличит хранящийся в стэке двухбайтный адрес счётчика команд, чтобы перейти на следующую за
rjmp PC инструкцию?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт ноя 25, 2011 12:33:04
DX168B
Не думаю.
Я сам вообще так извращался:
Код: Выделить всё
EEP_RDY:
ldi RON2, _TRUE
reti
..
..
ldi RON2, _FALSE
EEP_WAIT_LOOP:
cpi RON2, _TRUE
brne EEP_WAIT_LOOP
...............
Сохранять SREG и прочее не пришлось, так как в обработчике этого примера нет
инструкций, задевающих набор флагов ядра.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт ноя 25, 2011 12:42:03
ploop
Gudd-Head, я, как и DX168B, советую проверять флаг.
Дело в том, что извлечь значение из стека (двухбайтного), инкремент его и обратное запихивание не даст выигрыша ни по коду, ни по времени.
Уж лучше тогда pop'нуть два раза в прерывании (очистить стек от адреса возврата) и сделать rjmp на метку после цикла, вместо reti
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт ноя 25, 2011 12:46:54
DX168B
Только если коды обработчика прерывания и места в программе не расположены далеко друг от друга.
Если МК поддерживает инструкцию jmp, то тогда можно и так (в случае, если rjmp не тянет).
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт ноя 25, 2011 12:54:18
Gudd-Head
DX168B писал(а):Не думаю.
Проверил в Студии — работает.

Но в конечном итоге возможно буду тупить, проверяя флаг прерывания.
В защиту данной реализации хочу добавить, что вырвать МК из мёртвого цикла может любое разрешённое прерывание, а не 1 флаг

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт ноя 25, 2011 13:24:29
ploop
Только если коды обработчика прерывания и места в программе не расположены далеко друг от друга.
Если МК поддерживает инструкцию jmp, то тогда можно и так (в случае, если rjmp не тянет).
Тогда компилятор просто не даст использовать rjmp. jmp, кстати, появляется у контроллеров с более 16к флеша.
Gudd-Head, тогда сделай в прерывании так:
На счет порядка ZH,ZL не уверен

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт ноя 25, 2011 13:49:48
Gudd-Head
ploop писал(а):сделай в прерывании так
Надо тогда ещё прерывания включить
ploop писал(а):На счет порядка ZH,ZL не уверен

Всё правильно, из стэка вытаскивается сначала старший, потом младший байт. Проверено в Студии.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб ноя 26, 2011 11:11:12
sinobi
Подскажите поподробнее работу такого макроса
Код: Выделить всё
Macro Outi ; Макрос - запись константы в порт
Ldi Temp, @1 ; Положить в переменную второй аргумент
Out @0, Temp ; Записать его в первый аргумент-порт
.EndMacro ; Конец макроса
;****************************************************************************************************
.Main: ; Точка входа
Outi SPL, RAMEND ; Установить вершину стека
Outi ACSR, 0x80 ; Отключить аналоговый компаратор
Outi MCUCR, 0x24 ; Глубокий сон
Outi GIMSK, 0x20 ; Разрешить прерывания по изменению уровня на ножках контроллера
Outi TIMSK0, 0x04 ; Разрешить прерывания по регистру сравнения таймера
Outi OCR0A, 11 ; Регистр сравнения = 9.6 MHz / 11+1 / 8 = 10 kHz разрешение таймера
Sbi PCMSK, RXD ; Прерывание по RXD
Sbi DDRB, REN ; Разрешить прием
Cbi PORTB, REN
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб ноя 26, 2011 11:20:18
sinobi
я так понимаю этот макрос-сокращение команд настройки ?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб ноя 26, 2011 14:07:31
ploop
команд настройки ?
Нет таких команд. Есть регистры настройки периферии.
Макрос работает очень просто: @0 заменяется на первый идентификатор, который стоит после имени макроса, @1 - на второй.
Запись
тупо переводится в
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб ноя 26, 2011 14:32:37
ChipKiller
я так понимаю этот макрос-сокращение команд настройки ?
... макрос служит для уменьшения размера исходного файла (именно текста, а не кода ) т.е. для лучшей "читаемости", ну и других "удобств"
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб ноя 26, 2011 16:10:27
sinobi
Спасибо я так и подумал для сокращения числа команд,то есть для удобства
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб ноя 26, 2011 19:45:57
ploop
для сокращения числа команд
Число команд не сократится. Сократится только текст.
Вообще, всю программу можно записать в виде макроса. Тогда она будет состоять из одного слова. Но макрос будет в виде программы...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб ноя 26, 2011 19:49:13
sinobi
Благодарю за разъяснение!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн ноя 28, 2011 10:48:00
DX168B
ploop писал(а):Тогда компилятор просто не даст использовать rjmp. jmp, кстати, появляется у контроллеров с более 16к флеша.
Про это я в курсе.
AVR Studio 4 писал(а):error: Relative branch out of range.
Сам со Студией работаю с самого начала.
А со стеком я развращаюсь только в том случае, если например мне надо вернуться из обработчика прерывания совсем в другое место по какому-нибудь условию.
К примеру: приём по UART маркерного байта, указывающего на конец пакета. После чего, обработать его и изменить поведение программы.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт ноя 29, 2011 06:46:53
hammer2000
недавно стало интересно и начал заниматься контроллерами разными. Пока на уровне моделирования в протеусе.
Чтоб понятие заиметь, чего и как.
С программами мигания светодиодов вроде как проблем нет никаких.
Но при симулировании более сложных программ -проблемы:(
долго рассказывать... но проблема такая:при попытке компиляции исходника для at90s2313 в протеусе программой avrasm2 выдается ошибка на строчки
ldi Temp,Low(RamEnd) ;загрузить в Темп адрес последней ячейки ОЗУ
out SPL,Temp ;вывести в SPL значение из Temp
типа неизвестные символы...
А без них вроде как нельзя...
Есть у кого мнения по поводу?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт ноя 29, 2011 06:54:31
ploop
типа неизвестные символы...
Ну что за вопрос... Посмотрите сами на него со стороны, смогли бы ответить?
Давайте кусок кода с тем местом, где ругается, и естественно полный текст ошибки.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт ноя 29, 2011 07:04:42
pyzhman
Temp обдефайнен?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт ноя 29, 2011 07:13:01
ploop
Да что угодно может быть. Не указал контроллер - на RAMEND тоже заругается.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт ноя 29, 2011 07:20:08
GP1
hammer2000
у меня есть предположение, что в def*.inc файле указатель стека обзывается SP а не SPL, встречалось такое, посмотри в указанном файле.
ЗЫ чтобы быть уверенным на 100%, что все инструкции соответствуют твоему камню, самой первой строкой в программе запиши директиву
.device <имя камня>.
и используй названия регистров и констант так, как они записаны в def-файле.
ЗЫЫ сейчас попробовал, и сразу возник вопрос:
а ты вообще *.inc файл подключил?