OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3664|回复: 2

Timer定时器里面计数值的处理习惯

[复制链接]

15

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
647
金钱
647
注册时间
2014-4-29
在线时间
299 小时
发表于 2015-8-11 15:56:13 | 显示全部楼层 |阅读模式
5金钱
    问一个比较菜的问题,希望前辈们多多指导。
很多程序里面因为要在多处用到定时的功能,所以会有在定时器中断里面分割定时器频率的行为。
比如下面的函数,定时提供标志位给别的函数使用,我也习惯写成这样
函数1:
void TimIntHndl(void)
{
    static u16 timcnt[10];
    timcnt[0]--;
    if(0==timcnt[0])
    {  
          timcnt[0] = RELOAD_VALUE_0;
          timflg[0] = 1;
    }
    ……
}
但是以前我见过有同事把这种函数做成类似这样
函数2:
void TimIntHndl(void)
{
    static u16 timcnt[10];
    timcnt[0]++;
    if(timcnt[0] >= RELOAD_VALUE_0)
    {  
          timcnt[0] = 0;
          timflg[0] = 1;
    }
    ……
}
当时就问他为啥是判断大于等于,回答是“更安全,防止受到意外的影响让cnt的值越过reload的值,导致要溢出一次才能响应”。这样的说法有道理吗?这种事情可能发生吗?
如果真有道理的话,再回头看函数1,当cnt的值减到0之后,加入出现意外,继续--,这个无符号数会溢出成很大的数吗?
如果把他定义成有符号的数 ,在写成这样,会不会更安全?
函数3:
void TimIntHndl(void)
{
    static s16 timcnt[10];
    timcnt[0]--;
    if(timcnt[0] <= 0)
    {  
          timcnt[0] = RELOAD_VALUE_0;
          timflg[0] = 1;
    }
    ……
}
另外还有一个问题,比较一个无符号数是否为0比 比较2个无符号数的大小要快;比较和运算有符号数要比无符号数慢。
那么函数2和函数3哪个会变得更慢呢?

最佳答案

查看完整内容[请看2#楼]

你同事 说的确实有道理 不过,这个就看你自己的需求了,有时候,是必须判断等于条件的,所以,用>=/<=,还是用==,得根据实际情况来确定。 至于速度快慢,这个倒是没有研究了,你自己测试吧。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-8-11 15:56:14 | 显示全部楼层
你同事 说的确实有道理
不过,这个就看你自己的需求了,有时候,是必须判断等于条件的,所以,用>=/<=,还是用==,得根据实际情况来确定。
至于速度快慢,这个倒是没有研究了,你自己测试吧。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

15

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
647
金钱
647
注册时间
2014-4-29
在线时间
299 小时
 楼主| 发表于 2015-8-12 08:48:55 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
多谢啦
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-23 19:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表