最近程式出現了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 工具和 觀念,這樣也是不錯。
想請問大哥
回覆刪除1.有什麼可以控制交流馬達轉速(像電風扇的馬達)(變蘋器以外)
可變電阻可以嗎?還是要什麼電晶體或是.....不懂電子
我想自製小型車床 我有想過用直流可是需要變壓器(貴貴的)
麻煩大哥替我解答
[版主回覆10/30/2009 09:50:04]和馬達串聯一顆電阻應該可以,可是這顆電阻的瓦數要很高喔電流*電流*電阻,算一下就知道要幾瓦的。
不曉得是不是這個東西
回覆刪除http://tw.page.bid.yahoo.com/tw/auction/e36688845
因為可變電阻有的好像可以用在馬達有的好像不行
怎麼分辨
[版主回覆10/31/2009 00:16:26]這個東西我沒用過,不是很清楚,這種產品應用我比較不熟悉,沒能幫上您的忙,抱歉。
是的,記憶體初始化這個動作很重要,之前遇到一個問題就是自己測試的MCU都沒問題,到工廠量產出來之後有1/3~1/4是動作不正常,但有時跑一陣子就正常了,但一旦關機重開又不正常了,結果就是有幾個變數沒做初始化。
回覆刪除能抓出這個問題表示你的功力相當不錯,這種問題大多是到工廠才會發現,在學校或是不量產是不太會發現的,即使在開發的測試過程發現了頂多換個IC問題解決了就不理它了,等到量產問題出現了就怪工廠製程有問題,這種怪問題有時候程式重燒錄會好,有時就變成換IC才會好,然後就會出現一大堆IC退回代理商 退太多代理商就會出面來幫你處理了