I'm using a non maskable interrupts which priority is above configMAXSYSCALLINTERRUPT_PRIORITY parameter, since interrupt source can't be delayed by the kernel itself. My question is, how can awake or signal a task from a non maskable interrupt? I know that i can't use any Kernel API.
Thanks in advance
You cannot do it safely by using any kernel mechanism, in case a lower priority interrupt or a task was already manipulating the kernel data structures.
You don't say which architecture you are using so I can't give any definitive suggestions, but it may be possible to pend a lower priority interrupt that is at or below configMAXSYSCALLINTERRUPT_PRIORITY, then perform the wake operation from there. The lower priority interrupt should execute after the NMI, before any task level code executes.
Thanks for your info Richard, i'm using Kinetis K20 based on Cortex-M4 architecture. The NMI interrupt is from a Timer and has "0" priority. How can i pend interrupt from Timer's ISR? This new interrupt is a software interrupt or from another peripheral?
All interrupts on Cortex chips can be pended in software. Look up the NVIC hardware manual on the ARM website. It is probably included in the Cortex M3 documentation. You are looking for a Set Pend register, and just need to set a bit in the register then write a handler for the interrupt. There is bound to be lots of interrupts you dont need and can use for this purpose.
Lot of thanks MEdwards i'll take a look at Cortex M3 users manual.