打印
[应用相关]

延时函数中的循环技巧

[复制链接]
363|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
中国龙芯CDX|  楼主 | 2024-1-29 10:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


通常使用的延时函数均采用自加的形式:

void delay (void)
{
  unsigned int i;
  for (i=0;i<1000;i++) ;
}
将其改为自减延时函数:

void delay (void)
{
  unsigned int i;
  for (i=1000;i>0;i--) ;
}

两个函数的延时效果相似,但几乎所有的C编译对后一种函数生成的代码均比前一种代码少13个字节,因为几乎所有的MCU均有为0转移的指令,采用后一种方式能够生成这类指令。在使用while循环时也一样,使用自减指令控制循环会比使用自加指令控制循环生成的代码更少13个字母。

但是,在循环中有通过循环变量“i”读写数组的指令时,使用预减循环有可能使数组超界,要引起注意。

使用特权

评论回复
沙发
tpgf| | 2024-2-2 11:45 | 只看该作者
为什么有时候在延时函数中会运行不出来了呢

使用特权

评论回复
板凳
zljiu| | 2024-2-2 12:17 | 只看该作者
在定义变量的时候最好还是定义为无符号数据

使用特权

评论回复
地板
nawu| | 2024-2-2 12:48 | 只看该作者
这种延时函数的延时时间跟主频有关系吧

使用特权

评论回复
5
gwsan| | 2024-2-2 13:36 | 只看该作者
如果想要追求极致的话 确实应该是下边的更好

使用特权

评论回复
6
aoyi| | 2024-2-2 17:58 | 只看该作者
加法和减法在单片机中的处理方式是不一样的

使用特权

评论回复
7
tfqi| | 2024-2-2 18:31 | 只看该作者
可以通过更改判定条件来防止i变量越界吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

314

主题

2345

帖子

4

粉丝