繁体   English   中英

如何在C中的系统调用上实现延迟时间(微秒级)

[英]How to implement delay time (microsec order) on system call in C

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

gpio_set_value(TRIG, 1 );
for(k=0;k<16;k++)
asm("nop");
gpio_set_value(TRIG, 0 );

但我认为asm(“ nop”)延迟不准确。 就准确性而言,将微秒级的延迟实施到系统调用中的最佳方法是什么? 另一个小问题:关于asm(“ nop”),知道我设备的ARM处理器的频率为180MHz,如何计算单个asm(“ nop”)的相应延迟时间? 谢谢!

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

udelay(unsigned long usecs) - microsec delay
mdelay(unsigned long msecs) - millisec delay

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

for (i = 0; i < 1000000; i++)
        ;

这取决于CPU速度。

注意:放置一个非常大的值(15000毫秒),那么内核可能会给出软锁定。 当信号必须进行软锁定时,这是一个硬编码值。 同样,在等待期间使用udelay() or mdelay()也是不可中断的,因此,或者,您可能要考虑使用内核计时器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM