文章總列表

ESP32開發環境,雜談

緣起

  1. 因為想學神經網路,做中學最快;我想紀錄曲柄的加速度和角速度,用神經網路判斷坐著或站著踩。這個應用顯然沒商業價值,感受一下神經網路的威力
  2. Arduino NANO BLE 33是很多EDGE AI都支援的開發版,資料標好丟Edge Impulse訓練神經網路,感受一下
  3. 不過BLE33插著USB記錄數據,可能線會被扯斷,這樣不行
  4. 我需要無線紀錄,ESP32C3我有10片,上頭有WIFI和SD卡,資料採集完存在裡面,再透過WIFI下載不是挺好的?來做吧;怎麼從NANO BLE 33拿到資料,後面再說吧


先前玩過的

ESP32C3我當一般MCU玩了一輪,結果無線傳輸我沒碰(笑)


這次要玩的

用酷酷的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?

思考本質的問題,我會需要什麼工具

  1. 板子剛點起來,從無到有,用JTAG除錯非常合理

  2. 軟體動起來,用printf()比起設斷點看expression舒服多了,看UART機會多一點

  3. 如果程式當掉(那就重新開機吧);專業的debug要分析死因。ESP32 SDK有gdb stub,他會在錯誤處理函數,啟動UART等gdb連上去,看記憶體,暫存器,做屍體分析。如果工程師就在現場,或是凹了FAE來,這樣還不錯

  4. 測試團隊人在海外,搞不好還有時差,叫工程師遠端連線不現實;或是樂鑫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,比較難處理的問題,再來這裡查


留言

這個網誌中的熱門文章

STM32 UART + DMA,使用HAL實作TX/RX,以及不定長度接收

小米掃地機器人S20+ review

玩CAN bus的傢伙們 (1) CandleLight-based USB-CAN