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

标签 c++ c system-calls ctime

我使用的是带有最少库的 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/

相关文章:

c++ - 无法通过 get 方法编辑私有(private)变量(必须是可修改的左值)

c++ - 如何在 C++ 中正确地将 char 数组转换为字符串

c++ - 是否可以在 Linux 中以编程方式单击另一个应用程序的按钮?

linux - 在linux中,如何通过GNU ARM汇编进行系统调用

c++ - 使用 pipe() 和 fork() 读取文件并输出到控制台/新文件

c++ - Code::Blocks 的无效工具链错误

c - 静态变量的奇怪情况仅出现在 gcc 的调试版本中

c# - 不要等待arduino回复

c - C 的智能指针/安全内存管理?

c - 为什么此代码片段的输出有所不同?