我使用的是带有最少库的 STM32 微 Controller 。我想使用 clock()
来自 <ctime>
的函数(可能还有新的 std::chrono
)但我被困在了 clock()
返回 -1。
这并不奇怪,因为我不希望 gcc-arm-none-eabi
中的库了解我的微 Controller 的外围布局。
我怎么知道clock
它从哪里得到它的滴答计数?我可以简单地重新声明它,还是需要实现一个较低级别的功能?
最佳答案
这通常是将 libc 实现移植到新平台的工作的一部分。当您编译 glibc 或 newlib(C 标准库的两个最流行的实现)的拷贝时,您必须提供一系列 stub 方法,其中之一就是提供时间。 gcc-arm-none-eabi
是 newlib 中预定义的目标,它实现了很多这些 stub ,但不是用于获取时间的 stub ,因为就像你说的那样,这些是特定于应用程序的。
最好的办法是自己构建工具链,实现这个方法。可以按照说明here ,但就在您构建 newlib 之前编辑目标以填充此 stub 。提供了一个关于实现 stub 的很好引用 here .
或者,您可以直接实现自己的clock
函数,当您链接您的应用程序时,它会优先使用您的版本而不是库中的版本。但是请注意,这意味着调用 clock
的库中的任何内容仍将调用损坏的库版本,因此您可能需要重新实现许多函数。
关于c++ - <ctime> 中的 clock() 函数如何访问系统时钟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15030123/