1

我正在制作一个微控制器编程器,现在,我一直在usleep()尝试引入适当的延迟。

似乎有时该程序有效,有时则无效。

我在编译代码时尝试了该-O2标志,但我开始怀疑这是否是一个错误。

usleep()另外,除了不涉及标准系统中不包含的任何库之外,我还可以使用更准确的计时功能吗?我不想使用系统在后台缓存的功能(并且搞砸了时间)。哎呀,如果这意味着调用系统中的特定地址来等待时钟滴答,那么我宁愿这样做。

有什么建议么?

4

1 回答 1

2

可能,但这完全取决于您的硬件。

在某些机器上,您可以直接读取某些给定地址的计时器值,但对此没有通用答案。准备使用volatile属性来读取这些计时器,因为它们在您的程序执行时发生变化。

在更便携的方面,一个更可靠的系统调用(如果可用)是nanosleep如果在您的系统上可用(如何在 C 中使用 nanosleep()?什么是 `tim.tv_sec` 和 `tim.tv_nsec`?)。

它通过活动/校准循环工作,因此当您调用它时,不涉及系统调用(至少对于小值,可能取决于实现)。

如果您没有它,那么您可以通过以下方式实现它:

  • 校准循环(在启动时)
  • 使用此校准值来实现所需的延迟

最好将此睡眠实现包含在根本没有优化的部分中(-O0)。你不会有纳秒的精度,但你应该没问题。

于 2018-02-15T08:00:13.377 回答