arm處理器分為cortex-a,cortex-r,cortex-m等3個內核系列,其中m系列一般是單片機,例如stm32等,工控用得挺多。a系列一般是消費娛樂產品等使用較多,例如手機處理器。r系列是高端實時類型處理器,價格高,不太了解。這里說說最多接觸的m和a系列。
說說硬件調試器:
一般有多種,st官方的st-link,SEGGER的J-Link、IAR的I-jet(本人使用過其多核調試功能),ulink,cmsis-dap等這幾個我們一般能用到的。簡單說一下:
st-link:僅支持自家m系列stm32單片機
jlink:支持m,a,r系列
ulink:這些請看這個博客:
常用的ARM調試器介紹(系統的學習調試器看這一篇就夠了)-CSDN博客
說一下常用的調試環境搭建:
m系列一般用st-link調試器就可以調試,a系列一般得用jlink調試。
m和a系列處理器一般支持jtag、swd兩種調試協議。jtag調試協議占用引腳端口多,swd占用僅2個而且燒錄速度更快,stm32一般都用swd協議,a系列用jtag協議較多,但是也可以嘗試一下swd協議,看看速度有變快不。
注意:對于swd協議,st-link最大支持4MHZ通信頻率(st-link調試器一般是v2版本,據說st-link硬件調試器升級軟件版本為v3能提高一倍速度?沒試過可以試試),但是jlink則可以達到幾十MHZ,下載速度確實快幾倍(本人手頭也有jlink v11的調試器實測過stm32f103zet6采用swd協議,確實比st-link快幾倍,但是采用jtag協議,好像連不上不知道為什么,沒深究了)。????????
關于這個通信速率(swd和jtag模式其實都是同樣共用設置的頻率),目前已知為:st-link最大4MHZ(keil使用的話里面最大可設該值),jink最大未知(看jlink.exe軟件安裝后里面的手冊 UM08001_Jlink.pdf介紹的章節?7.6.1 SWD speed 提到和目標處理器以及jlink版本什么的都有關系,也就是沒有個確定上界值(但是在keil里,或者JLinkGDBServer.exe雙擊運行界面里,最大可選50MHZ),一般來說4000KHZ,也就是4MHZ比較常見且穩定,設高了,能正常通信就可以(和線纜質量也有很大關系),否則就自己降低速率吧),但是我發現命令行啟動jlink時候,設置超過50MHZ竟然也沒有報錯,就不太懂了。而且jlink分別base版(近100塊,用得比較多,下載頻率設置到15MHZ,也很穩,也比stlink快幾倍)、pro版(稍微貴一些,頻率可以到幾十MHZ)、ultra版(近萬元一個,極致性能了)。
也就是說,無論是stm32還是a系列處理器,調試器盡量選用jlink(對stm32所有系列支持也非常友好的),雖然貴了點,但是下載速度更快,功能更強大,可配置內容也更多。關于其它品類的支持arm的調試器,我沒測試過,就不多說了,但是從那些調試器的性能介紹來看,jlink依然速率和穩定性應該是最好的。
關于stlink的使用:
可以使用一個開源的st-link.exe工具鏈,或者openocd(而且各種類型調試器它都能驅動)都可以。可以看我其它博客:
嵌入式IDE原理 OpenOCD介紹 以及stlink如何連接stm32板子-CSDN博客
?驅動單片機硬件調試器的一些開源庫總結(包含stlink調試器)_stlink 開源-CSDN博客
?OpenOCD如何通過stlink直接下載程序到stm32板子(已解決)_openocd stlink-CSDN博客
windows用gcc編譯stm32程序命令行控制stlink下載到板子_stlinkgdb.exe-CSDN博客
關于jlink的使用:
使用openocd也可以,但是這里主要說使用jlink調試器官方自己的jlink.exe工具鏈,因為適配性更好。只需要下載官方的jlink軟件工具安裝即可。里面有各種jlink開頭的.exe工具鏈,但是用戶接口一般都是jlink.exe這個軟件,如果是gdb連接jlink調試器,那么需要啟動JLinkGDBServerCL.exe,然后gdb.exe發起連接它即可,這里進行常用的介紹如下:
首先,最全的介紹,就在jlink.exe軟件安裝后里面的手冊 UM08001_Jlink.pdf介紹,所有功能大綱以及相關命令出處,里面都介紹得清清楚楚。關于jlink.exe的命令,里面僅進行了簡單介紹,是給了在線網頁命令大全:J-Link Commander - SEGGER Knowledge Base。而關于jlinkgdbserver.exe命令倒是進行了詳細介紹,以及gdb能執行的透傳monitor命令列表。
jlink.exe的操作命令,從上面的網頁可以看出,分為啟動jlink.exe時候(也稱為配置命令)的命令行參數,以及進入jlink.exe軟件后(也成為Debugging命令)的命令行參數兩種,例如halt命令,就只能是進入了jlink.exe后,才能使用的。所以多看看這些資料,就知道如何用了。
例如下載程序,由于loadfile命令得進入jlink.exe才能使用,此時一行命令行就沒法實現了,jlink.exe剛好支持命令腳本,啟動jlink.exe時候-CommandFile即可指定命令腳本,具體參見文檔以及網頁說明。此外,如果用戶有自定義的目標版設置命令,jlink.exe還支持init腳本,請參見相關內容。
最后再說一點,jlink的命令很多,但是我們一般需要用的其實就幾個,其它的都是保持默認就可以了。還有就是文檔風格等原因吧,如果深究,其實會發現有些寫得邏輯不太容易理解,總之已經能解決我們的問題,以及知道設置參數一些極限,就可以了,不用太轉牛角尖了,不然越思考越覺得文檔寫得有些解釋不通的地方,例如退出命令,里面寫的是exit,但是用quit也能退出(會發現jlink所有介紹命令都沒有出現過quit)!!!這個可能就是文檔寫得沒有完全準確的原因,如果我們一直深究,轉牛角尖去看,就只會徒勞費時間精力了,做嵌入式開發其實其它任務也有類似現象,也無需轉牛角尖的。
最后給出stm32的程序下載命令:
-device STM32F103ZET6 -if SWD -speed 50000 -autoconnect 1 -CommandFile download.jlink
?download.jlink內容如下:
?
connect
halt
WaitHalt 100
loadfile "build/Project4_hal_small_debug.bin" 0x08000000
RX 100
exit