迅為2K1000開發板
Ejtag調試器
在 9.6 小節中,我們在匯編節點實現了 led 閃爍的功能,如果您自己寫的程序沒有成功,我們該如何調 試呢?就可以利用 Ejtag 仿真器進行單步調試。
那我們要如何進行單步調試呢?我們是不是就得先知道每一個指令對應的地址呢?這樣我們才可以打斷點。我們先來修改一下在 9.6 小節中的代碼,我們加一個標簽。如下圖所示:
然后我們重新編譯 pmon 源碼生成 pmon 鏡像并燒寫到開發板,一定要將編譯的燒寫到開發板?。。〗又?pmon-loongson3/zloader.ls2k 使用命令/opt/gcc-4.9.3-64-gnu/bin/mips64el-linux-objdump -d start.o > 1.txt
將編譯得到的 start.o 文件進行反匯編并將結果輸出到 1.txt,添加 led3_ctrl 標簽的目的是為了反匯編以后更加容易找到 led3 控制相關的指令,如下圖所示:
使用命令 vim 1.txt 打開反匯編后的輸出文件,找到標簽 led3_ctrl 所在的位置,如下圖所示:
從上圖可以看出,控制 led3 相關的代碼是從地址 d60 開始的,而 MIPS 的入口地址是 0xbfc00000,所以我們是不是就可以把斷點打的地址為 0xbfc00d84 的地方呢,這個地方對應的指令為點燈操作。
接著我們啟動 Ejitag 工具并配置好 Ejtag 工具,在 Ejtag 命令行下輸入命令 hb 0xffffffffbfc00d84,注意,此
時開發板并未上電?。?!
接著我們給開發板上電,此時 hb 命令會執行成,這時立刻輸入 set 命令停止 cpu,如下圖所示:
然后我們輸入命令 hbls,查看斷點是否設置成功,設置成功如下圖所示:
接著輸入命令 cont,讓 cpu 執行到斷點出停止,如下圖所示:
然后使用命令 unhb 0xffffffffbfc00d84 刪除斷點,這里一定要刪除,不然 si 命令不能往下執行,如下圖所示:
接著輸入命令 si 1 執行 1 條執行,si 1 的意思就是單步執行 1 條指令,如下圖所示:
此時我們可以發現 led3 已經點亮,說明我們之前寫的匯編代碼是沒有問題的。如果大家沒有點亮,可以使用 set 命令來查看通用寄存器的值來排查錯誤。
接著我們將斷電打在關燈的指令位置,在反匯編 1.txt 文件中,我們可以發現關燈的指令是在 da0 位置, 如下圖所示:
所以我們輸入命令 hb 0xffffffffbfc00da0 將斷點打在這個位置下,如下圖所示:
然后執行 cont 命令運行 cpu,cpu 會執行到這個斷點位置,然后停止,如下圖所示:
cpu 已經停到這個位置了,我們就可以使用命令 unhb 來刪除斷點了,這里一定要刪除,不然 si 命令不能往下執行,如下圖所示:
接著輸入命令 si 1 條指令,如果我們寫的代碼沒有問題,可以發現 led3 熄滅,如下圖所示:
這樣我們就在匯編階段下調試完成了 led,同理,調試其他的 GPIO 大家也可以使用這種方法,這里就 不在贅述,大家可以自行探索一下。
-
龍芯
+關注
關注
3文章
340瀏覽量
31244 -
PMON
+關注
關注
0文章
7瀏覽量
8237 -
EJTAG
+關注
關注
0文章
2瀏覽量
8125 -
2K1000
+關注
關注
0文章
21瀏覽量
570
發布評論請先 登錄
相關推薦
評論