单片机/MCU论坛
直播中

上下五千年

8年用户 12经验值
私信 关注
[问答]

如何在Keil ARM MDK中实现延迟功能

如何在Keil ARM MDK中实现延迟功能,等待给定时间(以微秒为单位),可以重新编译为Keil项目设置中定义的任何合理时钟速度?所有这一切都没有使用计时器。

回帖(2)

韩刚龙

2018-8-22 13:45:01
您必须确定NOP的长度,然后使用#Defines使其根据时钟速度插入正确的数字。

具体来说,您想知道完成样式的1个循环所需的时钟周期的确切数量:

for(long i=0;i {
  __NOP();
}
通过使#define为循环次数,需要根据请求的延迟和当前运行的时钟速度将其自动重新配置为自动。这可以全部包含在宏中。
1 举报
  • eedesigner: 这是一个选项,大多数更好的编译器,例如iar.com,允许您更改每个文件的优化设置。我会为这个功能禁用它们。如果你将它宏视图,你必须确保你的编译器没有优化它。当设置为最大优化时,IAR将检测此循环并将其删除。做计时的最佳方法是计时器功能,请求者出于某种原因想避免它。

eedesigner

2018-8-22 13:46:46
硬件计时器参考是首选,因为一个好的优化器可以完全删除循环或根据设置改变它。此处未提及的定时循环的另一个问题是,如果在定时循环期间发生中断,则可能需要更长时间。无论如何,中断应该很短,但不是每个系统都遵循这个口号。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分