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