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

Отправлено FastAVR 29 марта 2002 г. 13:13
В ответ на: Ответ: отправлено Ilhom 29 марта 2002 г. 08:59

В Вашем ответе хоть и существенное, но только одно разъяснение, к сожалению. В таком случае, Вам должно высвободить Z-пару под косвенный переход аки BLACKEAGLE.

Касаемо держать "вектор" в регистрах следующие мысли вслух. По подкорректированному BLACKEAGLE абсолютно законная альтернатива IJMP_address:
ldi r16,low(address)
ldi r17,high(address)
push r16
push r17
ret

последние три (!) во времени идентичны нижеследующему:
mov tempL,ZL ;при входе
mov tempH,ZH ;___
mov ZL,r16
mov ZH,r17
ijmp
mov ZL,tempL ;___
mov ZH,tempH ;при возврате

Кажется, что просто зря задействавано лишних два регистра и больше памяти программ. Однако, вспомним, что у нас 2313. И если пара Z не используется для LPM (там, где прерываемся, конечно), то так работать с ZH не требуется. Он может хранить high(address) завсегда. Это никак не мешает обращению к памяти данных (мало её). А именно:
ldi r16,low(address) ;переключение фазы
ldi ZH,high(address)
+
mov tempL,ZL ;при входе
mov ZL,r16
ijmp ;2_clocks
mov ZL,tempL ;при возврате

Замечу, что ldi_ZH,high(address) можно сделать единожды, когда все начала обработчиков фаз лежат в выравненном 256-командном блоке.

Подобно можно играться со стеком (SPL). Предварительно разложим в памяти пять AddressPhase. Тогда:
ldi r16,address_pointer ;переключение фазы
+
mov tempL,SPL ;при входе
mov SPL,r16
ret ;4_clocks
mov SPL,tempL ;при возврате

или застолбив слово в памяти данных и единожды указав на него ldi_r16,address_pointer менять в ОЗУ вектор перехода. Помните, что регистры доступны как память, т.е. SPL < 0x20 указывает на регистровый блок.

Надеюсь - я не ошибся и Вы раскопаете здесь нечто полезное для себя...

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

Ответы



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

E-mail: info@telesys.ru