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

Обсуждаем контроллеры компании Atmel.
trofim2
Встал на лапы
Сообщения: 106
Зарегистрирован: Чт сен 10, 2015 06:59:03
Откуда: Гродно, BY

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

Сообщение trofim2 »

Для прерывания нужен стек.
Импровизации не работают.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15551
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

Мндя... опять "прокололся"... с R15...
:oops:
Отсутствие заброски данных адреса возврата в "тест-стек"...
Возможно потому, что регистровый файл не совсем "полноценный" в отношении исполнения функций оперативной памяти.
:dont_know:
Да и сами "половинки" не совсем подобны - неохота "полноценные" (r16-r31) на такие "извраты" использовать...
:roll:
В отличии от той же mcs51 у АВРок это регистр-акумуляторы, завязанные на АЛУ...
Не исключены некоторые ограничения на работу указателя SP...
Может еще где прописанные в спецнастройках (тогда можно и "похоамить нестандартно"),а может - гораздо неприятнее - обусловленные аппаратно...
Тогда надежд на "фокусы" не предвидится...
:(
Надо как-нить чиркнуть тест...
:write:
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

The Stack Pointer must be set to point above 0x0100, preferably RAMEND.
Прямое указание в DS на mega48 хороший тормоз. Наверно, есть внутренние цепи защиты. Просто интересно попробовать, хотя я и не сторонник такого.
trofim2
Встал на лапы
Сообщения: 106
Зарегистрирован: Чт сен 10, 2015 06:59:03
Откуда: Гродно, BY

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

Сообщение trofim2 »

Результаты натурных испытаний (в железе).
В качестве стека использовалась область ввода-вывода Timer/Counter1.
Стек настроен на адрес $8С.
Команды pop и push отрабатывает нормально,
rcall и ret - переходит на рестарт (похоже читает 0).
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

Спойлер

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

   .INCLUDE "tn2313def.inc"

;.include "m48def.inc"
.cseg
.org 0
   RJMP RESET
;.org INT0addr   ; External Interrupt Request 0
.org   5
T1_OVER:
   PUSH   R0
   IN   R0,SREG
   PUSH   R0
   LDI   R16,0xCC
   MOV   R0,R16
   NOP
   POP   R0
   OUT   SREG,R0
   POP   R0
   OUT   PINB,R0
   RETI
;*********************************************
RESET:
   LDI   R16,0x6F
;   LDI   R16,15
   OUT   SPL,R16

   CLR   R0
   DEC   R0

   OUT   DDRB,R0
   OUT   PORTB,R0

   LDI   R16,1<<SE
   OUT   MCUCR,R16
;   OUT   SMCR,R16

   LDI   R16,1<<TOIE1
   OUT   TIMSK,R16
   OUT   TIFR,R16

   LDI   R16,2
   OUT   TCCR1B,R16
;   LDI   R16,1<<ISC01
;   STS   EICRA,R16

;   LDI   R22,1<<INT0
;   OUT   EIMSK,R22
;   OUT   EIFR,R22

   SEI
WAIT:
   SLEEP
   NOP
   RJMP   WAIT
.EXIT
Попытка использования РОН tiny2313 в качестве указателя стека с успехом провалилась :)) Контроллер зависает. Как только указатель стека ставится на область РАМ, работает.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15551
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

Мндя...
Доступ к регистрам r0-r31 как к ОЗУ для LD/ST является нормой (как и для области портов ввода/вывода), а вот со стороны стековых операций там работы нету - видимо стоит какое-то аппаратное ограничение. Хотя... Изначально заявлено как "отображаемое на память" что не то же самое по сравнению что "полноценное ОЗУ"...
В каждом *def.inc файле есть дополнительная строчка с ограничением
#pragma AVRPART MEMORY INT_SRAM START_ADDR 0x60 ( 0x60 или какой другой - в зависимости от МК)
причем оговорено, что ее значения "лучше не трогать".
8)
trofim2
Встал на лапы
Сообщения: 106
Зарегистрирован: Чт сен 10, 2015 06:59:03
Откуда: Гродно, BY

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

Сообщение trofim2 »

Как показала практика, ничего из этого невозможно.
А "#pragma AVRPART MEMORY INT_SRAM START_ADDR" не знаю на что влияет.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15551
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

trofim2 писал(а):Как показала практика, ничего из этого невозможно.
...

В каком смысле НИЧЕГО?
косвенное обращение по адресу регистра в указателях Z,X и Y выполняться будет также, как и обращение к ячейке ОЗУ
LD Rn,Ri/ST Ri,Rn ; Rn=r0-r31, Ri=Z,X,Y.
А вот установка указателя стека на область ниже, чем указано в #pragma AVRPART MEMORY INT_SRAM START_ADDR
вероятнее всего приведет к потере функционала POP/PUSH, CALL/RET и аппаратных прерываний - тех команд/операций, что завязаны на указатель стека (SPH:SPL).
:roll:
Кстати... Дебаггер у 4.19 при установке SPH:SPL (тинька 13) на область РОН команды CALL/RET отрабатывает но без наличия данных в регистрах (нет индикации соответствующих изменений - адрес возврата "где-то в дебрях" дебаггера).
:shock:
trofim2
Встал на лапы
Сообщения: 106
Зарегистрирован: Чт сен 10, 2015 06:59:03
Откуда: Гродно, BY

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

Сообщение trofim2 »

Самое интересное, что Push/Pop тоже работает, (правда проверял с одной парой Push/Pop), но не нашел, куда складывает.
Указатель стека настраивал выборочно в диапазоне от 15 до $AF, даже на адреса, не занятые I/O.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15551
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

Это скорее "ошибка среды" прикрывающая от "синего экрана" сам ПК.
Там же явно выбрасывается предупреждение:
Изображение
:wink:
trofim2
Встал на лапы
Сообщения: 106
Зарегистрирован: Чт сен 10, 2015 06:59:03
Откуда: Гродно, BY

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

Сообщение trofim2 »

У меня ошибок не выдает

screen_cr.jpg
(103.55 КБ) 433 скачивания
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

господа, а вот оно вам нужно - ковыряние в неприличном? ну для какой цели эти "исследования"? неужели вы всерьез собираетесь использовать недокументированные возможности, которые по определению противоречат здравому смыслу, а именно использование области РОН под стек?! лучше посоветовать пожелавшему такое сделать лизнуть провода, торчащие из розетки, чем так писать программы...

trofim2 писал(а):Памяти не хватает
очевидно же, что решение на 100500% не в нескольких байтах ОЗУ под стек кроется! проблема ведь, скорее всего, в неправильном алгоритме, ошибках в программе, на худой конец, в неправильно выбранном МК... но никак не в увеличении стека за счет РОН!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

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

Сообщение Z_h_e »

ARV писал(а):ну для какой цели эти "исследования"?
Ну праздное любопытство никто не отменял.
ARV писал(а):неужели вы всерьез собираетесь использовать недокументированные возможности
Я думаю никто тут и не собирался, кроме trofim2.
ARV писал(а):очевидно же, что решение на 100500% не в нескольких байтах ОЗУ под стек кроется!
Мне тоже не понятно. Даже если предположить, что если действительно не хватает нескольких байт, то почему нельзя оставить SP указывать туда куда следует, а в РОН хранить данные не влезшие в ОЗУ?
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

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

Сообщение Jack_A »

Пытливый расейский ум... :) "Пробьет он крышку люка или нет? " ©
Изображение
trofim2
Встал на лапы
Сообщения: 106
Зарегистрирован: Чт сен 10, 2015 06:59:03
Откуда: Гродно, BY

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

Сообщение trofim2 »

Пробьет! Без прерываний работает.
Недокументированного ничего не использую.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

trofim2 писал(а):Без прерываний работает.
вы хоть расскажите, что за задачу решаете и на каком МК, что таким способом боретесь с нехваткой стека... а то догадостности не хватает додуматься самому, зачем это нужно...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15551
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

ARV писал(а):господа, а вот оно вам нужно - ковыряние в неприличном? ну для какой цели эти "исследования"? неужели вы всерьез собираетесь использовать недокументированные возможности, которые по определению противоречат здравому смыслу, а именно использование области РОН под стек?! лучше посоветовать пожелавшему такое сделать лизнуть провода, торчащие из розетки, чем так писать программы...
...


Вообще-то надо...
Ибо
1. чтоб не было в дальнейшем попыток использовать некорректные комбинации команд/адресного пространства
2. несмотря на имеющиеся в системе команд MOV rd,rr и MOVW rd,rr при преимущественной обработке массивов с размещением данных в ОЗУ имеется также интерес к обработке коротких массивов с размещением данных в регистрах РОН (до 16 байт) при косвенном указателе в Z/X/Y.
:roll:

trofim2 писал(а):У меня ошибок не выдает

screen_cr.jpg


Это при компиляции, а мой скрин касается работы дебаггера
8)
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

BOB51 писал(а):Вообще-то надо...
Ибо
вот это ваше "ибо" очень напоминает вырезание аденоидов через задний проход...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15551
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

Ну уж "когда КОТУ делать нечего..." можно и такими вопросами поинтересоваться.
Мало ли чего и когда потребуется...
:dont_know:
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

trofim2 писал(а):Самое интересное, что Push/Pop тоже работает, (правда проверял с одной парой Push/Pop), но не нашел, куда складывает.
Действительно работает в железе только при однократном PUSH/POP!!!
Спойлер

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

   .INCLUDE "tn2313def.inc"

.cseg
.org 0
RESET:
   LDI   R16,0x05
   OUT   SPL,R16

   CLR   R0
   DEC   R0

   IN   R14,SREG
   MOV   R4,R14
   PUSH   R14
;   LDI   R17,0x44
;   MOV   R7,R17
;   PUSH   R17

   CLR   R14
;   CLR   R17

   OUT   DDRB,R0
   OUT   PORTB,R0

   LDI   R16,1
   OUT   TCCR1B,R16

   TST   R16

;   POP   R17
   POP   R14
   OUT   SREG,R14

   CP   R14,R4
;   CP   R17,R7
   BREQ   WAIT
   RJMP   PC
WAIT:
   IN   R16,TIFR
   SBRS   R16,TOV1
   RJMP   WAIT
   OUT   TIFR,R16
   OUT   PINB,R0
   RJMP   WAIT
.EXIT
Ответить

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