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 闪灯熄灭的主要内容,如果未能解决你的问题,请参考以下文章

easyblink bug 闪灯熄灭

STM32学习笔记(CubeMX配HAL)(第六天:前面内容的一个综合训练)

STM32怎么实现单片机控制LED灯常亮10S后熄灭?

练习5 --- 树莓派编程(开关控制LED)

RGB颜色传感器

LED驱动代码编写