alsaleem wrote on Sunday, April 09, 2017:
I have an application on STM32F4 that has many interrupts. some have high priority and others have low priority.
My freeRTOS file config has these values (the default).
*#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 0xf
*#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5
*#define configKERNEL_INTERRUPT_PRIORITY ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
*#define configMAX_SYSCALL_INTERRUPT_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
The controller has 4 priotity bits (#define __NVIC_PRIO_BITS 4U). This results in 16 levels.
Both configKERNEL_INTERRUPT_PRIORITY & configMAX_SYSCALL_INTERRUPT_PRIORITY will take priority greater than 16
(1) Is my conclusion correct?
(2) How to modify these to allow to categorize interrupts with priorities higher or lower than sysTick?
SysTick interrupt calls HAL_IncTick/osSystickHandler.
(2) Knowing that interrupt should be short and processing should be done later, my application can not wait the task (the task that does processing) to take its “turn” to do processing.
Is there a way to force scheduler to switch to a specific task from ISR?
Thanks.