新聞中心

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

        ARM內核目標系統中的代碼運行時間測試

        作者: 時間:2008-01-21 來源:網絡 收藏
        摘要 很多測量的C函數在中都不能使用。某些能使用的,也是基于實時時鐘(RTC),故最短單位只能達到10-2s。作為一種通用的精密計時方法,為了取得更精細的度量,可以考慮啟用芯片內置的WatchDog實現擴展了的實時時鐘功能,并推廣到程序精確延時的用途,彌補現有C函數的不足。本文對此作出分析,并給出了具體的實驗描述。
        關鍵詞 精確時間測量精密計時 實時時鐘擴展 看門狗


        在ARM中.有時需要精確的時間測量。通常,取時間的C函數(如gettime()等)不僅通用性差(必須包含頭文件DOS.H,且不支持Unix、Linux和標準C),明顯不適用于ARM;更成問題的是,其最短時間只能到10-2秒級,不能提供更短的時間分度。根本原因在于:這類函數是基于系統實時時鐘(RTC)的,而RTC通常采用標準化鐘表晶振,頻率只有32.768 kHz而已。
        然而很多應用涉及μs級的時間計量,這是標準化了的RTC以及基于它的時間函數所無能為力的。筆者在移植DES算法到ARM系統的實驗過程中,便遇到過要定量評估加密算法耗時多少的問題,發現的確不能用上述常規的C函數解決。經對ARM芯片結構的考察,發現其內置的WatchDog系統是以系統時鐘驅動的,定量性能應該很好,區分時間間隔的精細程度也應該足夠。于是根據所用ARM芯片的原廠家數據手冊中的說明,借用WatchDog編寫了自己的計時函數,使用起來也比較方便。考慮到ARM芯片都帶有內置看門狗,筆者覺得這種方法可算是一個不錯的“過渡性”解決方案,故在此加以介紹,供同行們參考并指正。


        1 測量原理
        ARM芯片中的看門狗,其原始功能是監視CPU核心的某些超時。這些超時的發生,通常是因為干擾和系統錯誤等造成的程序混亂。一旦發生這類情形,看門狗便請求中斷服務或發出復位脈沖重啟系統。為了達到這樣的目的,其計時原理必須獨立于系統中的任何進程。實際上,WatchDog是獨立的硬件邏輯,其計時脈沖直接取自系統主時鐘,因此它與RTC一樣具備實時性和獨立性,借用看門狗的計時體系來實現高精度時間測量是合理的。
        先以實驗中用到的S3C4480X為例(該實驗所用的ARM開發板型號為NETARM300),具體談談看門狗的工作原理。其原理框圖如圖1所示,圖中MCLK即系統主時鐘。

        從圖中可以看出,系統主時鐘MCLK經過可編程預分頻、可選固定分頻后,進入WTCNT(硬件系統的計時計數器,16位)計數。根據器件手冊,計數時間間隔t_watchdog=l/(MCLK/(Prescaler value+1)/Division_factor)。式中,參數Prescakr value的取值為O~28-l;Division_factor有16、32、64、128四種取值。如果復位信號輸出允許(即WTCON的位0置1),那么一旦計數器WTCNT的計數超過WTDAT允許的范圍,看門狗就會將CPU復位。本實驗過程中屏蔽掉了這種復位和中斷請求功能,僅讓它對脈沖計數。
        控制寄存器WTCON的有關各位定義圖中已給出(如需詳細解釋可查閱器件手冊,如參考文獻[3]),其他全為保留位,可全置為O。
        至于MCLK具體值的計算,可以查驗系統中的晶振參數(頻率),讀取系統時鐘的PLL寄存器(如S3C44BOX的PLLCON)后算得。計算的方法都已在具體ARM芯片手冊中給出。

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


        (2)應用

        需要指出:在改變WTCON的值之前應將原有值保存,待測量完成后再復原WTCON。之所以強調這一點,是因為系統別處很可能在使用看門狗功能。
        實驗當中,對長度為189字節的字符串采用3次DES加密。密鑰長度為15位,測得的加密時間為28832μs,解密時間為28 896μs。縮短字符串長度,測得的加密時間基本呈線性變化:字符串長度為107字節而其他地方不變時,加密耗時16 928μs,解密耗時16 948μs;字符串長度為41字節而其他地方不變時,加密耗時7 424μs,解密耗時7 424μs。對于相同長度的字符串,密鑰長度的改變對加密/解密時間的影響不是很大。
        值得一提的是,剛開始實驗時,被加密字符串分別取為190字節和75字節,測得耗時分別是34 032μs和16 928μs,顯然與倍增的關系相差很遠。分析程序后發現,原來問題出在加密算法中間的打印語句“Uan_Printf(“\ncounting begin...!!!”)”上。原來以為它耗時很少,故沒有將它從加密算法中移走;移走后再試,耗時大減,分別為29 600 μs和12 496μs,與字符數倍增、時間倍增的預期基本相符。上面的實驗,還使筆者得知該打印語句占用了4432μs。稍微修改條件,繼續實驗:當上述打印語句的字節數擴充為原來的4倍時,測得該語句耗時17728μs。可見,耗時與打印內容的字節數基本上成正比;另外,這種打印語句與加密/解密算法本身相比,并不是想當然地只占用一點點時間。(上述數據與PC機串口通信波特率的設置無明顯關系。實際結果為:波特率由115 200bps下降到57 600 bps,沒有可以察覺到的差別。)

        3 測量方法討論
        ARM內置看門狗用作時間度量的適用范圍,大體以μs數量級為界。比如,從S3C44BOX的器件特性說明中可知,MCLK在看門狗計時器里的分頻比至少是1/16。典型情況下,MCLK=60MHz,則看門狗能夠分辨的最短時間單元t=l/(60 MHz/16)=0.27μs。統計誤差約為t/2,即O.1μs數量級。就μs級的時間測量精度而言,相對誤差有可能達到1%~10%;不過,這對很多速度估算的場合來說還是可以接受的。如果被測時間在10μs以上,那就沒有任何問題,可以認為是相當精確的了。
        這種思路還可用來實現精確延時,因為它的定時不依賴于指令執行時間(指令執行要受到系統調度等的影響,因而有很多不確定因素),而取決于對主時鐘的硬件分頻計數。
        由此實驗推廣,ARM內置看門狗可以作為此類系統中的第二時鐘存在。對于那些時間要求精確到μs、RTC的精度無法滿足的應用,這種處理都不失為一種準確、高效的方法。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 龙江县| 中宁县| 察哈| 天长市| 安泽县| 碌曲县| 瓦房店市| 建阳市| 南华县| 安吉县| 阳春市| 墨玉县| 斗六市| 奉贤区| 濮阳市| 连山| 锦屏县| 昭通市| 荣昌县| 安阳市| 鄂尔多斯市| 会东县| 南岸区| 富宁县| 竹山县| 塘沽区| 武山县| 三台县| 滁州市| 班戈县| 淮滨县| 岫岩| 涡阳县| 海南省| 凉山| 泽州县| 禹州市| 宜州市| 黄平县| 浪卡子县| 方山县|