利用IAR Timeline工具測試delay函式執行時間
"要把大象放冰箱,總共分幾步",呵呵,寫到本篇部落格的時候突然想起小品宋丹丹說的那句經典臺詞了(俺們東北人兒對本山大叔的作品真是滾瓜爛熟了,搞的舍友還時不時跟我學上一學),哈哈,所以就索性給題目也加上了“幾步”的說法,把複雜的事情簡單化,也起到吸引人眼球的作用(當然本篇也是有實料的,進來的不會讓你失望的,呵呵)。咳咳,至於到底是幾步,是不是傳說中的“三步”來,哈哈,那還得下面分解。。。
對於我們程式猿這一類人來說,delay函式貌似是我們最熟悉不過的了。當然,隨著我們程式設計經驗的逐漸提高,像這種純軟體方式的延時函式是不提倡使用的,畢竟它一直霸佔著CPU匯流排,不過在我們初入門的時候delay函式還是隨處可見的,神馬各種學習板開發板的demo例程裡,模擬IIC,SPI等匯流排、時序驅動某些外設等等,delay函式成為了我們初入嵌入式軟體程式設計大門所見到的第一類延時函數了(起碼對我而言是這樣的,所以覺著特親切),但是想如果精確地知道delay的時間就是個麻煩事了。當然其中方法有很多,今兒我就說一招,不過限於用Jlink在IAR環境下的除錯,MCU仍然以Kinetis為例了。
Timeline,可能有些人會覺著有些陌生,其實它是IAR自帶的除錯元件之一,可以幫助開發者在除錯程式的時候跟蹤內部程式呼叫情況,這裡一句兩句也說不清楚,等下面上圖之後就會一目瞭然了,那還等什麼,上“硬菜”吧,也讓我們看看到底分幾步,呵呵:
第一步:在程式中編寫好delay函式,及在main函式裡的呼叫,如下:
/*************delay函式定義*************/ uint8 testPoint; //定義測試點,用來設定斷點 void delay(void) { uint8 i=0; while((i++)!=200); }/*************delay函式的呼叫*************/
... ...
while(1) { testPoint = 0; delay(); }第二步:設定除錯工具為J-Link/J-Trace,然後在J-Link/J-Trace選項卡選擇如下圖
第三步:點選除錯,進入除錯介面,分別點選view->Breakpoint,J-Link->Timeline,調出這兩個除錯視窗,然後右鍵testPoint,選擇如下圖:
第四步:準備工作已經就緒,下面就開始測試delay函式的延時時間了。點選全速執行,它第一次可能會停留在啟動程式碼的清零段(這個正常,因為testpoint被我設定成全域性變數,在啟動的時候會在清零段裡去初始化它),繼續多次點選全速執行(七八次即可),然後觀察Timeline的Call Stack行,效果如下:
第五步:我們通過Timeline視窗查到了delay函式的執行週期,在前面我們又設定了CPU的頻率(96MHz),所以可以算出來delay執行的時間T = 1190*1/96 us = 12.40us。呵呵,比裝大象費點事,總共分五步了,哈哈~
這裡只是當做一個小技巧分享給大家了,可能絕大多數人用不到了,不過這裡是給大家打開了一個思路,timeline的功能很多,更多好用好玩的功能就留給大家去開發了。其實現在隨著搞嵌入式的年頭增加,越來越意識到一個問題,那就是除錯手段在我們開發系統中的重要作用,真的在以前或者說還是個新手的時候覺著除錯是個麻煩而又沒有多大作用的過程,但是到現在發現如果利用好除錯工具的話絕對會讓我們的開發事半功倍的,況且現在的片子內部自帶的除錯模組功能越來越強大,外部的除錯工具功能也是越來越全面,這些都是附加值(通俗點說,那就是咱花錢買過來的),我們豈能浪費了,不用白不用,白用誰不用嘛,嘿嘿~
今兒到這兒了,燒壺水去,未完待續~