首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用C语言实现系统调用的延迟时间(微秒量级)

如何用C语言实现系统调用的延迟时间(微秒量级)
EN

Stack Overflow用户
提问于 2014-11-19 08:51:43
回答 1查看 1.3K关注 0票数 0

如何在C中实现系统调用的延迟时间?我用的是stm32f429和hc-sr04传感器。我需要一个10微秒的触发脉冲。我尝试过:

代码语言:javascript
复制
gpio_set_value(TRIG, 1 );
for(k=0;k<16;k++)
asm("nop");
gpio_set_value(TRIG, 0 );

但我认为asm("nop")对于延迟是不准确的。在精度方面,在系统调用中实现微秒量级的延迟的最佳方法是什么?另一个小问题:关于asm("nop"),知道我的设备的ARM处理器的频率是180 the,我如何计算单个asm("nop")的相应延迟时间?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2014-11-19 11:57:08

对于较短的延迟,请使用内核函数:

代码语言:javascript
复制
udelay(unsigned long usecs) - microsec delay
mdelay(unsigned long msecs) - millisec delay

这些是以独立于arch的方式实现的定时循环,并且比下面的方法要好得多:

代码语言:javascript
复制
for (i = 0; i < 1000000; i++)
        ;

这与CPU速度有关。

注意:设置一个非常大的值(15000毫秒),那么内核可能会给出一个软锁定。当信号必须给出软锁定时,这是一个硬编码值。另外,在等待期间,使用udelay() or mdelay()是不可中断的,因此,作为另一种选择,您可能希望考虑使用内核计时器。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27007063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档