論壇總覽 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 篇)
  • 需要登入已回覆此篇主題...