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