Перейти к содержанию
    

еще о приоритетах прерываний cortex m3

Здравствуйте.

 

использую низкоуровневую библиотеку драйверов от производителя (cortex m3 от spansion ) совместно с freertos.

в функции main после вызова xQueueCreate (перестаёт обрабатываться прерывание от Uart (уровень прерывания 15 на момент инициализации)

уровни в FreeRTOSConfig

configLIBRARY_LOWEST_INTERRUPT_PRIORITY 0xf

configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5

configMAX_SYSCALL_INTERRUPT_PRIORITY 0x50

configKERNEL_INTERRUPT_PRIORITY 0xf0

 

в отладчике вижу что после вызова xQueueCreate регистр BASEPRI получает значение configMAX_SYSCALL_INTERRUPT_PRIORITY =0x50

(для freertos это похоже на вход в критическую секцию), и прерывания от uart выше 4 перестали обрабатываться

предполагаю что младшие четыре байта для регистра приоритета не важны а в старших записано 5 и все что выше или равно 5

запрещается регистром приоритета BASEPRI.

 

Вопрос зачем при создании очереди блокировать прерывания?

 

p.s. кажется ответ нашелся. блокировка нужна для многозадачной среде(что бы свойства очереди не менять) и критическая секция соответственно.

Изменено пользователем winniethepooh

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...