首页 > 解决方案 > C 中是否有允许在 nSec 中设置特定延迟的标准函数?

问题描述

在我的应用程序中,我需要在 C 中生成一个函数,该函数将提供以纳秒为单位的特定时间延迟。这个延迟定时器必须在软件中完成,因为我的 AVR MCU 中没有任何硬件定时器。我的问题是我希望能够以纳秒为单位设置值。我的 MCU 时钟是 20MHz(50nS 周期)。我想了一个快速的“for”循环,比如;

for (n=0; n<value; n++)

但这不会考虑编译时每次在循环周围添加多少个循环。有没有人有任何建议?我真的不想在汇编程序中编写代码。

标签: ctimeravr

解决方案


顺便说一句,你给我们的信息太少了。但我想我可以在没有他们的情况下回答,但这会让回答变得很长。让我们从更简单的问题开始,即您遇到这样的情况,即您的操作需要执行的次数少于最频繁的 isr 执行的次数。例如,您需要每 1 秒发送一个字节,但您的 isr 每 1 毫秒执行一次。所以简而言之,你需要每 1000 次执行 ISR 发送一个字节,然后你在 ISR 中创建计数器,每个 ISR 递增,当达到 1000 时你发送字节并将 cnt 设置为 0。

ISR()
{
  cnt++;
  if(cnt >= 1000)
  {
    execute(Z);
    cnt = 0;
  }
}

当您遇到问题时,isr 比执行您的操作所需的时间要慢,那么我支持重新设计您对计时器的使用。然后,您应该使此 ISR 执行得更快,然后通过计算已执行的 isr 来划分时间,如上所述。评论中提到了这一点。

我的建议是您重新考虑使用计时器的方式。


推荐阅读