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

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

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

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

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

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

while(1)

{

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

PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);

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

}

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

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

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

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

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

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值