When my application detects a power fail I'd like to 'kill' the RTOS ( stop all tasks ) so that 100% micro processing resource is available for PF Code. Probably there is no graceful way for code execution to reach PF Code ? I need to execute PF Code directly following execution of code at a certain point within the low priority task that is fully responsible for non volatile storage access ( I'd like to 'kill' the RTOS from this task ).
/* Finally start the scheduler. */
/* PF Code: ( all tasks and RTOS are now 'dead' )
/* Save all my data to non volatile storage */
/* Force a micro reset */
/* Will only reach here if there is insufficient heap available to start
the scheduler. */
Which architecture are you running on? Few ports provide an "end
scheduling" function as there is nothing to return to. For example the
Cortex-M port re-uses the stack that was used by main().
However, why not perform this processing from any task - or even a high
priority task that runs in response to a power fail event? The task can
enter a critical section to stop RTOS interrupts interfering with your
post power fail processing.
I'll use a critical section as you suggest within my PIC24 architecture.
I was just hoping to exit RTOS gracefully rather than reset the micro from within a task
Pre RTOS tasks ( hardware initialization etc. )
Post RTOS tasks ( save power fail data, reset micro )