ESP32開發環境,雜談
緣起
- 因為想學神經網路,做中學最快;我想紀錄曲柄的加速度和角速度,用神經網路判斷坐著或站著踩。這個應用顯然沒商業價值,感受一下神經網路的威力
- Arduino NANO BLE 33是很多EDGE AI都支援的開發版,資料標好丟Edge Impulse訓練神經網路,感受一下
- 不過BLE33插著USB記錄數據,可能線會被扯斷,這樣不行
- 我需要無線紀錄,ESP32C3我有10片,上頭有WIFI和SD卡,資料採集完存在裡面,再透過WIFI下載不是挺好的?來做吧;怎麼從NANO BLE 33拿到資料,後面再說吧
先前玩過的
ESP32C3我當一般MCU玩了一輪,結果無線傳輸我沒碰(笑)
- ESP32(10) CAN Logger功能驗收
- ESP32(9) Low Power-2
- ESP32(8) Low Power
- ESP32(7) 打通SD Card
- ESP32(6) CAN Transceiver 挑選心得
- ESP32(5) 打通CAN Bus
- ESP32(4) ESP32-C3搭配Arduino
- ESP32(3) Visual Studio Code + PlatformIO開發環境
- ESP32(2) ESP32-C開發板硬體簡介
- ESP32(1) 閒聊
這次要玩的
用酷酷的AI工具輔助,在ESP32 SDK點亮WIFI,跑起HTTP SERVER很簡單(SDK都有)
開發工具閒聊
好,這次我應該用哪套開發工具?選擇不少
- Arduino
- VSCODE + PlatformIO
- VSCODE + 樂鑫插件
- 樂鑫 Eclipse ENV
- Docker build environment
Arduino
我打定主意用SDK,先排除Arduino
VSCODE + PlatformIO
PlatformIO運作正常,用起來很爽;他的Debugger就是該有的樣子
PlatformIO多封裝一層介面,包住SDK,用起來怪怪的反而難除錯,因為得同時看兩層;另外樂鑫並沒有官方支持,我在這個層次有點疑慮
Anyway,因為上次用過,這次就決定不用了(我想試試看別的口味)
VSCODE + 樂鑫插件
PlatformIO用起來真的舒服,樂鑫插件還是差了點,不過邏輯也算容易理解
- C:\Espressif\SDK (SDK source code)
- C:\USER\[name]\.espressif\, TOOLCHAIN (compiler, debugger, ...)
在VSCODE常用的命令都列好了,摸一摸倒不難
- Start new project
- 開新的專案,會把.gitignore都設定好
- Run menuconfig
- 可以設定SDK功能開關
- Build,建構
- Flash,燒Flash
- Monitor,看Serial port
- Debugger,很爛的debugger,連memory view都不能用,感覺很不爽的我
- ESP-IF Terminal
- 可以手敲idf.py,基本上能做所有事
- 可以用idf.py openocd,再打idf.py gdb,有gdb想做什麼都可以
只要圍繞source code用VSCODE都算順,用起來還是像拼裝車
- Project管理
- 編輯source code
- 編譯,燒錄,看serial port
- 版本控制
關於JTAG
樂鑫JTAG叫ESPPROG,夜市小霸王尤教授送我一組,消耗4pins,ESP32C3也沒剩幾根腳了;J-Link搭配SEGGER OZONE debugger支援RISCV!我寫了E-Mail申請License,不過他還是得消耗4pins,不好用
ESP32C3讓USB D+/D-直連IC,用內建的JTAG和serial port最對味
ESP32C3的JTAG
ARM的SWD只有2pins,能非侵入式連上處理器,偷偷把記憶體讀出來,全程不干擾處理器,絲滑的體驗是行業頂尖標準。我每次摸到新處理器,都在尋找ARM的體驗。不過RISCV的JTAG我測了半天,也和AI工具反覆問,現在我的認知是
- RISCV核心,JTAG連上去,core一定會停,沒法做到非侵入式attach
- ESP32C3能把紀錄寫到某處,再透過JTAG不停機讀,做到類似SEGGER RTT效果
顯然ESP32C3的JTAG體驗沒那麼頂
我什麼時候需要JTAG?
思考本質的問題,我會需要什麼工具
- 板子剛點起來,從無到有,用JTAG除錯非常合理
- 軟體動起來,用printf()比起設斷點看expression舒服多了,看UART機會多一點
- 如果程式當掉(那就重新開機吧);專業的debug要分析死因。ESP32 SDK有gdb stub,他會在錯誤處理函數,啟動UART等gdb連上去,看記憶體,暫存器,做屍體分析。如果工程師就在現場,或是凹了FAE來,這樣還不錯
- 測試團隊人在海外,搞不好還有時差,叫工程師遠端連線不現實;或是樂鑫FAE跑去客人現場分析會累死。把屍體存下來(memdump),發回去分析也是必備功能
只有(1)非得用JTAG不可;(2)是TRACE設計,下次再寫一篇討論;然後(3) & (4)也沒JTAG出場的份。所以我放下找尋ARM絲滑體驗的執念
樂鑫 Eclipse ENV
樂鑫 Eclipse 是官方維護的IDE,我當除錯器用。VSCODE編譯完的ELF檔塞過來,用起來就是debugger該有的樣子!
- disasm
- memory view
- expression
- symbol
- breakpoint
把memory dump加上ELF塞給gdb重建當機現場,再用Eclipse就有GUI能分析。樂鑫會維護Eclipse到天荒地老,除非他們有更好的memory restore的方案
我沒刻意測試這一塊,AI工具說有我就相信了。這個基礎設施要有,才容易服務客人。所以投資時間在這裡不會虧
Docker build environment
過了五年,我當時做得垃圾般的專案還打得開嗎?我是不是得鎖定開發環境?還真的可以,VSCODE可以和Docker Image裡的工具互動。要在Windows/MAC跑Docker,會先有虛擬機跑Linux的開銷。我的MAC只有8G記憶體,跑VSCODE已經吃很凶了,別折磨他了
開發環境再多封裝一層,Debug難度會再拉高。樂鑫SDK已經把版本封裝得不錯,紀錄當下用的SDK版本,大概就差不多了,知道這條路存在,現階段這樣就好
結語
嵌入式開發的環境拼拼湊湊,而且不同時間點,感覺還不一樣。上次覺得PlatformIO香到不行,這次堅持用原汁原味SDK(笑)
Eclipse是嵌入式開發商的恩物,叫客人用command line是不行的。我這次深刻意識到memory dump分析很重要,以前都沒特別注意
所以這次我挑
- VSCODE + 樂鑫插件,平常開發,版本控制,簡單的JTAG debugger
- Eclipse GUI,比較難處理的問題,再來這裡查
留言