[an error occurred while processing this directive] [an error occurred while processing this directive]
to AK(стеки, AVR, etc...)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено AlexD 09 сентября 2001 г. 09:00

Судя по паузе, с которой Вы ответили на моё сообщение
Вы бегло просматривали доку на AVR :-). Но для того,
что-бы понять смысл моего сообщения нужно более чётко
представлять систему команд AVR.
.
Так, действительно, в доке указан только один - "официальный"
стек, указатель которого расположен в пространстве IO.
Он работает как стек возвратов, но может использоваться
и для данных командами PUSH Rr, POP Rd (NB! за два такта
на команду).
.
НО! Есть в архитектуре AVR 16 разрядные регистры-указатели
X (r26/r27), Y (r28/r29), Z (r30/r31), которые служат
для сохранения/восстановления данных в SRAM. У них есть
очень интересные свойства - режимы АВТОпостинкремента и
АВТОпреддекремента. Таким образом пара команд
.
ST X+, Rr
LD Rd, -X
.
("рост" вверх) или
.
ST -X, Rr
LD Rd, X+
.
("рост" вниз)
.
по своему эффекту НИЧЕМ не отличается от команд
.
PUSH Rr
POP Rd
.
и выполняется за те-же 4 такта.
.
Например компилятор Си IAR ВООБЩЕ не использует "штатный"
стек возвратов для сохранения контекста (и правильно делает),
для этого он использует стек по указателю Y !
Вот пример входа в прерывание:
.


132 __interrupt void int_faza (void) {
\ __nearfunc __interrupt void int_faza();
\ int_faza:
\ 00000000 93EA ST -Y,R30 ;сохранение
\ 00000002 931A ST -Y,R17 ;исползуемых
\ 00000004 930A ST -Y,R16 ;регистров
\ 00000006 B71F IN R17,63 ;и статуса
;
; ..... тру-ля-ля
;
\ 0000002E BF1F OUT 63,R17 ;восстановление
\ 00000030 9109 LD R16,Y+ ;всего
\ 00000032 9119 LD R17,Y+ ;этого
\ 00000034 91E9 LD R30,Y+ ;добра
\ 00000036 9518 RETI

.
Ну разве не прелесть?!!
Таким образом в ПРЕДЕЛЕ можно использовать до четырёх стеков!!!
Ну пусть один указатель - X - выделим на работу с памятью программ и
на произвольный доступ в SRAM, но и 3 стека - уже хорошо, особенно
если они Вам нужны :-). Особенно по сравнению с "полустеком"(с) PIC.
.
AK, мне кажется Вы излишне "погрузли" в PIC'ах. Тот же Форт ложится
на архитектуру AVR с эротическим писком :-)).
.
PS.
"Есть многое на свете, друг Горацио,
что и не снилось нашим мудрецам."(с)Шекспир "Гамлет"
.
"Век живи - век учись" Народная мудрость.


Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru