在STM32F中使用UCOSII如何支持低功耗模式

在不在系统的裸奔的软件中,使用RTC+STOP模式很容易实现低功耗模式,但是在UCOS之类的操作系统,实现这一模式就有点麻烦,最大的问题是任务切换是无法控制的,经常出现唤醒之后程序跑飞的情况。

首先,要把休眠的代码段放在低优先级任务中,不一定是系统自带的空闲任务,也可以是用户自定义的最低优先级的任务。

其次,在休眠代码的前后加上两个指令:

//===================================================================================

OSSchedLock();//禁止任务调度

while(1)

{

.....//休眠代码RTC+STOP

PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);

....//判断是否退出休眠

}

....//重新初始化系统时钟及GPIO

....//OS_CPU_SysTickInit();//systick重新初始化 非常重要的,否则跑飞

OSSchedUnlock();//允许任务调度 

//===================================================================================

其实只需要增加一下两个指令就可以解决任务切换问题。

你可能感兴趣的:(STM32)