low power mode transition with freeRTOS

paha11 wrote on Friday, October 28, 2011:

I work with STM32 CortexM3 and I want to go to low power mode (sleep mode) My idea is as follows:
1) Stop all peripherals except those that I want to be woke up from.
2) call vTaskSuspendAll()
3) call WFI that stops the core
4) after wakeup, check the wakeup reason
5) and call vTaskResumeAll()
6) Now the OS is running as normal and I proceed with peripheral initialization
I wonder if the described steps are sufficient and if I didn’t miss something important on the OS site.

Thank you very much for any reply

rtel wrote on Saturday, October 29, 2011:

It really depends on what you want the kernel to be doing while you are in sleep mode.

To keep track of time, and therefore to unblock tasks at the right time, you need to keep the tick interrupt running (see the exception below, about a tickless version of FreeRTOS).  That means the tick interrupt will periodically bring the Cortex-M3 out of sleep mode, which can limit the power saving.  There are ticks you can do, like reducing the tick frequency by a factor (say 10 for example) then calling the increment tick function 10 times each time the tick brings the CPU out of sleep.

For real power saving, there is a tickless version of FreeRTOS that removes the need for FreeRTOS to periodically wake the CPU up.  It requires an external low power crystal (like a watch crystal) to allow even the timers to be turned off.  I have provided a link below, which also contains a thesis on the subject.



paha11 wrote on Monday, October 31, 2011:

thank you for detailed answer