我正在使用带有最少库的 STM32 微控制器。我想使用clock()
来自<ctime>
(也可能是新的std::chrono
)的函数,但我被困在clock()
返回-1。
这并不奇怪,因为我不希望其中的库gcc-arm-none-eabi
知道我的微控制器的外围布局。
我如何知道clock
它从哪里获得滴答计数?我可以简单地重新声明它,还是需要实现一个较低级别的功能?
我正在使用带有最少库的 STM32 微控制器。我想使用clock()
来自<ctime>
(也可能是新的std::chrono
)的函数,但我被困在clock()
返回-1。
这并不奇怪,因为我不希望其中的库gcc-arm-none-eabi
知道我的微控制器的外围布局。
我如何知道clock
它从哪里获得滴答计数?我可以简单地重新声明它,还是需要实现一个较低级别的功能?
这通常是将 libc 实现移植到新平台的工作的一部分。当您编译 glibc 或 newlib(C 标准库的两个最流行的实现)的副本时,您必须提供一系列存根方法,其中一个将提供时间。gcc-arm-none-eabi
是在 newlib 中预定义的一个目标,它实现了很多这些存根,但不是那些用于获取时间的存根,因为就像你说的那样,这些是特定于应用程序的。
最好的办法是自己构建工具链,实现这个方法。您可以按照此处的说明进行操作,但在构建 newlib 之前编辑目标以填充此存根。此处提供了实现存根的良好参考。
或者,您可以直接实现自己的clock
功能,当您链接您的应用程序时,它会更喜欢您的版本而不是库中的版本。但是请注意,这意味着库中调用的任何内容clock
仍会调用损坏的库版本,因此您可能需要重新实现很多函数。