ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
29 марта
489179 Топик полностью
Apтём (18.02.2014 22:53, просмотров: 258) ответил Dingo на Но если во время обработки прерывания оно (или другое) случилось ещё раз, как пример - из-за долгих вычислений, то проверив его повторным чтением перед выходом, мы (хотя бы) об этом будем знать. А по умолчанию, у AVR при входе в
Так бы сразу и сказал:  
Но если во время обработки прерывания оно (или другое)
...
А по умолчанию, у AVR при входе в прерывания вложенные запрещены, если их явно не разрешить sei().
Только не "по умолчанию"...вернее (имхо), умолчание - это когда есть какая-то настройка, которую можно поменять и ядро будет работать по-другому (например можно заставить ядро Cortex-M3 генерировать исключение при невыровненом доступе к памяти). Тут же вариантов нет - ядро всегда запрещает прерывания при переходе на вектор.
если их явно не разрешить sei().
TC же всё делает наоборот - запрещает прерывания на входе в обработчик (а вдруг ядро не справится с запретом - на всякий случай запретить его) и разрешает на выходе. Что может привести к неработоспособной программе: при длинном обработчике разрешаем прерывания -> попадаем в начало обработчика -> опять долгая обработка -> разрешаем прерывания ....пока ОЗУ не кончится. Гадай потом почему оно глючит.