I know it is a recurrent topic but after I read all a could find about this, I still have a problem using interrupts in combination with FreeRTOS.
I’m using libopencm3. On my board I can run the libopencm3 USB stack in interrupt mode without problem. But, if I run a FreeRTOS task, it mess up things (I get my device always connect/disconnect). I didn’t look at the root cause of this connect/disconnect problem. However I suspect the usbd_poll function (called in the USB ISR) to be preempted. My ISR is as simple as this:
And my task (I know, there is no vTaskDelay):
static portTASK_FUNCTION(vLEDFlashTask, pvParameters)
int i = 0;
// It waits for TX reg empty then send the char
I did setup all the priority bits as pre-emption priority:
// Same as NVIC_PriorityGroupConfig( NVIC_PriorityGroup_4 )
My ISR priority is 1:
I also tried to change the system handler priority for systick, svcall and pendsv (as for what I understood are priority ‘0’ by default):
SCB_SHPR(SCB_SHPR_PRI_11_SVCALL) = 12;
SCB_SHPR(SCB_SHPR_PRI_14_PENDSV) = 13;
SCB_SHPR(SCB_SHPR_PRI_15_SYSTICK) = 14;
However if I remove the usart_send_blocking call in the task, it works as expected. Anyone as a clue ?
Thanks in advance,