2009年10月28日 星期三

debugger

最近程式出現了bug,可是還真是奇怪,明明就是每支副程式都測試過,可是合在一起就是有問題


我以前一直沒有用ICD3 的debugger的功能,原來這個這麼好用!


設定如下,先選好debugger工具,因為我是ICD3,所以就選ICD3嚕



compiler完後,將程式燒進ICD3,對,不是燒進MCU,因為拔掉ICD3,MCU是沒有功能的。


設定好欲觀看的變數。



使用watch,觀看變數


執行


當程式執行到斷點時,即會停止,將變數資料show在watch視窗裡。


用ICD3 debugger的好處是因為,有些功能是只有硬體debugger才有辦法的,像如果我要線上除錯ADC是否正確,這個功能就很重要,因為我的程式出錯是因為和EEPROM有關系,所以就更需要這樣的功能來幫助除錯了!


那麼我的bug到底是什麼?


哈哈!


其實就是自己的觀念不正確嚕


誰知道這段程式結束後,var2的答案是什麼嗎?


如果答對了,就代表觀念正確,如果答錯了,就有可能和我一樣,觀念錯誤!


void test(void){


int var1;


int var2;


if (var1==0) var2=0;


else if (var1==1) var2=1;


else if (var1==2) var2=2;


else var2=55; 


}


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


答案是有可能var2 是0、1、2,也有可能是55,都有可能。


我一直以為在區域變數裡面宣告的變數,初值會是0。


結果,利用debugger工具來觀看變數時,初值竟然不是0。


悶了@@


後來請教老師和學長的結果是:區域變數的初值本來就是不可掌握的,所以最好的方式都是設一下初值會比較好。


而為什麼之前在測試程式的時後並沒有出錯,是因為我習慣把副程式丟在一個程式比較精簡的地方去做測試,等到正確後,才會把這支副程式整合在一起。可能是因為這樣的關系,才讓這個bug現在才出現。


不過陰錯陽差的學到1個debugger 工具和 觀念,這樣也是不錯。


3 則留言:

  1. 想請問大哥
    1.有什麼可以控制交流馬達轉速(像電風扇的馬達)(變蘋器以外)
    可變電阻可以嗎?還是要什麼電晶體或是.....不懂電子
    我想自製小型車床  我有想過用直流可是需要變壓器(貴貴的)
    麻煩大哥替我解答
     
     
    [版主回覆10/30/2009 09:50:04]和馬達串聯一顆電阻應該可以,可是這顆電阻的瓦數要很高喔電流*電流*電阻,算一下就知道要幾瓦的。

    回覆刪除
  2. 不曉得是不是這個東西
    http://tw.page.bid.yahoo.com/tw/auction/e36688845
    因為可變電阻有的好像可以用在馬達有的好像不行
    怎麼分辨
    [版主回覆10/31/2009 00:16:26]這個東西我沒用過,不是很清楚,這種產品應用我比較不熟悉,沒能幫上您的忙,抱歉。

    回覆刪除
  3. 是的,記憶體初始化這個動作很重要,之前遇到一個問題就是自己測試的MCU都沒問題,到工廠量產出來之後有1/3~1/4是動作不正常,但有時跑一陣子就正常了,但一旦關機重開又不正常了,結果就是有幾個變數沒做初始化。
    能抓出這個問題表示你的功力相當不錯,這種問題大多是到工廠才會發現,在學校或是不量產是不太會發現的,即使在開發的測試過程發現了頂多換個IC問題解決了就不理它了,等到量產問題出現了就怪工廠製程有問題,這種怪問題有時候程式重燒錄會好,有時就變成換IC才會好,然後就會出現一大堆IC退回代理商 退太多代理商就會出面來幫你處理了
     

    回覆刪除