历史上的今天
今天是:2025年03月29日(星期六)
2019年03月29日 | STM32 μC/OS系统进睡眠模式的方法
2019-03-29 来源:eefocus
前段时间做基于μC/OS系统的开发,遇到一个问题,在运行任务的时候需要使CPU进入睡眠状态几秒钟,但直接调用__WFI();时没有效果,后来查找资料发现需要在空闲任务中调用。
下面是我让cpu进入睡眠状态的例子:
void App_TaskIdleHook (void)
{
//检查标志确定是否需要睡眠
if(Flag_Power_Off != 0)
{
//关闭systick避免systick中断唤醒CPU
SYSTICK_Cmd(DISABLE);
Flag_Power_Off = 0;
printf("sleep\r\n");
CLKPWR_Sleep();
printf("wake\r\n");
//恢复所有挂起的任务
OSTaskResume(10);
OSTaskResume(11);
OSTaskResume(12);
OSTaskResume(13);
//使能systick恢复任务调度
SYSTICK_Cmd(ENABLE);
}
}
打开μC/OS的OS_APP_HOOKS_EN,在需要睡眠的地方加上下面的代码就可以进入睡眠状态了:
//设置定时器,定时进入中断唤醒CPU
//之前需要关闭除定时器以外的全部中断
//设置标志,需要进入睡眠状态
Flag_Power_Off = 0x01;
//挂起所有任务(保证CPU立即运行到空闲任务中)
OSTaskSuspend(10);
OSTaskSuspend(11);
OSTaskSuspend(12);
OSTaskSuspend(13);
注:在进入睡眠状态之前要用定时器设定唤醒时间并关闭除此定时器外的所有中断,我在进入空闲任务之前关掉了除systick外的中断,否则不能调度任务进入空闲任务,然后在空闲任务中关闭systick,睡眠完成之后再打开systick中断。
史海拾趣
|
期末考试在即,小弟因事耽误学业,一筹莫展之中。现有试卷一份,哪位大侠能出手相助,给予解答,事成有重谢。课程采用教材为清华大学程佩青《数字信号处理》,具体情况可加QQ:43950093详谈… 查看全部问答> |
|
以前一直从事微波系统设计,基本上没有pcb电路设计基础。现在开始从事RF设计,接触了很多微波集成芯片,感觉比以前所用的分立元件方便多了,价格优势也十分的明显。指示性能指标要差一些。想请教大家一下,射频芯片是否是一种发展趋势?具体还有什 ...… 查看全部问答> |
|
7月21日,在上海城市管理学院举办,活动规模200人。 三个专题: 最新ARM技术和嵌入式技术发展动态(ARM中国技术营销经理费浙平主讲) 嵌入式Linux启动代码--Bo ...… 查看全部问答> |
|
#include \\"DSP28_Device.h\\" void main(void) { /*初始化系统*/ InitSysCtrl(); EALLOW; &n ...… 查看全部问答> |
|
1、增加LED,方便调试。 因为5438的IO口很多,所以增加的LED不使用复用的方式,直接占用P7.2和P7.3管脚,LED的位置如下图所示,红色圈圈位置即是。 2、更改电源接口,将5mm间距的端子改成2.54mm间距的XH接插件。 开始设计成端子的原因是端子可以 ...… 查看全部问答> |
|
MSP430F1232串口收一延迟时间数据然后发一高电平信号 请教各位了,现在要用MSP1232写一个程序,通过串口收一个延迟时间的数据,收到后程序进行延迟,不知道该怎么写。求助了!!!… 查看全部问答> |
|
有没有大神懂方差补偿自适应卡尔曼滤波在监测中的应用的MATLAB程序的,可不可以给我发一份啊!急求!!!谢谢了!qq邮箱:631143008@qq.com … 查看全部问答> |




