In our porject,cpu is STM32F103 ,we use the function xTaskGetTickCount in the interrupt of canRx,but sometimes it can not return from the function “USB_LP_CAN1_RX0_IRQHandler”.Why and if we can use this function in the interrupt?It that ok?
A bit more precisely: it depends on portTICK_TYPE_IS_ATOMIC.
Look at the function:
TickType_t xTaskGetTickCount( void )
{
TickType_t xTicks;
/* Critical section required if running on a 16 bit processor. */
portTICK_TYPE_ENTER_CRITICAL();
{
xTicks = xTickCount;
}
portTICK_TYPE_EXIT_CRITICAL();
return xTicks;
}
It may enter a critical section depending on portTICK_TYPE_IS_ATOMIC.
Suppose that xTickCount is a 32-bit variable, and suppose that the CPU is 32-bits, the copy will be “atomic”, and no protection is needed.
Your CPU, an STM32Fxxx is 32 bits, so it is safe to call xTaskGetTickCount().
Regards.