--t和T--的区别,大家看这个程序,如果参数为1会怎么样?
请教大家,如果参数输入是1,即:delayx10us(1),这个程序会运行吗。void delayx10us(unsigned char t)
{
do {
_nop_(); //延时一个机器周期
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}while(--t); //先-1再判断真假
} 参数为1执行一次啊,参数为0也是执行一次 用 do while不怎么合适
for(;t>0;t--){
} JuncoJet 发表于 2019-8-21 11:08
用 do while不怎么合适
for(;t>0;t--){
如果是 KEIL51 的话,用 do-while(--x) 可以严格对应 DJNZ 指令,生成的延时代码固定,比较好操作 do{}while 是先循环再判别条件,while{} 是先判别再循环。 t3486784401 发表于 2019-8-21 11:39
如果是 KEIL51 的话,用 do-while(--x) 可以严格对应 DJNZ 指令,生成的延时代码固定,比较好操作
平台的差异这个就不好说了,X86下的话 for 能触发,loop 指令 这个函数用--t不合适。
如果一开始T就是0的话,就成255了。然后循环256次。 用0,怎么会变成255次呢
参数为1的 话,他会先执行一遍do()里面的程序,然后就跳出来了。
但是如果为0,那么他还会循环256次。
首先要搞明白T--和--t的区别。。
排除其他条件。光讲t--和--t。。。。t--是先执行了再减,--t是先减了再执行。 bios 发表于 2019-8-21 13:38
用0,怎么会变成255次呢
因为unsigned char最高就是255,假如定义一个A为8位的有符号整数。那么他最大就是255,如果再加1的话他就溢出了。就成0了。
同理,假如他为0,减去1就成255了
页:
[1]