痞子衡嵌入式:MCUXpresso IDE下線上聯合除錯i.MXRT1170雙核工程的三種方法

痞子衡發表於2024-07-29

  大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家分享的是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主頁知乎主頁微信公眾號 平臺上。

微信搜尋"痞子衡嵌入式"或者掃描下面二維碼,就可以在手機上第一時間看了哦。

相關文章