Страница 280 из 400
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс окт 09, 2016 16:12:49
trofim2
Для прерывания нужен стек.
Импровизации не работают.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс окт 09, 2016 16:16:55
BOB51
Мндя... опять "прокололся"... с R15...
Отсутствие заброски данных адреса возврата в "тест-стек"...
Возможно потому, что регистровый файл не совсем "полноценный" в отношении исполнения функций оперативной памяти.
Да и сами "половинки" не совсем подобны - неохота "полноценные" (r16-r31) на такие "извраты" использовать...
В отличии от той же mcs51 у АВРок это регистр-акумуляторы, завязанные на АЛУ...
Не исключены некоторые ограничения на работу указателя SP...
Может еще где прописанные в спецнастройках (тогда можно и "похоамить нестандартно"),а может - гораздо неприятнее - обусловленные аппаратно...
Тогда надежд на "фокусы" не предвидится...
Надо как-нить чиркнуть тест...

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс окт 09, 2016 16:32:28
akl
The Stack Pointer must be set to point above 0x0100, preferably RAMEND.
Прямое указание в DS на mega48 хороший тормоз. Наверно, есть внутренние цепи защиты. Просто интересно попробовать, хотя я и не сторонник такого.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс окт 09, 2016 18:02:55
trofim2
Результаты натурных испытаний (в железе).
В качестве стека использовалась область ввода-вывода Timer/Counter1.
Стек настроен на адрес $8С.
Команды pop и push отрабатывает нормально,
rcall и ret - переходит на рестарт (похоже читает 0).
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн окт 10, 2016 04:57:48
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 в качестве указателя стека с успехом провалилась

Контроллер зависает. Как только указатель стека ставится на область РАМ, работает.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн окт 10, 2016 13:27:41
BOB51
Мндя...
Доступ к регистрам r0-r31 как к ОЗУ для LD/ST является нормой (как и для области портов ввода/вывода), а вот со стороны стековых операций там работы нету - видимо стоит какое-то аппаратное ограничение. Хотя... Изначально заявлено как "отображаемое на память" что не то же самое по сравнению что "полноценное ОЗУ"...
В каждом *def.inc файле есть дополнительная строчка с ограничением
#pragma AVRPART MEMORY INT_SRAM START_ADDR 0x60 ( 0x60 или какой другой - в зависимости от МК)
причем оговорено, что ее значения "лучше не трогать".

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт окт 11, 2016 09:21:18
trofim2
Как показала практика, ничего из этого невозможно.
А "#pragma AVRPART MEMORY INT_SRAM START_ADDR" не знаю на что влияет.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт окт 11, 2016 10:22:14
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).
Кстати... Дебаггер у 4.19 при установке SPH:SPL (тинька 13) на область РОН команды CALL/RET отрабатывает но без наличия данных в регистрах (нет индикации соответствующих изменений - адрес возврата "где-то в дебрях" дебаггера).

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт окт 11, 2016 12:47:45
trofim2
Самое интересное, что Push/Pop тоже работает, (правда проверял с одной парой Push/Pop), но не нашел, куда складывает.
Указатель стека настраивал выборочно в диапазоне от 15 до $AF, даже на адреса, не занятые I/O.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт окт 11, 2016 13:14:20
BOB51
Это скорее "ошибка среды" прикрывающая от "синего экрана" сам ПК.
Там же явно выбрасывается предупреждение:

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт окт 11, 2016 16:47:23
trofim2
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт окт 11, 2016 19:03:12
ARV
господа, а вот оно вам нужно - ковыряние в неприличном? ну для какой цели эти "исследования"? неужели вы всерьез собираетесь использовать недокументированные возможности, которые по определению противоречат здравому смыслу, а именно использование области РОН под стек?! лучше посоветовать пожелавшему такое сделать лизнуть провода, торчащие из розетки, чем так писать программы...
trofim2 писал(а):Памяти не хватает
очевидно же, что решение на 100500% не в нескольких байтах ОЗУ под стек кроется! проблема ведь, скорее всего, в неправильном алгоритме, ошибках в программе, на худой конец, в неправильно выбранном МК... но никак не в увеличении стека за счет РОН!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт окт 11, 2016 19:25:51
Z_h_e
ARV писал(а):ну для какой цели эти "исследования"?
Ну праздное любопытство никто не отменял.
ARV писал(а):неужели вы всерьез собираетесь использовать недокументированные возможности
Я думаю никто тут и не собирался, кроме
trofim2.
ARV писал(а):очевидно же, что решение на 100500% не в нескольких байтах ОЗУ под стек кроется!
Мне тоже не понятно. Даже если предположить, что если действительно не хватает нескольких байт, то почему нельзя оставить SP указывать туда куда следует, а в РОН хранить данные не влезшие в ОЗУ?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт окт 11, 2016 22:14:25
Jack_A
Пытливый расейский ум...

"Пробьет он крышку люка или нет? " ©
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср окт 12, 2016 07:52:45
trofim2
Пробьет! Без прерываний работает.
Недокументированного ничего не использую.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср окт 12, 2016 08:24:54
ARV
trofim2 писал(а):Без прерываний работает.
вы хоть расскажите, что за задачу решаете и на каком МК, что таким способом боретесь с нехваткой стека... а то догадостности не хватает додуматься самому, зачем это нужно...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср окт 12, 2016 08:37:46
BOB51
ARV писал(а):господа, а вот оно вам нужно - ковыряние в неприличном? ну для какой цели эти "исследования"? неужели вы всерьез собираетесь использовать недокументированные возможности, которые по определению противоречат здравому смыслу, а именно использование области РОН под стек?! лучше посоветовать пожелавшему такое сделать лизнуть провода, торчащие из розетки, чем так писать программы...
...
Вообще-то надо...
Ибо
1. чтоб не было в дальнейшем попыток использовать некорректные комбинации команд/адресного пространства
2. несмотря на имеющиеся в системе команд MOV rd,rr и MOVW rd,rr при преимущественной обработке массивов с размещением данных в ОЗУ имеется также интерес к обработке коротких массивов с размещением данных в регистрах РОН (до 16 байт) при косвенном указателе в Z/X/Y.
trofim2 писал(а):У меня ошибок не выдает
screen_cr.jpg
Это при компиляции, а мой скрин касается работы дебаггера

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср окт 12, 2016 09:02:14
ARV
BOB51 писал(а):Вообще-то надо...
Ибо
вот это ваше "ибо" очень напоминает вырезание аденоидов через задний проход...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср окт 12, 2016 09:05:40
BOB51
Ну уж "когда КОТУ делать нечего..." можно и такими вопросами поинтересоваться.
Мало ли чего и когда потребуется...

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср окт 12, 2016 10:02:40
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