基于A(yíng)RM內核目標系統中的代碼運行時(shí)間測試
然而很多應用涉及μs級的時(shí)間計量,這是標準化了的RTC以及基于它的時(shí)間函數所無(wú)能為力的。筆者在移植DES算法到ARM系統的實(shí)驗過(guò)程中,便遇到過(guò)要定量評估加密算法耗時(shí)多少的問(wèn)題,發(fā)現的確不能用上述常規的C函數解決。經(jīng)對ARM芯片結構的考察,發(fā)現其內置的WatchDog系統是以系統時(shí)鐘驅動(dòng)的,定量性能應該很好,區分時(shí)間間隔的精細程度也應該足夠。于是根據所用ARM芯片的原廠(chǎng)家數據手冊中的說(shuō)明,借用 WatchDog編寫(xiě)了自己的計時(shí)函數,使用起來(lái)也比較方便??紤]到ARM芯片都帶有內置看門(mén)狗,筆者覺(jué)得這種方法可算是一個(gè)不錯的“過(guò)渡性”解決方案,故在此加以介紹,供同行們參考并指正。
1、測量原理
ARM芯片中的看門(mén)狗,其原始功能是監視CPU核心運行的某些超時(shí)。這些超時(shí)的發(fā)生,通常是因為干擾和系統錯誤等造成的程序運行混亂。一旦發(fā)生這類(lèi)情形,看門(mén)狗便請求中斷服務(wù)或發(fā)出復位脈沖重啟系統。為了達到這樣的目的,其計時(shí)原理必須獨立于系統中的任何進(jìn)程。實(shí)際上,WatchDog是獨立的硬件邏輯,其計時(shí)脈沖直接取自系統主時(shí)鐘,因此它與RTC一樣具備實(shí)時(shí)性和獨立性,借用看門(mén)狗的計時(shí)體系來(lái)實(shí)現高精度時(shí)間測量是合理的。
先以實(shí)驗中用到的S3C44B0X為例(該實(shí)驗所用的ARM開(kāi)發(fā)板型號為NETARM300),具體談?wù)効撮T(mén)狗的工作原理。
系統主時(shí)鐘MCLK經(jīng)過(guò)可編程預分頻、可選固定分頻后,進(jìn)入WTCNT(硬件系統的計時(shí)計數器,16位)計數。根據器件手冊,計數時(shí)間間隔t_watchdog=1/(MCLK/(Prescaler value+1)/Division_factor )。式中,參數Prescaler value的取值為0~28-1;Division_factor有16、32、64、128四種取值。如果復位信號輸出允許(即WTCON的位0置1),那么一旦計數器WTCNT的計數超過(guò)WTDAT允許的范圍,看門(mén)狗就會(huì )將CPU復位。本實(shí)驗過(guò)程中屏蔽掉了這種復位和中斷請求功能,僅讓它對脈沖計數。
控制寄存器WTCON的有關(guān)各位定義圖中已給出(如需詳細解釋可查閱器件手冊,如參考文獻[3]),其他全為保留位,可全置為0。
至于MCLK具體值的計算,可以查驗系統中的晶振參數(頻率),讀取系統時(shí)鐘的PLL寄存器(如S3C44B0X的PLLCON)后算得。計算的方法都已在具體ARM芯片手冊中給出。
2、測量算法實(shí)現和實(shí)驗結果
按照所需參數設置的看門(mén)狗定時(shí)器控制寄存器WTCON的值(如前所述),在待測代碼段執行之前開(kāi)啟看門(mén)狗定時(shí)器;等其執行完畢則關(guān)閉看門(mén)狗定時(shí)器,讀取WTCNT的值即可算得運行時(shí)間。作為一個(gè)具體示例,筆者實(shí)驗中所實(shí)現的算法如下:
(1) 計時(shí)算法
void my_CountStart() {
rWTCON=((MCLK/1000000-1)8)|(23); //1 MHz/64,Watchdog,nRESET,中斷禁止
rWTDAT=0xffff;
rWTCNT=0xffff;
rWTCON=((MCLK/1000000-1)8)|(23)|(15); //計時(shí)開(kāi)始
}
評論