一、概述
本文主要介绍如何通过相关配置,使 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