winniethepooh 0 20 мая, 2016 Опубликовано 20 мая, 2016 (изменено) · Жалоба Здравствуйте. использую низкоуровневую библиотеку драйверов от производителя (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. кажется ответ нашелся. блокировка нужна для многозадачной среде(что бы свойства очереди не менять) и критическая секция соответственно. Изменено 20 мая, 2016 пользователем winniethepooh Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться