Quality RTOS & Embedded Software

 Real time embedded FreeRTOS RSS feed 
Real time embedded FreeRTOS mailing list 
Quick Start Supported MCUs PDF Books Trace Tools Ecosystem TCP & FAT Training




Loading

Management sleep modes in FreeRTOS

Posted by spl12 on March 16, 2011
Currently I’m working about a possible way to manage the sleep modes in FreeRTOS. Since even other companies use sleep modes to manage the power management, I thought to adopt a strategy common to all. Below, it is a sum up about my idea.

Sleep Mode for tasks
Basically, inside in each task’s body the user can define the sleep mode to go in for the next idle tasks ( using PMSetSleepMode) and the Power Framework will choose only that sleep mode in common among tasks.

Sleep mode for ISRs

An example: If two tasks request to stay in sleep mode 2 and just before to go in idle task, an interrupt occurs, then can be the case that the sleep mode chosen is not longer valid after ISR’s execution. For this reason, we need to define an API to choose the sleep mode also for ISR.
But in this case we have the necessity to know for how long we have to keep the sleep mode chosen by ISR. This is an important case, in fact if many ISRs occur (each ISR defines a different sleep mode) the system before to choose a sleep modes must be sure that it doesn’t go in a wrong one.
For instance: ISR1 wants to stay in Sleep Mode 1 (because the ISR2 is triggered by a peripheral of Sleep mode 1), then when ISR2 occurs, the system can go in sleep mode 2. Thus, the system can’t understand for how long a sleep mode can be kept valid. To cope this issue, a function “PMLockSleepMode” defines a starter point of a sleep mode and another function “PMUnlockSleepMode” defines the end of that sleep mode. The idea is to freeze the sleep mode for a while. The user can unlock the mode in another ISR or in a Task.
If we don’t want to freeze the sleep mode, we can use the function “PMSetSleepModeISR”. After invocation of this function, the system keeps valid the sleep mode only until the end of first idle task. For the following idle tasks the sleep mode is discarded.

Power Management Framework

+ PMSetSleepMode (unsigned char mode) ==> Set a sleep mode for that task (sleep mode is used in next idle tasks);
+ PMSetSleepModeISR (unsigned char mode) ==> Set a sleep mode for that ISR (sleep mode is used only for next idle task);
+ PMGetSleepMode () ==>Returns the current sleep mode where the system can go to. The sleep mode depends from the requests done by other tasks or ISRs. This function is used only inside tasks body;
+ PMGetSleepModeISR() ==>Returns the current sleep mode where the system can go to. The sleep mode depends from the requests done by other tasks or ISRs. This function is used only inside ISRs body;
+ PMLockSleepModeISR (unsigned char mode) ==> Lock a sleep mode inside an ISR. The lock can be done only inside an ISR. A sleep mode can be locked for many times (max 256). A further version of this function might be to lock a sleep mode for a duration of time given in input;
+ PMUnlockSleepModeISR (unsigned char mode) ¬==> Unlock a sleep mode from an ISR.
+ PMUnlockSleepMode (unsigned char mode) ==> Unlock a sleep mode from a task.
+ PMIdleSleepMode() ==> Returns the suitable sleep mode for idle task. This function is invoked inside idle task, it is used before to go in sleep mode.
+ PMGoToSleep (unsigned char mode) ==> This function pushes the MCU in sleep mode taken in input.

Actually, I’ve developed an implementation about this power framework for Energy Micro. For me it is really important to get feedback and suggestions to improve my work.

Best Regards
Angelo

RE: Management sleep modes in FreeRTOS

Posted by larytet on November 11, 2011
I am planning to similar work for st32. there three low power modes. will you publish sources you have?
that would help me teremendously. thank you.

RE: Management sleep modes in FreeRTOS

Posted by larytet on November 11, 2011
I apologize for English. this is 3am here and i am using a tablet.

my idea is similar to yours. i need also some generic power management API for the drivers, IP stack. my software timers come handy here. also some basic support for keeping stack, data, registers in battery backup SRAM would be cool.


RE: Management sleep modes in FreeRTOS

Posted by larytet on November 14, 2011
Please, follow progress here http://www.assembla.com/spaces/freertos/wiki/FreeRTOS_power_management

I will update this thread if/when there is a preliminary source code is available. The current platform is STM32. The power manager code is going to be fairly independent


[ Back to the top ]    [ About FreeRTOS ]    [ Sitemap ]    [ ]




Copyright (C) 2004-2010 Richard Barry. Copyright (C) 2010-2016 Real Time Engineers Ltd.
Any and all data, files, source code, html content and documentation included in the FreeRTOSTM distribution or available on this site are the exclusive property of Real Time Engineers Ltd.. See the files license.txt (included in the distribution) and this copyright notice for more information. FreeRTOSTM and FreeRTOS.orgTM are trade marks of Real Time Engineers Ltd.

Latest News:

FreeRTOS V9.0.0 is now available for download.


Free TCP/IP and file system demos for the RTOS


Sponsored Links

⇓ Now With No Code Size Limit! ⇓
⇑ Free Download Without Registering ⇑


FreeRTOS Partners

ARM Connected RTOS partner for all ARM microcontroller cores

Renesas Electronics Gold Alliance RTOS Partner.jpg

Microchip Premier RTOS Partner

RTOS partner of NXP for all NXP ARM microcontrollers

Atmel RTOS partner supporting ARM Cortex-M3 and AVR32 microcontrollers

STMicro RTOS partner supporting ARM7, ARM Cortex-M3, ARM Cortex-M4 and ARM Cortex-M0

Xilinx Microblaze and Zynq partner

Silicon Labs low power RTOS partner

Altera RTOS partner for Nios II and Cortex-A9 SoC

Freescale Alliance RTOS Member supporting ARM and ColdFire microcontrollers

Infineon ARM Cortex-M microcontrollers

Texas Instruments MCU Developer Network RTOS partner for ARM and MSP430 microcontrollers

Cypress RTOS partner supporting ARM Cortex-M3

Fujitsu RTOS partner supporting ARM Cortex-M3 and FM3

Microsemi (previously Actel) RTOS partner supporting ARM Cortex-M3

Atollic Partner

IAR Partner

Keil ARM Partner

Embedded Artists