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

Отсутствие заброски данных адреса возврата в "тест-стек"...
Возможно потому, что регистровый файл не совсем "полноценный" в отношении исполнения функций оперативной памяти.
Да и сами "половинки" не совсем подобны - неохота "полноценные" (r16-r31) на такие "извраты" использовать...
В отличии от той же mcs51 у АВРок это регистр-акумуляторы, завязанные на АЛУ...
Не исключены некоторые ограничения на работу указателя SP...
Может еще где прописанные в спецнастройках (тогда можно и "похоамить нестандартно"),а может - гораздо неприятнее - обусловленные аппаратно...
Тогда надежд на "фокусы" не предвидится...
Надо как-нить чиркнуть тест...

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Прямое указание в DS на mega48 хороший тормоз. Наверно, есть внутренние цепи защиты. Просто интересно попробовать, хотя я и не сторонник такого.The Stack Pointer must be set to point above 0x0100, preferably RAMEND.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Результаты натурных испытаний (в железе).
В качестве стека использовалась область ввода-вывода Timer/Counter1.
Стек настроен на адрес $8С.
Команды pop и push отрабатывает нормально,
rcall и ret - переходит на рестарт (похоже читает 0).
В качестве стека использовалась область ввода-вывода Timer/Counter1.
Стек настроен на адрес $8С.
Команды pop и push отрабатывает нормально,
rcall и ret - переходит на рестарт (похоже читает 0).
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Спойлер
Код: Выделить всё
.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
.EXITRe: Ассемблер (ASM) для AVR в вопросах и ответах
Мндя...
Доступ к регистрам r0-r31 как к ОЗУ для LD/ST является нормой (как и для области портов ввода/вывода), а вот со стороны стековых операций там работы нету - видимо стоит какое-то аппаратное ограничение. Хотя... Изначально заявлено как "отображаемое на память" что не то же самое по сравнению что "полноценное ОЗУ"...
В каждом *def.inc файле есть дополнительная строчка с ограничением
#pragma AVRPART MEMORY INT_SRAM START_ADDR 0x60 ( 0x60 или какой другой - в зависимости от МК)
причем оговорено, что ее значения "лучше не трогать".

Доступ к регистрам r0-r31 как к ОЗУ для LD/ST является нормой (как и для области портов ввода/вывода), а вот со стороны стековых операций там работы нету - видимо стоит какое-то аппаратное ограничение. Хотя... Изначально заявлено как "отображаемое на память" что не то же самое по сравнению что "полноценное ОЗУ"...
В каждом *def.inc файле есть дополнительная строчка с ограничением
#pragma AVRPART MEMORY INT_SRAM START_ADDR 0x60 ( 0x60 или какой другой - в зависимости от МК)
причем оговорено, что ее значения "лучше не трогать".
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Как показала практика, ничего из этого невозможно.
А "#pragma AVRPART MEMORY INT_SRAM START_ADDR" не знаю на что влияет.
А "#pragma AVRPART MEMORY INT_SRAM START_ADDR" не знаю на что влияет.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
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 в вопросах и ответах
Самое интересное, что Push/Pop тоже работает, (правда проверял с одной парой Push/Pop), но не нашел, куда складывает.
Указатель стека настраивал выборочно в диапазоне от 15 до $AF, даже на адреса, не занятые I/O.
Указатель стека настраивал выборочно в диапазоне от 15 до $AF, даже на адреса, не занятые I/O.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Это скорее "ошибка среды" прикрывающая от "синего экрана" сам ПК.
Там же явно выбрасывается предупреждение:


Там же явно выбрасывается предупреждение:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
У меня ошибок не выдает
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
господа, а вот оно вам нужно - ковыряние в неприличном? ну для какой цели эти "исследования"? неужели вы всерьез собираетесь использовать недокументированные возможности, которые по определению противоречат здравому смыслу, а именно использование области РОН под стек?! лучше посоветовать пожелавшему такое сделать лизнуть провода, торчащие из розетки, чем так писать программы...
очевидно же, что решение на 100500% не в нескольких байтах ОЗУ под стек кроется! проблема ведь, скорее всего, в неправильном алгоритме, ошибках в программе, на худой конец, в неправильно выбранном МК... но никак не в увеличении стека за счет РОН!trofim2 писал(а):Памяти не хватает
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Ну праздное любопытство никто не отменял.ARV писал(а):ну для какой цели эти "исследования"?
Я думаю никто тут и не собирался, кроме trofim2.ARV писал(а):неужели вы всерьез собираетесь использовать недокументированные возможности
Мне тоже не понятно. Даже если предположить, что если действительно не хватает нескольких байт, то почему нельзя оставить SP указывать туда куда следует, а в РОН хранить данные не влезшие в ОЗУ?ARV писал(а):очевидно же, что решение на 100500% не в нескольких байтах ОЗУ под стек кроется!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Пытливый расейский ум...
"Пробьет он крышку люка или нет? " ©
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Пробьет! Без прерываний работает.
Недокументированного ничего не использую.
Недокументированного ничего не использую.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
вы хоть расскажите, что за задачу решаете и на каком МК, что таким способом боретесь с нехваткой стека... а то догадостности не хватает додуматься самому, зачем это нужно...trofim2 писал(а):Без прерываний работает.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
ARV писал(а):господа, а вот оно вам нужно - ковыряние в неприличном? ну для какой цели эти "исследования"? неужели вы всерьез собираетесь использовать недокументированные возможности, которые по определению противоречат здравому смыслу, а именно использование области РОН под стек?! лучше посоветовать пожелавшему такое сделать лизнуть провода, торчащие из розетки, чем так писать программы...
...
Вообще-то надо...
Ибо
1. чтоб не было в дальнейшем попыток использовать некорректные комбинации команд/адресного пространства
2. несмотря на имеющиеся в системе команд MOV rd,rr и MOVW rd,rr при преимущественной обработке массивов с размещением данных в ОЗУ имеется также интерес к обработке коротких массивов с размещением данных в регистрах РОН (до 16 байт) при косвенном указателе в Z/X/Y.
trofim2 писал(а):У меня ошибок не выдает
Это при компиляции, а мой скрин касается работы дебаггера
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
вот это ваше "ибо" очень напоминает вырезание аденоидов через задний проход...BOB51 писал(а):Вообще-то надо...
Ибо
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Ну уж "когда КОТУ делать нечего..." можно и такими вопросами поинтересоваться.
Мало ли чего и когда потребуется...

Мало ли чего и когда потребуется...

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Действительно работает в железе только при однократном PUSH/POP!!!trofim2 писал(а):Самое интересное, что 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

