easyblink bug 闪灯熄灭
Posted Soaring2020
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了easyblink bug 闪灯熄灭相关的知识,希望对你有一定的参考价值。
easyblink(led1, 5, 500, 1000);
1
功能:led1 闪烁5次 每次1000ms ,其中点亮的时间为500ms。 note:无限次的参数为-1。
实现方法:判断当前的灯属于什么状态(上一个指令有没有执行完?,上一个指令是什么?)。
上一个指令是无限次循环:保存当前无线循环的信息(周期和占空比)—>关灯—>执行当前的指令
上一个指令是有限循环且未执行完毕:等上一个指令执行完毕–>再执行当前的指令
上一个指令执行完毕了,led当前属于空闲状态:直接执行当前的指令
if(led -> nums == -1)//无限循环?
...........
else if (__EASYBLINK_IS_FLAG(led,PKG_EASYBLINK_ACTIVE))//上一个指令没有执行完毕?
..........
else
..........
1
2
3
4
5
6
easyblink只操作了led结构体(*easyblink_data)的信息,在这个函数中没有控制MCU相关引脚的电平,具体引脚电平的控制是在初始化时开的线程中实现的
3.线程实现的逻辑
线程入口函数eb_daemon_thread_entry,负责将实现数组eb_leds中每个led结构体包含的闪烁信息
遍历数组中的每个led灯
if(如果当前led应该亮) //如果这次应该亮
if(当前还有剩余的闪烁次数 或 闪烁的次数为无限次)
操作硬件点灯
清除应该亮的标志位 //下一次就是应该灭了
记录下应该亮多久 //方便到点了过来给关闭
else //如果当前没有闪烁的次数
if(如果还有下一个任务)
把led的下一个任务(bak里存着的)拿出来
tick赋值0 // 0是最小 下次线程一定先处理跟新这个灯的信息
如果任务是永久的(-1)情况,单独处理
else //没有下一个任务 (当前任务结束+没有下一个任务==》led任务结束)
关闭led灯激活的标志位 // 没有剩余的闪烁次数 也 下面也没有要做的事 这一轮就算结束了
else//如果应该灭
操作硬件灭灯
置位点亮的标志位//下一个时间点应该开灯
记录关灯的时间
闪烁的次数-1//成功完成了一次闪烁
以上是关于easyblink bug 闪灯熄灭的主要内容,如果未能解决你的问题,请参考以下文章