找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 12305|回復(fù): 0
收起左側(cè)

幾步學(xué)會(huì)利用IAR Timeline工具測(cè)試delay函數(shù)執(zhí)行時(shí)間

[復(fù)制鏈接]
ID:82781 發(fā)表于 2015-6-24 17:06 | 顯示全部樓層 |閱讀模式
    "要把大象放冰箱,總共分幾步",呵呵,寫到本篇博客的時(shí)候突然想起小品宋丹丹說的那句經(jīng)典臺(tái)詞了(俺們東北人兒對(duì)本山大叔的作品真是滾瓜爛熟了,搞的舍友還時(shí)不時(shí)跟我學(xué)上一學(xué)),哈哈,所以就索性給題目也加上了“幾步”的說法,把復(fù)雜的事情簡(jiǎn)單化,也起到吸引人眼球的作用(當(dāng)然本篇也是有實(shí)料的,進(jìn)來的不會(huì)讓你失望的,呵呵)?瓤龋劣诘降资菐撞,是不是傳說中的“三步”來,哈哈,那還得下面分解。。。
            對(duì)于我們程序猿這一類人來說,delay函數(shù)貌似是我們最熟悉不過的了。當(dāng)然,隨著我們編程經(jīng)驗(yàn)的逐漸提高,像這種純軟件方式的延時(shí)函數(shù)是不提倡使用的,畢竟它一直霸占著CPU總線,不過在我們初入門的時(shí)候delay函數(shù)還是隨處可見的,神馬各種學(xué)習(xí)板開發(fā)板的demo例程里,模擬IIC,SPI等總線、時(shí)序驅(qū)動(dòng)某些外設(shè)等等,delay函數(shù)成為了我們初入嵌入式軟件編程大門所見到的第一類延時(shí)函數(shù)了(起碼對(duì)我而言是這樣的,所以覺著特親切),但是想如果精確地知道delay的時(shí)間就是個(gè)麻煩事了。當(dāng)然其中方法有很多,今兒我就說一招,不過限于用Jlink在IAR環(huán)境下的調(diào)試,MCU仍然以Kinetis為例了。
            Timeline,可能有些人會(huì)覺著有些陌生,其實(shí)它是IAR自帶的調(diào)試組件之一,可以幫助開發(fā)者在調(diào)試程序的時(shí)候跟蹤內(nèi)部程序調(diào)用情況,這里一句兩句也說不清楚,等下面上圖之后就會(huì)一目了然了,那還等什么,上“硬菜”吧,也讓我們看看到底分幾步,呵呵:
        第一步:在程序中編寫好delay函數(shù),及在main函數(shù)里的調(diào)用,如下:
        /*************delay函數(shù)定義*************/
        uint8 testPoint;  //定義測(cè)試點(diǎn),用來設(shè)置斷點(diǎn)
        void delay(void)
        {
          uint8 i=0;

          while((i++)!=200);
        }
        /*************delay函數(shù)的調(diào)用*************/
        ... ...
          while(1)
          {   
              testPoint = 0;
              delay();
          }
        第二步:設(shè)置調(diào)試工具為J-Link/J-Trace,然后在J-Link/J-Trace選項(xiàng)卡選擇如下圖
       
       
        第三步:點(diǎn)擊調(diào)試,進(jìn)入調(diào)試界面,分別點(diǎn)擊view->Breakpoint,J-Link->Timeline,調(diào)出這兩個(gè)調(diào)試窗口,然后右鍵testPoint,選擇如下圖:
       
       
        第四步:準(zhǔn)備工作已經(jīng)就緒,下面就開始測(cè)試delay函數(shù)的延時(shí)時(shí)間了。點(diǎn)擊全速運(yùn)行,它第一次可能會(huì)停留在啟動(dòng)代碼的清零段(這個(gè)正常,因?yàn)閠estpoint被我設(shè)置成全局變量,在啟動(dòng)的時(shí)候會(huì)在清零段里去初始化它),繼續(xù)多次點(diǎn)擊全速運(yùn)行(七八次即可),然后觀察Timeline的Call Stack行,效果如下:
       
        第五步:我們通過Timeline窗口查到了delay函數(shù)的執(zhí)行周期,在前面我們又設(shè)定了CPU的頻率(96MHz),所以可以算出來delay執(zhí)行的時(shí)間T = 1190*1/96 us = 12.40us。呵呵,比裝大象費(fèi)點(diǎn)事,總共分五步了,哈哈~
        這里只是當(dāng)做一個(gè)小技巧分享給大家了,可能絕大多數(shù)人用不到了,不過這里是給大家打開了一個(gè)思路,timeline的功能很多,更多好用好玩的功能就留給大家去開發(fā)了。其實(shí)現(xiàn)在隨著搞嵌入式的年頭增加,越來越意識(shí)到一個(gè)問題,那就是調(diào)試手段在我們開發(fā)系統(tǒng)中的重要作用,真的在以前或者說還是個(gè)新手的時(shí)候覺著調(diào)試是個(gè)麻煩而又沒有多大作用的過程,但是到現(xiàn)在發(fā)現(xiàn)如果利用好調(diào)試工具的話絕對(duì)會(huì)讓我們的開發(fā)事半功倍的,況且現(xiàn)在的片子內(nèi)部自帶的調(diào)試模塊功能越來越強(qiáng)大,外部的調(diào)試工具功能也是越來越全面,這些都是附加值(通俗點(diǎn)說,那就是咱花錢買過來的),我們豈能浪費(fèi)了,不用白不用,白用誰不用嘛,嘿嘿~

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表