本算法把单片机软件功能划分成一个个子任务,每个子任务有一个标志。任务对应的标志为1,就需要运行该任务,为0,跳过该任务。只要所有的任务标志位都为0,说明没有任务可以运行,就进入低功耗睡眠状态。
单片机的唤醒,需要外部事件的触发,比如按键触发,定时触发。以两个比较典型的任务:按键任务,定时任务为例,说明实现过程,按键任务特点是需要运行一定时间,定时任务特点是运行一次:
1.判断按键任务标志是否为1,为1,则处理按键任务,在按键任务里判断任务是否结束,如果结束就清除任务标志。
2.判断定时任务标志是否为1,为1,则处理定时任务,处理完后,清除定时任务标志。
3.判断标志是否都为0,为0则进入低功耗模式。
一般任务在循环里只运行一次就立即结束。但是也存在有些任务,比如按键任务,针对要处理按键长按的情况,需要运行一定时间,所以针对此类任务会设置超时时间,如果任务没运行完,但是超时了,就立即清除任务标志。这样就不会存在有任务会长时间运行,导致不进入低功耗睡眠状态而耗电。
伪代码:
While (1)
{
If (按键任务标志 == 1)
{
处理按键任务(在按键任务里判断任务是否结束,如果结束就清除任务标志)
}
If (定时任务标志 == 1)
{
处理定时任务
定时任务标志清0
}
If (所有任务标志都为0)
{
睡眠
}
}
算法特点:
1.与任务个数无关。
2.每个任务都可以执行到,不存在优先级高的任务一直执行,导致其他任务没法执行。
3.有超时机制,保证一定会进入低功耗。
4.实现简单。