Страница 280 из 400

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

Добавлено: Вс окт 09, 2016 16:12:49
trofim2
Для прерывания нужен стек.
Импровизации не работают.

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

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

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 или какой другой - в зависимости от МК)
причем оговорено, что ее значения "лучше не трогать".
8)

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).
:roll:
Кстати... Дебаггер у 4.19 при установке SPH:SPL (тинька 13) на область РОН команды CALL/RET отрабатывает но без наличия данных в регистрах (нет индикации соответствующих изменений - адрес возврата "где-то в дебрях" дебаггера).
:shock:

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
Это скорее "ошибка среды" прикрывающая от "синего экрана" сам ПК.
Там же явно выбрасывается предупреждение:
Изображение
:wink:

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

Добавлено: Вт окт 11, 2016 16:47:23
trofim2
У меня ошибок не выдает
screen_cr.jpg
(103.55 КБ) 443 скачивания

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.
:roll:
trofim2 писал(а):У меня ошибок не выдает
screen_cr.jpg
Это при компиляции, а мой скрин касается работы дебаггера
8)

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

Добавлено: Ср окт 12, 2016 09:02:14
ARV
BOB51 писал(а):Вообще-то надо...
Ибо
вот это ваше "ибо" очень напоминает вырезание аденоидов через задний проход...

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

Добавлено: Ср окт 12, 2016 09:05:40
BOB51
Ну уж "когда КОТУ делать нечего..." можно и такими вопросами поинтересоваться.
Мало ли чего и когда потребуется...
:dont_know:

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