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//成功完成了一次闪烁    
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值