我有一个程序可以生成要发送给接收器的数据包。我需要一种有效的方法,在每个数据包的发送之间引入一个小延迟,这样就不会使接收器超载。我尝试过usleep()和nanosleep(),但它们似乎太慢了。我已经实现了一个繁忙的等待循环,并取得了更多的成功,但我知道这不是最有效的方法。我对任何人尝试做我正在做的事情的经历都很感兴趣。其他人是否发现usleep()和nanosleep()对于这种类型的应用程序运行得很好?
谢谢,
丹尼·勒沃林
发布于 2010-05-27 22:04:19
睡眠函数在很小的时间间隔内的行为在很大程度上取决于内核版本和配置。
如果你有一个“无时钟”内核(CONFIG_NO_HZ)和高精度的定时器,那么你可以期望休眠非常接近你所要求的。
否则,您通常会在计时器中断的粒度上休眠。定时器中断间隔是可配置的(CONFIG_HZ) -通常选择10ms、4ms、3.3ms和1ms。
发布于 2010-05-27 21:24:44
这似乎是一个糟糕的设计。理想情况下,接收方将对接收到的任何额外数据进行排队,然后使用单独的线程进行消息处理。通过这种方式,它可以处理突发数据,而不需要依赖发送方来限制其请求。
但是,如果(例如)您无法控制接收方的代码,或者这是一个嵌入式应用程序,那么这种方法可能并不实用。
发布于 2010-05-27 23:36:18
假设其他评论者提到的更高级别的方法对您不可用,那么在嵌入式/微控制器领域中的一种常见方法是创建所需长度的NOP循环。
一个NOP操作需要一个CPU周期,在嵌入式环境中,您通常确切地知道您的处理器正在以什么时钟速度运行,因此您可以只使用简单的for循环连接_NOP(),或者如果只需要非常短的延迟,则不需要使用循环,只需添加所需数量的nops即可。
regTX = 0xFF; // Transmit FF on special register
// Wait three clock cycles
_NOP();
_NOP();
_NOP();
regTX = 0x00; // Transmit 00https://stackoverflow.com/questions/2921394
复制相似问题