c - C 中是否有允许在 nSec 中设置特定延迟的标准函数?
问题描述
在我的应用程序中,我需要在 C 中生成一个函数,该函数将提供以纳秒为单位的特定时间延迟。这个延迟定时器必须在软件中完成,因为我的 AVR MCU 中没有任何硬件定时器。我的问题是我希望能够以纳秒为单位设置值。我的 MCU 时钟是 20MHz(50nS 周期)。我想了一个快速的“for”循环,比如;
for (n=0; n<value; n++)
但这不会考虑编译时每次在循环周围添加多少个循环。有没有人有任何建议?我真的不想在汇编程序中编写代码。
解决方案
顺便说一句,你给我们的信息太少了。但我想我可以在没有他们的情况下回答,但这会让回答变得很长。让我们从更简单的问题开始,即您遇到这样的情况,即您的操作需要执行的次数少于最频繁的 isr 执行的次数。例如,您需要每 1 秒发送一个字节,但您的 isr 每 1 毫秒执行一次。所以简而言之,你需要每 1000 次执行 ISR 发送一个字节,然后你在 ISR 中创建计数器,每个 ISR 递增,当达到 1000 时你发送字节并将 cnt 设置为 0。
ISR()
{
cnt++;
if(cnt >= 1000)
{
execute(Z);
cnt = 0;
}
}
当您遇到问题时,isr 比执行您的操作所需的时间要慢,那么我支持重新设计您对计时器的使用。然后,您应该使此 ISR 执行得更快,然后通过计算已执行的 isr 来划分时间,如上所述。评论中提到了这一点。
我的建议是您重新考虑使用计时器的方式。
推荐阅读
- reactjs - Formik onChange 执行但不更改字段值?
- css - 更改工具提示 CSS bootstrap 4 的样式
- html - 如何将中心的文本与 SVG 元素对齐?
- html - 扩展菜单区域内输入框的悬停区域
- angular - 访问 div 外的 ngform 时出现错误 TS2339
- ios - 使用 Combine 框架向 UIViewController 添加分页以实现无限滚动
- flutter - Flutter:持久的底部导航在选项卡更改时重建子页面
- c# - ViewModel 中的 MVVM 附加属性(目标也是一个控件)不起作用
- javascript - 如何在新选项卡中将字符串作为 HTML 内容打开?
- html - 在页面上的任何 CSS Grid 项目周围绘制边框