Hi, I'm running RL-RTX and I have a function that can be called either from a task, from an ISR or from main (at startup).
Is there is way to identify the calling routine so I can make the proper function call. In my particular case, I want to write something like the example below:
myFunction( ) {
execute some code here;
if calling function is a task
os_dly_wait( ); //put the task to sleep
else
SysCtlDelay( ); //wait using CPU cycles
}
thanks. Khaled.
Assuming you work with an ARM target, you can do this:
static BOOL IsIRQ() { BOOL is_irq = FALSE ; if (SCB->ICSR & SCB_ICSR_VECTACTIVE_Msk) is_irq = TRUE ; return is_irq ; }
Note that once the kernel is started, no function can be called from main - so the code above covers all your needs.
Thank Michael This is what I have looking for ;-)
But still this lower function that is giving me all of those issues, IS called from main and its causing a hard fault.
Is there a similar instruction to know if it's running from main or from a task? Thanks Khaled
That's up to you!
BOOL isKernelStarted() { return (flagSetToTrueJustBeforeKernelIsStarted) ; }
Thanks :-) Khaled.