Hello to all Realtime developers!
In my firmware I need to implement a function that uses some FreeRTOS features (e.g. push to queue) and that could be executed either in a task or in ISR. FreeRTOS has distinct API functions for task (xQueueSend) and for ISR (xQueueSendFromISR). So my function needs to determine is it called from a task or from ISR.
There is STM32 CMSIS-RTOS API where API functions are suitable to use both in task in ISR. They use the following function to determine current context:
/* Determine whether we are in thread mode or handler mode. */
static int inHandlerMode (void)
{
return __get_IPSR() != 0;
}
but this is obviously not portable and will not work on cores other than Cortex M.
Is there a more portable way to determine is the current context a task or ISR?