高级会员

- 积分
- 647
- 金钱
- 647
- 注册时间
- 2014-4-29
- 在线时间
- 299 小时
|
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#楼]
你同事 说的确实有道理
不过,这个就看你自己的需求了,有时候,是必须判断等于条件的,所以,用>=/<=,还是用==,得根据实际情况来确定。
至于速度快慢,这个倒是没有研究了,你自己测试吧。
|