一、概述
本文主要介紹如何通過相關配置,使 Semidrive E3 晶片中的 SF 和 SP0 core 分別運行一套 FreeRTOS 操作系統。
以 multicore-xip 示例作為基礎,參考 FreeRTOS-xip 示例的配置,將 FreeRTOS 移植至 SF 和 SP0 core 工程上,使 SF 和 SP0 core 分別運行一套 FreeRTOS 系統,更多 core 運行 FreeRTOS 也可參考相同方法實現。
硬體設備:E3640 GATEWAY 開發板
軟體包:SSDK PTG3.0
調試器:J-Link

圖 1.1 E3640 Gateway 開發板
二、SDK 下載
使用 SemiDrive support 系統上的 SSDK Builder,選擇型號 E3640 和示例 app_demo/multicore-xip 及 FreeRTOS-xip 生成參考代碼。
FreeRTOS-xip 示例主要介紹以 xip 方式運行 FreeRTOS,但只有 SF 核單獨運行。
multicore-xip 示例主要介紹所有的 core 程序都以 xip 方式運行在 flash 上,由 bootloader boot 其餘核的示例。
三、具體配置內容
1. sf 工程
1.1 在 sf 工程中的 main.c 內添加相關頭文件。

圖 3.1 sf 工程添加頭文件
1.2 在 main() 函數中添加中斷初始化,創建 task 並啟動任務調度,屏蔽不相關代碼。

圖 3.2 sf 工程 main() 函數修改內容
1.3 添加 TaskA_Entry() 函數。

圖 3.3 sf 工程添加 TaskA_Entry() 函數
1.4 修改 config.h 文件,添加 OS 相關宏定義。

圖 3.4 sf 工程中 config.h 添加 OS 相關宏定義
1.5 參考 FreeRTOS 示例,在 configs 文件夾下添加 FreeRTOSConfig.c 和 FreeRTOSConfig.h 文件。

圖 3.5 sf 工程添加 FreeRTOSConfig.c/h 文件

圖 3.6 sf 工程添加的 FreeRTOSConfig.c 文件內容
1.6 在 IAR 工程中添加 rtos Group 和 FreeRTOS 相關文件,其中 port.c 和 portASM.s 文件路徑為 rtos\FreeRTOS\Source\portable\IAR\ARM_CR5;heap_4.c 文件路徑為 rtos\FreeRTOS\Source\portable\MemMang;其餘文件的路徑為 rtos\FreeRTOS\Source。

圖 3.7 sf 工程添加 rtos Group 和 files
1.7 在 driver Group 中添加 btm 相關文件,文件路徑為 drivers\source\btm。

圖 3.8 sf 工程添加 btm 相關 files
1.8 在 Boards Group 中添加 FreeRTOSConfig.c,文件路徑在剛剛添加的 boards\e3_gateway\app_demo\multicore-xip\sf\configs 下。

圖 3.9 sf 工程添加 FreeRTOSConfig.c 文件
1.9 修改 IAR 配置,添加引用文件相對路徑。

圖 3.10 sf 工程添加引用文件的相對路徑
2. sp0 工程
2.1 在 sp0 工程中的 main.c 內添加相關頭文件。

圖 3.11 sp0 工程添加頭文件
2.2 在 main() 函數中添加 FreeRTOS 相關代碼,創建 task 並啟動任務調度。

圖 3.12 sp0 工程 main() 函數添加 FreeRTOS 相關代碼
2.3 添加 TaskB_Entry() 函數。

圖 3.13 sp0 工程添加 TaskB_Entry() 函數
2.4 修改 config.h 文件,添加 OS 相關宏定義。

圖 3.14 sp0 工程中 config.h 添加 OS 相關宏定義
2.5 與 sf 工程一樣,參考 FreeRTOS 示例,在 configs 文件夾下添加 FreeRTOSConfig.c 和 FreeRTOSConfig.h 文件,其中使用的 BTM 改為 BTM2,修改對應的 base 和 irq,並修改名稱 btm1 為 btm2。

圖 3.15 sp0 工程添加 FreeRTOSConfig.c/h 文件

圖 3.16 sp0 工程添加的 FreeRTOSConfig.c 文件內容
2.6 與 sf 的 IAR 工程修改內容一致,添加 rtos Group 和 FreeRTOS 相關文件,其中 port.c 和 portASM.s 文件路徑為 rtos\FreeRTOS\Source\portable\IAR\ARM_CR5;heap_4.c 文件路徑為 rtos\FreeRTOS\Source\portable\MemMang;其餘文件的路徑為 rtos\FreeRTOS\Source。

圖 3.17 sp0 工程添加 rtos Group 和 files
2.7 在 driver Group 中添加 btm 相關文件,文件路徑為 drivers\source\btm。

圖 3.18 sp0 工程添加 btm 相關 files
2.8 在 Boards Group 中添加 FreeRTOSConfig.c,文件路徑在剛剛添加的 boards\e3_gateway\app_demo\multicore-xip\sp0\configs 下。

圖 3.19 sp0 工程添加 FreeRTOSConfig.c 文件
2.9 修改 IAR 配置,添加應用文件相對路徑。

圖 3.20 sp0 工程添加引用文件的相對路徑
3. bootloader 工程
打開 bootLoader 示例,切換至 FlashDebug 模式,因為測試只涉及 SF 和 SP0 core,所以需要修改一下配置,去掉 SP1 、SX0 和 SX1 相關內容。
3.1 代碼中 main() 函數內,將 boot SP1 、SX0 和 SX1 相關代碼屏蔽。

圖 3.21 bootloader 中屏蔽 boot sp1、sx0 和 sx1 代碼
3.2 修改 IAR 配置,刪除 Linker - Extra Options 中 SP1、SX0 和 SX1 的 image input 腳本。

3.22 bootloader 工程 IAR 配置修改
四、代碼編譯和調試
首先使用 J-LINK 連接開發板,撥碼至 0b0000 模式啟動開發板。先分別編譯 sf 和 sp0 工程,然後編譯 bootLoader 工程(FlashDebug),bootloader 工程中 Extea Options 的腳本,會把 SFS + bootloader 程序 + sf/sp0 的 XIP 程序整體編譯為一個 elf 文件;
然後點擊 Erase memory 先擦除flash(推薦但非必須);
最後點擊 Download active application 按鈕,IAR flashloader 下載上述 elf 到 flash 中,以 0b0000 模式啟動開發板,UART 列印輸出,此時可以觀察到 sf 和 sp0 核的 task 均運行起來。

圖 4.1 串口 log 信息
五、參考文檔
- 《SemiDrive_E3_SSDK_User_Guide》
如有更多需求,歡迎聯繫大聯大世平集團 ATU 部門:atu.sh@wpi-group.com 作者:Nostalgia
更多資訊,請掃碼關注我們!

評論