IAR C действительно это делает сам. По второму пункту Вы тоже абсолютно правы.
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Bill 08 ноября 2004 г. 17:06
В ответ на: Разве...??? отправлено Сапожник 08 ноября 2004 г. 15:25

В AVR на аппартном уровне отсутствует поддержка вложенных прерываний. Делать ее программно очень рискованно, поскольку теряется сам смысл приоритетных прерываний. Вы получили запрос на прерывание от источника имеющего более высокий приоритет и тут же разрешаете прерывание от источников с меньшим уровнем. Какой смысл в этом? Более того, когда порядок нарушается поведение программы становиться гораздо менее предсказуемым. Про проблемы со стеком я уже и не говорю. Поэтому в случае AVR лучше всего не пользоваться вложенными прерываниями. Я сейчас осваиваю dsPIC, там имеется аппаратная поддержка вложенных прерываний. Но там система прерываний многоуровневая. А вообще, обычно рекомендуют делать программы обработки прерываний как можно короче.
Возвращаясь к пункту 1, в порядке уточнения. IAR для сохранения регистров использует специальный стек данных CSTACK. В качестве указателя стека используется Y-регистр (R29-R28). При входе в процедуру обработки прерывания сохраняются прежди всего SREG и все используемые в процедуре регистры. Это делается с помощью инструкций st -Y, Ri. Если внутри процедуры имеется обращение к другой функции, то сохраняются абсолютно ВСЕ регистры. Отсюда и повышенные требования к размеру стека данных. При выходе из прерывания идет восстановление содержимого регистра из стека с помощью инструкций ld Ri, Y+.

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

Ответы



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

E-mail: info@telesys.ru