新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于ARM內(nèi)核目標(biāo)系統(tǒng)中的代碼運(yùn)行時(shí)間測試

基于ARM內(nèi)核目標(biāo)系統(tǒng)中的代碼運(yùn)行時(shí)間測試

作者: 時(shí)間:2012-11-22 來源:網(wǎng)絡(luò) 收藏
  在ARM系統(tǒng)中,有時(shí)需要精確的時(shí)間測量。通常,取時(shí)間的C函數(shù)(如gettime()等)不僅通用性差(必須包含頭文件DOS.H,且不支持Unix、Linux和標(biāo)準(zhǔn)C),明顯不適用于ARM系統(tǒng)[1];更成問題的是,其最短時(shí)間只能到10-2 秒級,不能提供更短的時(shí)間分度。根本原因在于: 這類函數(shù)是基于系統(tǒng)實(shí)時(shí)時(shí)鐘(RTC)的,而RTC通常采用標(biāo)準(zhǔn)化鐘表晶振,頻率只有32.768 kHz而已。

  然而很多應(yīng)用涉及μs級的時(shí)間計(jì)量,這是標(biāo)準(zhǔn)化了的RTC以及基于它的時(shí)間函數(shù)所無能為力的。筆者在移植DES算法到ARM系統(tǒng)的實(shí)驗(yàn)過程中,便遇到過要定量評估加密算法耗時(shí)多少的問題,發(fā)現(xiàn)的確不能用上述常規(guī)的C函數(shù)解決。經(jīng)對ARM芯片結(jié)構(gòu)的考察,發(fā)現(xiàn)其內(nèi)置的WatchDog系統(tǒng)是以系統(tǒng)時(shí)鐘驅(qū)動的,定量性能應(yīng)該很好,區(qū)分時(shí)間間隔的精細(xì)程度也應(yīng)該足夠。于是根據(jù)所用ARM芯片的原廠家數(shù)據(jù)手冊中的說明,借用 WatchDog編寫了自己的計(jì)時(shí)函數(shù),使用起來也比較方便??紤]到ARM芯片都帶有內(nèi)置看門狗,筆者覺得這種方法可算是一個(gè)不錯(cuò)的“過渡性”解決方案,故在此加以介紹,供同行們參考并指正。

  1、測量原理

  ARM芯片中的看門狗,其原始功能是監(jiān)視CPU核心運(yùn)行的某些超時(shí)。這些超時(shí)的發(fā)生,通常是因?yàn)楦蓴_和系統(tǒng)錯(cuò)誤等造成的程序運(yùn)行混亂。一旦發(fā)生這類情形,看門狗便請求中斷服務(wù)或發(fā)出復(fù)位脈沖重啟系統(tǒng)。為了達(dá)到這樣的目的,其計(jì)時(shí)原理必須獨(dú)立于系統(tǒng)中的任何進(jìn)程。實(shí)際上,WatchDog是獨(dú)立的硬件邏輯,其計(jì)時(shí)脈沖直接取自系統(tǒng)主時(shí)鐘,因此它與RTC一樣具備實(shí)時(shí)性和獨(dú)立性,借用看門狗的計(jì)時(shí)體系來實(shí)現(xiàn)高精度時(shí)間測量是合理的。

  先以實(shí)驗(yàn)中用到的S3C44B0X為例(該實(shí)驗(yàn)所用的ARM開發(fā)板型號為NETARM300),具體談?wù)効撮T狗的工作原理。

  系統(tǒng)主時(shí)鐘MCLK經(jīng)過可編程預(yù)分頻、可選固定分頻后,進(jìn)入WTCNT(硬件系統(tǒng)的計(jì)時(shí)計(jì)數(shù)器,16位)計(jì)數(shù)。根據(jù)器件手冊,計(jì)數(shù)時(shí)間間隔t_watchdog=1/(MCLK/(Prescaler value+1)/Division_factor )。式中,參數(shù)Prescaler value的取值為0~28-1;Division_factor有16、32、64、128四種取值。如果復(fù)位信號輸出允許(即WTCON的位0置1),那么一旦計(jì)數(shù)器WTCNT的計(jì)數(shù)超過WTDAT允許的范圍,看門狗就會將CPU復(fù)位。本實(shí)驗(yàn)過程中屏蔽掉了這種復(fù)位和中斷請求功能,僅讓它對脈沖計(jì)數(shù)。

  控制寄存器WTCON的有關(guān)各位定義圖中已給出(如需詳細(xì)解釋可查閱器件手冊,如參考文獻(xiàn)[3]),其他全為保留位,可全置為0。

  至于MCLK具體值的計(jì)算,可以查驗(yàn)系統(tǒng)中的晶振參數(shù)(頻率),讀取系統(tǒng)時(shí)鐘的PLL寄存器(如S3C44B0X的PLLCON)后算得。計(jì)算的方法都已在具體ARM芯片手冊中給出。

  2、測量算法實(shí)現(xiàn)和實(shí)驗(yàn)結(jié)果

  按照所需參數(shù)設(shè)置的看門狗定時(shí)器控制寄存器WTCON的值(如前所述),在待測代碼段執(zhí)行之前開啟看門狗定時(shí)器;等其執(zhí)行完畢則關(guān)閉看門狗定時(shí)器,讀取WTCNT的值即可算得運(yùn)行時(shí)間。作為一個(gè)具體示例,筆者實(shí)驗(yàn)中所實(shí)現(xiàn)的算法如下:

  (1) 計(jì)時(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);   //計(jì)時(shí)開始

  }


上一頁 1 2 下一頁

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉