[英]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.