gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 08:34:06 25 4
gpt4 key购买 nike

如何在 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 mili sec)然后内核可能会提供软锁定。当信号必须提供软锁定时,这是一个硬编码值。此外,使用 udelay() 或 mdelay() 在等待期间不可中断,因此作为替代方案,您可能需要考虑使用内核计时器。

关于c - 如何在C中的系统调用上实现延迟时间(微秒级),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27007063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com