i.MX RT117x 與 RT10xx 系列相比,一個很明顯的區(qū)別就是多了一個 M4 的內(nèi)核,從而是多核協(xié)作成為可能。多核操作一般的做法是在各自獨立的程序數(shù)據(jù)空間運行,通過一塊共享的內(nèi)存空間進(jìn)行通訊,例如官方的 SDK 例程中,M7 的代碼運行在 Flash 里面,而 M4 的代碼則運行在 SRAM 里面,這樣可以確保performance 的最大化,不過在開發(fā)階段,客戶也許需要把 M7 和 M4 的代碼放在外部的 SDRAM 里面調(diào)試,這樣雖然會影響一部分 performance,但是不會對flash 進(jìn)行過多的擦寫操作,也有一定的現(xiàn)實意義。下面就對如何把一個 dual core 的 project 加載到 SDRAM 上調(diào)試進(jìn)行詳細(xì)的解說。下面的樣例來自與官方的 dual core rpmsg_lite_pingpong demo。
因為默認(rèn)系統(tǒng)是從 M7 core 啟動,所以通常的做法是通過 M7 實現(xiàn) M4 代碼的加載,然后 M7 啟動 M4。所以大部分的設(shè)置都是在 M7 project 里完成。具體
步驟如下:
1. M7 project 的設(shè)置
a) 添加 BOARD_SDRAM 和 SDRAM 兩個內(nèi)存空間定義,其中 BOARD_SDRAM 是給 M7放代碼數(shù)據(jù)用的,而 SDRAM 則是給 M4。這里需要注意的是BOARD_SDRAM 的位置要緊挨這 BOARD_FLASH。
b) 添加宏定義,使能 SDRAM 初始化代碼
c) 選中下列選項,把原本放入 BOARD_FLASH 的應(yīng)用代碼放入 BOARD_SDRAM。
d)在多核設(shè)置中,將 M4 的代碼位置設(shè)為前面定義的 SDRAM 空間。
e)在 debugger 配置里替換啟動腳本為帶 SDRAM 初始化的版本。
并添加下列這個調(diào)試選項:--cachelib libm7_cache.so
f) 最后在代碼里更新 M4 core 啟動地址為前面定義的 SDRAM 的起始地址:
2. M4 project 的改動則簡單的多。
a)添加 SDRAM 內(nèi)存空間定義,起始地址和大小與 M7 project 里的 SDRAM 空間定
義保持一致。
完成上述步驟后,你就可以在 SDRAM 里同時調(diào)試 M7 和 M4 的代碼啦!