大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家分享的是MCUXpresso IDE下線上聯合除錯i.MXRT1170雙核工程的三種方法。
兩年前痞子衡寫過一篇《i.MXRT1170下線上聯合除錯雙核工程的三種方法(IAR篇)》,那篇文章詳細介紹了 IAR 下除錯 RT1170 雙核工程的幾種方法。現如今,免費的 MCUXpresso IDE 使用者越來越多,而且說實話,MCUXpresso IDE 也確實功能越來越完善,日常嵌入式開發的幾乎所有需求都能夠滿足。今天痞子衡就繼續給大家介紹 MCUXpresso IDE 下雙核工程聯調的三種方法:
一、測試準備
按 《i.MXRT1170下線上聯合除錯雙核工程的三種方法(IAR篇)》 一文裡第一節的測試準備,痞子衡這次的環境如下:
- 整合開發環境: MCUXpresso IDE v11.10.x,點此下載
- 軟體開發包: SDK_2_16_000_MIMXRT1170-EVKB(Toolchain要包含MCUXpresso IDE),點此下載
- 軟體驅動: J-Link driver v7.96k,點此下載
- 硬體工具: J-Link Plus偵錯程式
- 硬體開發板: MIMXRT1170-EVKB (Rev.A),含板載 DAP-Link 偵錯程式
目前 MIMXRT1170-EVKB 共有 Rev.A/B/Cx 三版,其中 Rev.A 版本出廠使用的預設 QSPI Flash 型號和 Rev.B/Cx 有區別,SDK 2.14 及之前的 XIP 啟動頭對這些 QSPI Flash 基本通用的,但是 SDK 2.15 之後 XIP 頭裡調整了最高速度下的 dummy cycle 設定,這導致 XIP 頭不再通用,需要注意!
二、在MCUXpresso IDE下除錯
2.1 通用辦法:雙核工程無關聯,偵錯程式分別載入
第一種方法依舊是單純藉助外部偵錯程式來做載入,主核工程和從核工程之間無任何依賴關係(一般情況下主核是 XIP 工程,從核是 Non-XIP 工程)。我們選擇 SDK 包裡如下兩個 hello_world 普通工程來做測試(SDK 包裡並沒有現成的 MCUXpresso IDE 工程檔案,需要自己匯出,詳情參考 《MCUXpresso IDE下SDK工程匯入與workspace管理機制》 一文):
主核例程匯出源路徑:\SDK_2_16_000_MIMXRT1170-EVKB\boards\evkbmimxrt1170\demo_apps\hello_world\cm7
從核例程匯出源路徑:\SDK_2_16_000_MIMXRT1170-EVKB\boards\evkbmimxrt1170\demo_apps\hello_world\cm4
上次測試 IAR 工具鏈時,SDK 版本還是 2.11,如今已經演化到了 2.16,現在配套指令碼設計得更完善了,主核工程和從核工程下載先後順序無限制。痞子衡使用了板載 DAP-Link 偵錯程式分別除錯雙核工程,過程非常絲滑。這主要得益於如下兩個 .scp 指令碼檔案(完成主從核連線與啟用工作):
有小夥伴可能會疑惑,這兩個 .scp 檔案到底是放在哪裡的?因為在 MCUXpresso IDE 安裝目錄下以及匯出的 hello world 工程目錄下都找不到它們的身影,其實它們就藏在安裝 MCUXpresso IDE 時自動同步安裝的 LinkServer 驅動裡面(\LinkServer_1.6.114\binaries\Scripts),這些指令碼是共用的,如果你想修改為專用指令碼,可以複製到工程目錄下,然後啟用下圖裡的 Custom Path。
如果是使用外掛 J-Link 偵錯程式做除錯,過程同樣絲滑。這也是得益於如下 .jlinkscript 指令碼檔案(完成主從核連線與啟用工作):
2.2 專用方法:雙核工程有關聯,IDE多核元件連結,主核載入從核
第二種方法需要藉助主核程式碼來給從核做載入,此時主核工程和從核工程之間有互相連結關係(依舊為主核 XIP 工程,從核 Non-XIP 工程),這裡需要藉助 MCUXpresso IDE 軟體裡自帶的多核元件。我們首先從 SDK 裡匯出 hello world 多核例程:
主核例程匯出源路徑:\SDK_2_16_000_MIMXRT1170-EVKB\boards\evkmimxrt1170\multicore_examples\hello_world\cm7
從核例程匯出源路徑:\SDK_2_16_000_MIMXRT1170-EVKB\boards\evkmimxrt1170\multicore_examples\hello_world\cm4
可以分別開啟主核和從核例程的工程選項,找到 Multicore 設定,可以看到從核配置為 M4SLAVE,主核勾選了 M4SLAVE 工程對應的 axf 檔案路徑,此為兩個工程的連結關係:
至於從核程式碼載入過程,可以開啟主核工程的連結檔案,相比一般獨立工程連結檔案,其多了對從核工程編譯出來的二進位制資料(包含text和data)的連結處理,複製動作是在主核工程 startup_mimxrt1176_cm7.c 檔案 ResetISR() 函式中的 data bss 段初始化過程中一起完成的,啟用從核動作則是 main 函式里 MCMGR_StartCore() 函式實現的。
2.3 通用方法:雙核工程無關聯,主核啟用從核
目前 v2.16 SDK 包裡相比之前增加了如下兩個 hello_world_secondary_core_boot 多核例程,以往的多核例程,從核均是 Non-XIP 工程,而這個新增例程裡從核工程也是 XIP 例程:
主核例程匯出源路徑:\SDK_2_16_000_MIMXRT1170-EVKB\boards\evkmimxrt1170\demo_apps\hello_world_secondary_core_boot\cm7
從核例程匯出源路徑:\SDK_2_16_000_MIMXRT1170-EVKB\boards\evkmimxrt1170\demo_apps\hello_world_secondary_core_boot\cm4
因為主從核工程均是 XIP 工程,在除錯時需要先將從核工程下載進 Flash,然後再下載主核工程進 Flash 並且沿用主核工程裡的 XIP 頭做啟動配置。因為程式碼載入是偵錯程式完成的,所以兩個工程間並無直接關聯,不過因為最終還是需要主核執行程式碼去完成從核啟用工作,因此從核程式存放地址(CORE1_BOOT_ADDRESS)是需要 hardcode 在主核程式碼裡的。
至此,MCUXpresso IDE下線上聯合除錯i.MXRT1170雙核工程的三種方法痞子衡便介紹完畢了,掌聲在哪裡~~~
歡迎訂閱
文章會同時釋出到我的 部落格園主頁、CSDN主頁、知乎主頁、微信公眾號 平臺上。
微信搜尋"痞子衡嵌入式"或者掃描下面二維碼,就可以在手機上第一時間看了哦。