ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
10 июля
339593 Топик полностью
Юрий_СВ (08.07.2012 15:58 - 16:59, просмотров: 68) ответил Aлexин Aлeкcaндp на Проблемка с потерей флагов событий....
2 комплекта флагов. В каждом комплекте флаг изменения и флаг "используется фоновым циклом". Указатель или индекс комплекта отдельно для прерываний и для фонового обработчика. При просыпании фон смотрит на флаги изменения комплектов и при наличии изменений "занимает" один из них (при отсутствии - засыпает). С этого момента прерывание пишет только во второй. По окончании обработки очистка всех флагов комплекта (флаг использования фоном в последнюю очередь). Переход на налало цикла (проверка наличия комплекта с изменениями). Узкий момент - если прерывание произойдет между проверкой и засыпанием. Вводим отдельный флаг "подготовка ко сну". Устанавливаем его перед проверкой изменения в комплектах. Если изменения есть - убираем. Если прерывание видит этот флаг - оно меняет адрес возврата в стеке - на НАЧАЛО фонового цикла. Для Cortex M это решается ещё проще - предотвратить ненужное засыпание можно с помощью WFE (кажись, сбросом события в прерывании).