16+
Понедельник
20 ноября
Вход |Карта сайта | |Upload |codebook | PARTS

 О смысле всего сущего 0xFF

 Средства и методы разработки

 Мобильная и беспроводная связь

 Блошиный рынок Объявления

caxapa

Микроконтроллеры ARM 

AVR PIC MSP PLD,FPGA,DSP 

Кибернетика Технологии 

Схемы, платы, компоненты 

Микроконтроллеры PIC

 
   Новая тема Правила Регистрация Поиск »» Архив
Вернуться в конференциюТопик полностью
fk0  (31.03.2014 18:42, просмотров: 1549)
PIC24, dsPIC. Критические секции. Если использовать SET_AND_SAVE_CPU_IP и RESTORE_CPU_IPL, то генерирующийся объём кода поражает воображение. Подумал я вот чего, на входе пусть будет x=DISICNT и DISI #0x3fff, а на выходе DISICNT=x. Всего 3 
команды! Но критическая секция должна гарантированно в 16383 такта выполниться. Иначе трудноуловимые глюки. Тогда поступим так: возьмём какое-либо прерывание, например INT4, точно не используемое. Ставим ему приоритет 6 и (DISI запрещает по 6-й включительно). И разрешаем и его, и устанавливаем флаг после входа в критическую секцию (1 команда). И на выходе из критической секции если x (значение DISICNT на входе) нулевое -- сбрасываем флаг прерывание и восстанавливаем DISICNT. Таким образом, если DISICNT кончится раньше завершения критической секции, то получаем срабатывание этого прерывания и диагностику ошибки. А если не кончится, то на выходе из секции прерывание INT4 будет разрешено только в случае, если было разрешено на входе в секцию (и DISICNT значит ненулевое было). Т.е. критические секции могут быть вложенные и есть диагностика зависания в критической секции. Что тут плохо?
[ZX]
Главная | Карта сайта | О проекте | Проекты | Файлообменник | Регистрация | Вебмастер | RSS
Лето 7526 от сотворения мира. При использовании материалов сайта ссылка на caxapу обязательна.
MMI © MMXVII