Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 时钟()在<;中如何工作;ctime>;访问系统时钟?_C++_C_System Calls_Ctime - Fatal编程技术网

C++ 时钟()在<;中如何工作;ctime>;访问系统时钟?

C++ 时钟()在<;中如何工作;ctime>;访问系统时钟?,c++,c,system-calls,ctime,C++,C,System Calls,Ctime,我使用的是一个STM32微控制器,附带了最少的库。我想使用中的clock()函数(可能还有新的std::chrono),但我被困在clock()返回-1 这并不奇怪,因为我不希望gcc arm none eabi中的库知道我的微控制器的外围布局 我如何告诉时钟它的滴答计数是从哪里来的?我可以简单地重新声明它,还是需要实现较低级别的功能?这通常是将libc实现移植到新平台的工作的一部分。当您编译glibc或newlib(C标准库的两个最流行的实现)的副本时,您必须提供一系列存根方法,其中之一就是提

我使用的是一个STM32微控制器,附带了最少的库。我想使用
中的
clock()
函数(可能还有新的
std::chrono
),但我被困在
clock()
返回-1

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


我如何告诉
时钟
它的滴答计数是从哪里来的?我可以简单地重新声明它,还是需要实现较低级别的功能?

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

最好是自己构建工具链,实现这个方法。您可以按照说明进行操作,但就在构建newlib之前,请编辑目标以填充此存根。对于实现存根有一个很好的参考


或者,您可以直接实现自己的
时钟
功能,当您链接应用程序时,它会选择您的版本而不是库中的版本。但是,请注意,这意味着库中调用
时钟的任何东西仍将调用损坏的库版本,因此您可能需要重新实现许多函数。

@H2CO3:我不是问“如何获取系统时钟?”而是问“如果我可以获取系统时钟,如何将其与
time.h
头链接?”在这种情况下:您必须重新实现
clock()
函数。@H2CO3:所以它不像
putchar()
,您实际上必须实现
\u write
?您可以根据需要实现它。谢谢
times
是我一直在寻找的函数名。我假设
libnosys.a
库链接调用
\u times
?我认为
libnosys.a
实现
times
失败。你可能想要的是使用
libgloss
而不是使用
libnosys.a
,尽可能地填充存根。不,在没有任何工具链重新编译的情况下定义
\u次
。谢谢你的链接。