<ctime>中的clock()函数如何访问系统时钟?</ctime>

时间:2013-02-22 17:41:43

标签: c++ c system-calls ctime

我正在使用附带最少库的STM32微控制器。我想使用clock()中的<ctime>函数(可能还有新的std::chrono),但我仍然坚持clock()返回-1。

这并不奇怪,因为我不希望gcc-arm-none-eabi中的库知道我的微控制器的外围布局。

如何告诉clock它的滴答计数来自哪里?我可以简单地重新声明它,还是需要实现一个较低级别的功能?

1 个答案:

答案 0 :(得分:1)

这通常是将libc实现移植到新平台的工作的一部分。当您编译glibc或newlib(C标准库的两个最流行的实现)的副本时,您必须提供一系列存根方法,其中一个将提供时间。 gcc-arm-none-eabi是newlib中预定义的目标,它实现了很多这些存根,但不是用于获取时间的目标,因为就像你说的那些是特定于应用程序的。

最好的办法是自己构建工具链,实现此方法。您可以按照here的说明进行操作,但在构建newlib之前编辑目标以填充此存根。可以使用here来实现存根的良好参考。

或者您可以直接实现自己的clock功能,当您链接应用程序时,它会优先选择您的版本而不是库中的版本。但是,请注意,这意味着库中调用clock的任何内容仍然会调用损坏的库版本,因此您可能需要重新实现许多函数。