Variable bool bFromIsr is true if the section is called from ISR false if from task.
Two questions:
1. Is there any OS variable I can examine to know if I am presently in an ISR? (E.g. is ISR nesting level tracked somewhere, I could not find it.) Or do I have to independently provide a value for bFromIsr?
2. Have I chosen the correct macros to do this? I had thought that I should not have to call directly any functions prefixed by “port…”. What is the correct macro for “suspend interrupts from an interrupt”? Thanks and regards, Owen
//because this can be called indirectly from multiple tasks or ISRs the action needs to be atomic
if (bFromIsr) {
uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
} else {
taskENTER_CRITICAL();
}
// BEGIN section of atomic code ////////////////
//check and update the high water mark
if (i>logPoolHwm)
{
//since we start scanning from zero, i represents the hwm
logPoolHwm = i;
}
//mark it as in use
logPool[i].inUse = 1;
// END section of atomic code ////////////////
if (bFromIsr) {
portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus );
} else {
taskEXIT_CRITICAL();
}