我的ESP32實做書籍:我出書了 ESP32 物聯網專題
博客來網址:https://www.books.com.tw/products/0010901195
實做說明
JTAG全名為Joint Test Action Group,是一種國際標準測試協議(相容IEEE 1149.1),用於驗證設計與測試生產出的印刷電路板功能,而本章所介紹的ESP-PROG支援JTAG可以對ESP32/ESP8266系列產品進行除錯,ESP-PROG外觀如下圖(a),本次我們將會使用的是右下角的JTAG區,其腳位定義則如下圖(b)。
1. 安裝ESP-PROG驅動程式
首先我們先將ESP-PROG用USB與電腦連接,並開啟電腦的裝置管理員(本機/右鍵/管理/裝置管理員),由於沒有安裝驅動程式,此時會裝置管理員應該會顯示有兩組其他裝置,一般是Dual RS232-HS及USB Serial Port,不過實際名稱可能會因為電腦版本不同而異。
接下來我們透過Zadig工具來安裝正確的驅動程式,先到Zadig的首頁https://zadig.akeo.ie/,並在下方的Download處點選Zadig 2.5下載後直接開啟。
Zadig開啟後,在上面的Option處點選「List All Devices」,將電腦中所有的USB裝置都顯示在下方的列表中。
接著在下方的裝置列表找到我們需要更新的驅動的裝置「Dual RS232-HS (Interface 0)」,請讀者注意這裡列表會有兩組USB裝置名稱都是「Dual RS232-HS」,請務必要挑選(Interface 0)這組。
確定挑選的是「Dual RS232-HS (Interface 0)」後,點選下方的Replace Driver按鈕,並稍後一陣子就會完成更新。
此時再開啟裝置管理員就可以看到安裝正確時的狀態(如下圖),一組為「Dual RS232-HS」,另外一組為「USB Serial Port (COM XX)」,就代表驅動程式安裝正確。
2. ESP-PROG與ESP32進行連線
下一步就是將ESP-PROG與ESP32進行連線,ESP-PROG的JTAG腳位分別為TMS、TCK、TDO、TDI,再加上GND一共五個腳位需要連接,其對應腳位請依照下表及下圖方式連接。
ESP-PROG | ESP32 | 備註 |
---|---|---|
GND | GND(麵包板左側6) | 接地 |
TDI | 12(麵包板左側7) | 輸入 |
TDO | 15(麵包板右側4) | 輸出 |
TCK | 13(麵包板左側5) | 時脈 |
TMS | 14(麵包板左側8) | 模式選擇 |
連接完畢後即可準備進入偵錯模式,我們先修改上一節HelloWorld程式,在第二行新增一個廣域變數i,另外在第十行loop內增加一個i++,這個i用來展示變數監看視窗的功能,另外在i++這行的行號前方點一下滑鼠,會產生一個紅點(如下圖),這個就是所謂的中斷點,當偵錯開始後,程式一旦執行到紅點的地方就會暫停,使用者可再搭配步進執行來觀察程式動向。
3. 進入偵錯模式
接下來我們使用功能表的執行/啟動偵錯,或直接按快捷鈕F5來啟動偵錯環境。
偵錯啟動後,右上角會出現「偵錯工具列」,其功能簡要說明如下
繼續(F5) | 直接執行到下一個中斷點 | |
不進入函式(F10) | 逐步執行,但不進入副程式 | |
逐步執行(F11) | 逐步執行,且會進入副程式 | |
跳離函式(Shift + F11) | 離開副程式回到主流程 | |
重新啟動(Ctrl + Shift + F5) | 關閉本次偵錯,再重啟一次偵錯 | |
停止(Shift + F5) | 停止偵錯,回到程式編輯功能 |
當程式完成上傳ESP32後,就會自動開始執行偵錯程序,讀者可點選下方的「偵錯主控台」視窗來觀察偵錯執行狀態,大約等候20-40秒的時間後,就會跳到第一次中斷,停在main.cpp的app_main()中,這是程式的進入點。
由於main.cpp不是我們要觀察的程式,此處直接按F5直接跳到下一個中斷點,就是我們設定的i++的位置,此時這一行會用黃色背景標示,提示使用者這是目前程式執行的位置。
接下來我們可以利用F10來步進執行,讓程式一步一步的往下執行。若需要監看變數數值,可以點選左側的執行按鈕 ,將滑鼠移動到「監看」窗格中,點選上方的+符號,輸入「i」,代表我們要監看變數i的數值,如此,我們就可以在每次中斷時,查看i的最新變化。
要停止偵錯功能時,點選偵錯工具列的 ,即可終止偵錯回到程式編輯狀態,讀者可輸入自己的程式碼,利用上述偵錯及監看功能,提昇自己的程式邏輯能力。
4. 常見的錯誤訊息
筆者第一次在使用ESP-PROG時,發現有幾個常見的錯誤訊息,導致無法啟動偵錯,主要有以下兩點須注意:
- Failed to launch GDB: .point:11 ….
- 此訊息代表無法找到除錯裝置,可能是ESP-PROG驅動程式未完成安裝,或者ESP-PROG與ESP32的JTAG線接錯,若確認驅動程式沒問題,請重新檢查線路是否接錯,或者重新拔插USB裝置,讓電腦重新偵測ESP-PROG及ESP32裝置,並記得查看platformio.ini中ESP32的Port號是否正確。
- 停在Info : telnet server disabled然後就完全沒反應
- 這可能是您電腦找不到ESP-PROG裝置,建議您重新拔插ESP-PROG裝置,讓電腦重新偵測。
經過本章的說明,了解原來Arduino架構也是可以做步進執行來除錯,這樣未來在寫大型程式時,就更能分析錯誤資訊,讓應用開發能更加得心應手嘍。