矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 2211|回复: 10

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

[复制链接]
     
发表于 2019-8-21 10:59:35 | 显示全部楼层 |阅读模式
  请教大家,如果参数输入是1,即:delayx10us(1),这个程序会运行吗。

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

}
     
发表于 2019-8-21 11:07:06 | 显示全部楼层
参数为1执行一次啊,参数为0也是执行一次
回复 支持 反对

使用道具 举报

     
发表于 2019-8-21 11:08:43 | 显示全部楼层
用 do while不怎么合适
for(;t>0;t--){

}
回复 支持 反对

使用道具 举报

     
发表于 2019-8-21 11:20:25 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
发表于 2019-8-21 11:39:24 | 显示全部楼层
JuncoJet 发表于 2019-8-21 11:08
用 do while不怎么合适
for(;t>0;t--){

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

使用道具 举报

     
发表于 2019-8-21 11:44:23 | 显示全部楼层
do{}while 是先循环再判别条件,while{} 是先判别再循环。
回复 支持 反对

使用道具 举报

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

平台的差异这个就不好说了,X86下的话 for 能触发,loop 指令
回复 支持 反对

使用道具 举报

     
发表于 2019-8-21 13:33:41 | 显示全部楼层
这个函数用--t不合适。
如果一开始T就是0的话,就成255了。然后循环256次。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2019-8-21 13:38:33 | 显示全部楼层
用0,怎么会变成255次呢
回复 支持 反对

使用道具 举报

     
发表于 2019-8-21 13:39:44 | 显示全部楼层
参数为1的 话,他会先执行一遍do()里面的程序,然后就跳出来了。
但是如果为0,那么他还会循环256次。
首先要搞明白T--和--t的区别。。
排除其他条件。光讲t--和--t。。。。t--是先执行了再减,--t是先减了再执行。
回复 支持 反对

使用道具 举报

     
发表于 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了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-29 07:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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