А можно как-то с терминологией определиться? Есть ведь общеупотребительная терминология. Вы, похоже, сами запутались.
Есть прерывания процессора. Есть приоритет прерывания планировщика ОС. Отсюда и танцуйте. Исходя из свои представлений, у себя в программе я сделал так:
//--------------------------------------------------------------------------
// Настраиваемм приоритеты прерываний.
NVIC_t
*nvic = NVIC_t::getInstance();
// Настраиваем все 4 приоритетных бита на PreemptPriority бит
// и ни один из них на SubPriority бит. Это означает, что прерывание с более
// высоким приоритетом, имеющее меньший номер, будет перебивать прерывание
// с меньшим приоритетом, имеющее бОльший номер.
nvic -> setPriorityGrouping( NVIC_PRIORITYGROUP_4 );
// Устанавливает для планировщика, вызываемого из SysTick, самый низкий
// приоритет.
nvic -> setPriority( SysTick_IRQn, configLIBRARY_LOWEST_INTERRUPT_PRIORITY );
// Учитывая настройки в "FreeRTOSConfig.h", получаем, что в обработчиках
// прерываний с приоритетом 15..5 можно вызывать функции с суфиксом FromISR,
// а в обработчиках с приоритетом 4..0- нельзя!
Попутно тут же задам вопрос по поводу назначения приоритетов для самой ОС.
Меня смущает вот что:
const intfunc
__vector_table[] __attribute__ ( ( section (".isr_vector_FLASH" ), used ) ) =
{
(intfunc)&_estack ,
&Reset_Handler,
&NMI_Handler,
&HardFault_Handler,
&MemManage_Handler,
&BusFault_Handler,
&UsageFault_Handler,
&Default_Handler,
&Default_Handler,
&Default_Handler,
&Default_Handler,
&vPortSVCHandler,
&DebugMon_Handler,
&Default_Handler,
&xPortPendSVHandler, //<<<<<<<<<<<
&xPortSysTickHandler, //<<<<<<<<<<<
....
Как правильно задать наименьший приоритет для планировщика? Вопрос связан с тем, в прерывании от систика возбуждается прерывание для обслуживания планировщика. Поясните, пожалуйста, этот нюанс.