2008年10月24日 星期五

[技巧] DEBUG

在這裡我要教大家一個單字

" DEBUG "

它照字面上的意義是除蟲
也就是把你整個系統中的問題給抓出來!!

我們在微控制器這一堂課要學的東西很多
但我個人認人,最重要該學會的覺對不是如何使用8051
或是如何看懂電路圖跟了解各種元件的電路特性
最重要的是要學會的就是


" 除錯 "

除了天才跟運氣好的人,沒有人可以第一次上手就第一次把每個實驗做好
裡頭一定會暗藏一些小蟲,你要學會如何把這些小錯誤給它抓出來,解決掉
這才是你真正該學會的!!

世面上的IC千百種,就算過了我們這一堂微控制器的課,你一百分PASS了,還是只會使用這顆IC功能的一半不到,更何況其他形形色色的各種IC,我們不可能教會你們所有IC的使用方法。你也不可能一輩子遇到問題就有助教可以問。所以在我們這堂課裡,希望大家都可以學會如何分析系統中的錯誤如何利用各種方法確認錯誤找到錯誤之後如何去解決。只要學會了這三件事(其實是一件事嘛),你以後就可以無往不利,無所不能,天下無敵!!!!



----------
那嘛,除錯要如何開始呢?
1、 你會發現系統出了錯誤,你的輸出或現象不是你所期望的

2、 當我們發現一個東西有錯時,不可能所有東西都是錯的,一定是其中某一小部分不對了
所以先把整個系統切成很多很多個小塊,分多小呢?
以你可以很方便的檢查它這一小塊是不是有問題為主。

3、 你要很努力很努力的攪盡腦汁,分析並猜測錯誤最有可能發生在哪一小塊裡?

4、 將你覺得最有可能有問題的那一小塊想一個辦法證明它是沒問題/有問題 的,

5、 若在步驟 4 之中確定那一小塊是沒問題的,則回到步驟 3 ,不然可以前進到步驟 6。

6、 確認這一小塊有問題之後,仔細分析,看是否能知道問題的關鍵在哪裡,是否可以把問
題給修正? 若可以修正則到 8 ,若不行則到7

7、 把它切成更細更細的小塊,然後從步驟 3 開始做,直到你可以很完整的確定問題在哪一
個元件、哪一行程式、哪一隻小蟲為止。

8、 想一個確定沒問題的方法把問題給修正。

結束
--------

舉個範例
最近常有學弟來問說在實驗四裡面,它的LED燈不聽話。我們來依照這個題進行分析吧
實驗四是簡單的8051 INPUT、OUTPUT練習,有一個8pin的指播開關作為輸入,讓8051取得指翻開關的輸入後,轉換成輸出以控制8pin 的LED燈。

發生的問題: LED燈一直亮,不會變暗

解決:
1、把整個系統切成兩半,一半是指播開關電路讀取系統,另一半是LED電路輸出系統
2、我猜測是LED系統出了問題,則我先不管指播開關系統
3、寫程式命令LED全亮,再寫程式命令LED全暗,看是否會正常執行,若否則跳到下一步,
若可以正常執行,則就是指播開關讀取系統的問題(自已想辦法找出問題吧!)。
4、我把LED系統分成8051程式輸出部分及LED電路部分
5、我對各個部份進行測試
*8051程式輸出部分:
(1) 確認8051排線上40個PIN的各個腳位用途(這邊不再細述如何確認)
(2) 確認8051有確實執行我的程式 (以PORT0 作為範例)
->先命令PORT0 全部輸出高電位,拿三用電表量取輸出的值,確定它都輸出了高電位
->再命令PORT0 全部輸出低電位,拿三用電表量取輸出的值,確定全部都是低電位

*LED電路部分:
(1) 到網路上查LED是什麼東東,要如何正確的使用
(2) 利用正確的使用法,一邊接電阻再接5V,另一邊接GND
(3) 確認燈是否會亮,如果會它就沒問題,不會亮它就有問題


如果在其中有發現任何問題的話,那就解決問題吧!
但如果你發現你LED各細部可以正常運作,但組起來就是不照程式跑,那就要自已想其他的可能性囉!

☆☆☆☆☆ 另外教你們一個五顆星的大絕招,如果你實在想不出辦法確認說某一個元件到底
是不是壞掉的,就找同學借一個一樣的,如果他可以正常工作的話,就代表他的
那樣物品是好的,如果你換過來因此而使系統正常的話,恭喜你,你找到小蟲了!!

--------

DEBUG是一種訓練邏輯思考的過程,有了良好的習慣不止在工程上面適用,對解決一般生活中的小問題也有很大的幫助,花點時間分析嘗試,絕不吃虧。

最後,如果實在DEBUG不出來的話,可以來問助教,但是我會希望你過來時,可以把你已經想過的所有辦法及結果全部告訴我,這樣我才能幫上忙,而且我最多也只是告訴你你所沒想到的DEBUG方法,不可能幫你實際找出錯誤。

自已學會怎麼DEBUG
才是王道呀!!

沒有留言: