我正在使用STM32微控制器,並附加了最少的庫。我想使用<ctime>
(可能還有新的std::chrono
)的clock()
函數,但我堅持返回-1的clock()
。<ctime>中的clock()函數如何訪問系統時鐘?
這並不奇怪,因爲我不希望gcc-arm-none-eabi
中的庫知道我的微控制器的外圍佈局。
我該如何告訴clock
它從哪裏得到滴答計數?我是否可以簡單地重新聲明它,或者是否需要實現一個較低級別的函數?
我正在使用STM32微控制器,並附加了最少的庫。我想使用<ctime>
(可能還有新的std::chrono
)的clock()
函數,但我堅持返回-1的clock()
。<ctime>中的clock()函數如何訪問系統時鐘?
這並不奇怪,因爲我不希望gcc-arm-none-eabi
中的庫知道我的微控制器的外圍佈局。
我該如何告訴clock
它從哪裏得到滴答計數?我是否可以簡單地重新聲明它,或者是否需要實現一個較低級別的函數?
這通常是將libc實現移植到新平臺的一部分工作。當您編譯glibc或newlib(C標準庫的兩個最流行的實現)副本時,您必須提供一系列存根方法,其中一個方法將提供時間。 gcc-arm-none-eabi
是newlib中預定義的目標,它實現了很多這些存根,但不是用於獲取時間的存根,因爲就像您說的這些是特定於應用程序的。
要做的最好的事情就是自己構建工具鏈,實現這個方法。您可以按照here的說明操作,但在構建newlib之前編輯目標以填充此存根。有關實施存根的很好參考可用here。
另外,您可以直接實現自己的clock
功能,當你鏈接您的應用程序會更喜歡你的版本,在一個庫中。不過要注意的是,這意味着庫中任何調用clock
的東西仍會調用破壞的庫版本,因此您可能需要重新實現很多功能。
[您可能會發現這是很有幫助的。(https://github.com/libopencm3/libopencm3/blob/master/lib/stm32/timer.c) – 2013-02-22 17:53:37
@ H2CO3:我沒有那麼多要價_「如何我是否得到系統時鐘?「_因爲我是_」鑑於我可以獲得系統時鐘,我如何將它與'time.h'頭連接起來?「_ – Eric 2013-02-22 17:57:24
在這種情況下:您必須重新實現clock()函數。 – 2013-02-22 17:59:27