我正在制作微控制器程序员,目前,我一直在使用usleep()
尝试引入适当的延迟。
看来有时该程序有效,有时行不通。
我在编译代码时尝试了-O2
标志,但我开始怀疑这是否是错误的。
另外,除了usleep()
以外,我可以使用更准确的时序函数,而不涉及标准系统中未包含的任何库?我不想使用系统在后台缓存的函数(并拧紧时序(。哎呀,如果这意味着要调用系统中的特定地址等待时钟滴答,那么我宁愿这样做。
有什么建议?
可能,但这完全取决于您的硬件。
在某些机器上,您可以在某些给定的地址直接读取计时器值,但是对此没有一个通用的答案。准备使用volatile
属性在执行程序时会在更改这些计时器时读取这些计时器。
在更便携的一侧,一个系统调用(如果有的话(更可靠的是nanosleep
如果在您的系统上可用(如何在C中使用nanosleep((?tim.tv_sec`和`tim.tv_sec`和'tim.tv_nsec`?(。
它通过活动/校准循环工作,因此,当您调用它时,不涉及系统调用(至少对于小值,可能取决于实现(。
如果您没有它,那么,可以通过:
实现它- 校准循环(在启动时(
- 使用此校准值实现所需的延迟
最好将此睡眠实现包括在根本没有优化的部分中(-O0
(。您不会有纳秒的精度,但是对于毫秒,您应该可以。