4

我正在使用带有最少库的 STM32 微控制器。我想使用clock()来自<ctime>(也可能是新的std::chrono)的函数,但我被困在clock()返回-1。

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

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

4

1 回答 1

1

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

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

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

于 2013-02-22T18:01:32.450 回答