bios 发表于 2019-8-21 10:59:35

--t和T--的区别,大家看这个程序,如果参数为1会怎么样?

请教大家,如果参数输入是1,即:delayx10us(1),这个程序会运行吗。

void delayx10us(unsigned char t)
{
do {
          _nop_();                //延时一个机器周期
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
}while(--t);                //先-1再判断真假

}

JuncoJet 发表于 2019-8-21 11:07:06

参数为1执行一次啊,参数为0也是执行一次

JuncoJet 发表于 2019-8-21 11:08:43

用 do while不怎么合适
for(;t>0;t--){

}

矿坛铁粉 发表于 2019-8-21 11:20:25

t3486784401 发表于 2019-8-21 11:39:24

JuncoJet 发表于 2019-8-21 11:08
用 do while不怎么合适
for(;t>0;t--){



如果是 KEIL51 的话,用 do-while(--x) 可以严格对应 DJNZ 指令,生成的延时代码固定,比较好操作

huxiangming 发表于 2019-8-21 11:44:23

do{}while 是先循环再判别条件,while{} 是先判别再循环。

JuncoJet 发表于 2019-8-21 11:57:55

t3486784401 发表于 2019-8-21 11:39
如果是 KEIL51 的话,用 do-while(--x) 可以严格对应 DJNZ 指令,生成的延时代码固定,比较好操作

平台的差异这个就不好说了,X86下的话 for 能触发,loop 指令

isoimg2130 发表于 2019-8-21 13:33:41

这个函数用--t不合适。
如果一开始T就是0的话,就成255了。然后循环256次。

bios 发表于 2019-8-21 13:38:33

用0,怎么会变成255次呢

isoimg2130 发表于 2019-8-21 13:39:44

参数为1的 话,他会先执行一遍do()里面的程序,然后就跳出来了。
但是如果为0,那么他还会循环256次。
首先要搞明白T--和--t的区别。。
排除其他条件。光讲t--和--t。。。。t--是先执行了再减,--t是先减了再执行。

isoimg2130 发表于 2019-8-21 13:41:18

bios 发表于 2019-8-21 13:38
用0,怎么会变成255次呢

因为unsigned char最高就是255,假如定义一个A为8位的有符号整数。那么他最大就是255,如果再加1的话他就溢出了。就成0了。
同理,假如他为0,减去1就成255了
页: [1]
查看完整版本: --t和T--的区别,大家看这个程序,如果参数为1会怎么样?