我已經繼承了一個嵌入式項目,需要一些簡單的,按功能進行性能分析。它由運行uClinux(2.6.17.7-uc1)的Coldfire(MCF5328)組成。Coldfire高分辨率定時器(MCF5328)
我不是Coldfire或者uClinux(或者Linux)的專家,所以請原諒我的無知。
在Windows中,我只是簡單地使用QueryPerformanceCounter
來訪問x86高分辨率定時器。記錄前後的計數器並比較差異。
我已經學會了Linux的對QueryPerformanceCounter的多個變體:
- clock_gettime/RES
- getnstimeofday
- ktime_x
甚至通過訪問時間戳計數器
- get_cycles
在uClinux版本上這些設備都不可用。所以看起來操作系統沒有高分辨率的定時器訪問。
這是否意味着Coldfire本身不提供這樣的功能?或者uClinux端口的作者是否將它們拒之門外?硬件上是否有我可以使用的東西,以及如何使用它?
在'clock_gettime'的情況下,linux/time.h甚至沒有它。如果我創建一個聲明讓它生成(所討論的驅動模塊動態鏈接到內核),則設備崩潰,因爲該函數在內核中不存在。對於ktime_x函數,它們存在於分發的頭文件中,但是在內核中不存在。在get_cycles的情況下,頭文件將其定義爲返回零的內聯函數(即它未實現)。 – Tergiver
我在發行版文件中發現了確切的posix-timers.c文件,這意味着由於某些原因,該特定文件沒有內置。我猜測有1001個可能的原因可能不會被構建,其中一個是#define或config設置,該設置位於1001個事物的列表中。 – Tergiver
是的,它是一個內核驅動程序,我的直覺是硬件不支持它。我希望能夠快速解決問題,因爲我只需要改變單個模塊的工作方式,並且需要對這些更改進行分析,以便不會比以前消耗更多的週期。 do_gettimeofday沒有足夠的解析度。 – Tergiver