cropped-forum.png

論壇總覽 GD32 RISC-V 論壇 開始使用GD32 RISC-V Nano/Pico [教學] 手把手教你GDB在嵌入式系統中的除錯方法

標籤: , , ,

正在檢視 1 篇文章 - 1 至 1 (共計 1 篇)
  • 作者
    文章
  • #637
    johnson
    管理員
      @johnson

      前言

      這篇文章針對要使用RV-Link為GBD除錯的使用者撰寫

      與網路上其他GDB使用介紹不同的是,許多GDB使用說明都是針對本機端程式在除錯

      也就是說我在我的PC上執行一個C或Python程式,並且為這隻程式除錯。

      但我們現在要為GD32 RISC-V Nano/Pico除錯,程式是執行在另一塊目標板上而不是PC本機。

      在嵌入式系統除錯中,有兩樣軟體需要認識,分別是GDB以及OpenOCB。

      GDB與OpenOCD的關係可以從下圖了解,OpenOCD負責提供PC端與除錯器端的連接性,而GDB則是藉由OpenOCD提供的界面來實做除錯軟體的功能,如中斷,記憶體存取等等。

      除錯器與GDB的介紹可以參考深入淺出GD32 RISC-V Nano/Pico – (七) RV-Link 仿真器製作與使用 這篇文章。

      當我們依照這篇文章建製好工具練後,GDB與OpenOCd都已經被安裝好,我們只需要下指令就可以使用。

      硬體連接

      PA15 -> PA15
      PA14 ->PA14
      PA13 ->PA13
      PB3   ->PB3

      別忘了電源

      3V3     -> 3V3
      GND   -> GND

       

      軟體執行

      先把要除錯的軟體上傳到目標板上

      移動到專案資料夾的src目錄底下,將目標板進入dfu模式後,執行

      make dfu

      接下來會進行標準工具鍊建製,直到dfu-util出現,會要求輸入使用者密碼。

      最後會有上傳進度條,達到100%表示上傳成功。

      雖然有Error 74,但這不影響我們的程式執行。

      上傳好後,把目前工作目錄移動make指令的輸出目錄build下。

      GDB是需要在專案輸出目錄下運行才能正確執行的。

      我們拿mpb-toolchain-example工具鍊範例作為示範,如果你想為其他的程式除錯,也可以如法炮製這些步驟。

      cd build

      接下來叫出riscv32-mapleboard-elf-gdb 程式,並且將剛剛製作的elf檔案匯到gdb中

      riscv-32-mapleboard-elf-gdb gd32vf103.elf

      發現終端機前面多一個 (gdb) 就是現在正在執行gdb應用程式,而現在輸入的指令是給gdb而不是給linux的終端機。

      接下來,把TypeC連接線接到RV-Link上,並打開令一個終端視窗檢查RV-Link是掛載在那一個device上

      ls /dev/tty*

      把RV-link拔掉 看那一個不見就知道他是那一個(好像繞口令XD

      一般預設的是ttyACM0

      接下來回到GDB終端機,輸入

      target remote /dev/ttyACM0

      接著將剛剛建制好的gd32vf103.elf檔載入RV-link中

      load gd32vf103.elf

      到這一步為止就成功建立目標板與RV-link除錯器的連線。

      常用GDB指令介紹

      1. list 或 l :列出10行程式,在視窗前面之數字是程式行數,可用於設置中斷。

      list main 列出main為首的10行程式碼,繼續按Enter可繼續顯示。

      l 10 從目前執行的程式碼第10行開始顯示前後10行程式碼

       

      2. break 或 b :設置中斷點

      break main 在main設置中斷點

      b 50 在第50行設置中斷點 [ gd_eval_led_init(LED3) ]

      3. info break : 顯示各個中斷點的詳細資訊

      info b

      4. watch : 查看變數

      watch x 查看x變數,會顯示就的數值與新的數值,同時在建立watch時也會同時建立中斷。

      5. continue 或 c : 繼續執行程式

      6. next 或 n : 單步執行程式

      7. print 或 p : 列出變數值,與watch不同的是print不會在變數改變處設定中斷。

      8. reverse continue 或 rc : 反向單步執行 ***嵌入式GDB不支援

      題外,許多GDB可以使用layout指令圖形話的觀看執行狀況,但現在riscv工具練似乎還不支援,因此使用上較不方便。

       

       

       

    正在檢視 1 篇文章 - 1 至 1 (共計 1 篇)
    • 需要以回覆此篇主題...