Power fail

ady001 wrote on Tuesday, May 03, 2016:

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. */
vTaskStartScheduler();

/* 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. */
return 0;

rtel wrote on Tuesday, May 03, 2016:

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.

ady001 wrote on Wednesday, May 04, 2016:

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
i.e.
Pre RTOS tasks ( hardware initialization etc. )
RTOS starts
Post RTOS tasks ( save power fail data, reset micro )