<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于ARM內核目標系統(tǒng)中的代碼運行時間測試

          基于ARM內核目標系統(tǒng)中的代碼運行時間測試

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

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

            1、測量原理

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

            先以實驗中用到的S3C44B0X為例(該實驗所用的ARM開發(fā)板型號為NETARM300),具體談談看門狗的工作原理。

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

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

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

            2、測量算法實現和實驗結果

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

            (1) 計時算法

            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);   //計時開始

            }


          上一頁 1 2 下一頁

          評論


          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();