zoukankan      html  css  js  c++  java
  • 细节决定成败

    慎用标志位(本人单片机菜鸟,高手请高抬贵手,欢迎指点!~)
    这里说的是合理谨慎的运用标志位,否则很容易出现错误,也很难debug。
    今天工作的时候,修改定时器定时功能的时候,得出的经验,这里说的与具体的单片机无关,是个通用的想法。
    以我今天修改的为例:
    PIC单片机的两个I/O引脚控制着两个LED灯(分别为蓝灯和红灯,这里以LED代替,避免涉及公司里的内容)的亮和灭。
    要求是
    蓝灯每5s亮一次,大概亮100ms;
    红灯每隔10s亮一次,每次亮100ms;
    红灯和蓝灯尽量错开。
    我的思路是,
    定义一个10s的时间轴,用定时器来实现,在2.5秒和7.5秒时刻点亮蓝灯,在10s时刻点亮红灯。
    有一个全局变量cnt。

    定义一个全局变量times = 0。

    0             2.5s   		5s            7.5s  		10s
    |-------------|===|-------------|-------------|===|-------------|+++|
                   blue             	       blue              red
    |----times=0------|----------times=1----------|----times=0-----------|


    我理所当然的就
    每10ms进一次中断
    if((cnt > 250)&&(times == 0))
    {
    times = 1;
    blue_led_light_flag = 1;
    blue_led_on = 1;
    }


    if((cnt > 750)&&(times == 1))
    {
    times = 0;
    blue_led_light_flag = 1;
    blue_led_on = 1;
    }
    if(cnt > 1000)
    {
    red_led_light_flag = 1;
    red_led_on = 1;
    }
    if((cnt > 250)&&(times == 0)) 理所当然的以为这样是可以的,且不知这里有一个bug,因为在7.5-10s的时候,也符合这个条件的。。。这样出来的系哦啊过就不是上面所想的
    我们应该改为if((cnt > 250)&&(times == 0)&&(cnt < 750))这样才是可以的。。。
  • 相关阅读:
    linux uniq 命令实用手册
    linux sort 命令实用手册
    linux awk 命令实用手册
    如何高效使用vim
    15个有趣好玩的linux shell 命令
    一篇文章带你编写10种语言HelloWorld
    如何用hugo 搭建博客
    c++中的exit()
    枚举数据类型C++
    常见的字符测试函数
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/12007528.html
Copyright © 2011-2022 走看看