前段时间做基于μ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);
}
}
|