Здравствуйте.
использую низкоуровневую библиотеку драйверов от производителя (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 - May 20 2016, 15:40
|