前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >细节决定成败

细节决定成败

作者头像
用户4645519
发布2020-09-07 10:24:22
3430
发布2020-09-07 10:24:22
举报
文章被收录于专栏:嵌入式学习

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

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

代码语言:javascript
复制
0             2.5s   		5s            7.5s  		10s
|-------------|===|-------------|-------------|===|-------------|+++|
               blue             	       blue              red
|----times=0------|----------times=1----------|----times=0-----------|

我理所当然的就 每10ms进一次中断

代码语言:javascript
复制

 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))这样才是可以的。。。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2012/12/26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档