SemiDrive E3 多核心运行 FreeRTOS 配置介绍

一、概述

本文主要介绍如何通过相关配置,使 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 开发板

图 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 工程添加头文件

图 3.1 sf 工程添加头文件

1.2 在 main() 函数中添加中断初始化,创建 task 并启动任务调度,屏蔽不相关代码。

图 3.2 sf 工程 main() 函数修改内容

图 3.2 sf 工程 main() 函数修改内容

1.3 添加 TaskA_Entry() 函数。

图 3.3 sf 工程添加 TaskA_Entry() 函数

图 3.3 sf 工程添加 TaskA_Entry() 函数

1.4 修改 config.h 文件,添加 OS 相关宏定义。

图 3.4 sf 工程中 config.h 添加 OS 相关宏定义

图 3.4 sf 工程中 config.h 添加 OS 相关宏定义

1.5 参考 FreeRTOS 示例,在 configs 文件夹下添加 FreeRTOSConfig.c 和 FreeRTOSConfig.h 文件。

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

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

图 3.6 sf 工程添加的 FreeRTOSConfig.c 文件内容

图 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

图 3.7 sf 工程添加 rtos Group 和 files

1.7 在 driver Group 中添加 btm 相关文件,文件路径为 drivers\source\btm。

图 3.8 sf 工程添加 btm 相关 files

图 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 文件

图 3.9 sf 工程添加 FreeRTOSConfig.c 文件

1.9 修改 IAR 配置,添加引用文件相对路径。

图 3.10 sf 工程添加引用文件的相对路径

图 3.10 sf 工程添加引用文件的相对路径

2. sp0 工程

2.1 在 sp0 工程中的 main.c 内添加相关头文件。

图 3.11 sp0 工程添加头文件

图 3.11 sp0 工程添加头文件

2.2 在 main() 函数中添加 FreeRTOS 相关代码,创建 task 并启动任务调度。


图 3.12 sp0 工程 main() 函数添加 FreeRTOS 相关代码

2.3 添加 TaskB_Entry() 函数。

图 3.13 sp0 工程添加 TaskB_Entry() 函数   

图 3.13 sp0 工程添加 TaskB_Entry() 函数

2.4 修改 config.h 文件,添加 OS 相关宏定义。

图 3.14 sp0 工程中 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.15 sp0 工程添加 FreeRTOSConfig.c/h 文件

图 3.16 sp0 工程添加的 FreeRTOSConfig.c 文件内容

图 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

图 3.17 sp0 工程添加 rtos Group 和 files

2.7 在 driver Group 中添加 btm 相关文件,文件路径为 drivers\source\btm。

图 3.18 sp0 工程添加 btm 相关 files

图 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 文件

图 3.19 sp0 工程添加 FreeRTOSConfig.c 文件

2.9 修改 IAR 配置,添加应用文件相对路径。

图 3.20 sp0 工程添加引用文件的相对路径

图 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.21 bootloader 中屏蔽 boot sp1、sx0 和 sx1 代码

3.2 修改 IAR 配置,删除 Linker - Extra Options 中 SP1、SX0 和 SX1 的 image input 脚本。

3.22 bootloader 工程 IAR 配置修改   

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 信息

图 4.1 串口 log 信息

五、参考文档

  • 《SemiDrive_E3_SSDK_User_Guide》

点击此处在原博文下方留言评论,我们会及时回复您的问题。

如有更多需求,欢迎联系大联大世平集团 ATU 部门:atu.sh@wpi-group.com   作者:Nostalgia

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/905637.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

麻将教学知识

​​​​​​​​​​​​​​

WPF-实现多语言的静态(需重启)与动态切换(不用重启)

目录 一、多语言切换(需重启) 1、配置文件添加Key 2、新增附加属性当前选择语言 3、创建资源文件 4、初始化多语言集合 5、切换多语言并更新配置文件 6、应用程序启动根据配置切换多语言 7、使用 二、多语言切换(无需重启)…

laravel 安装后台管理系统, filament.

参考: 安装 - 面板构建器 - Filament 开始 - 面板构建器 - Filament laravel版本 11. composer require filament/filament:"^3.2" -W php artisan filament:install --panels php artisan make:filament-usercomposer require livewire/livewire php artisan…

[数组基础] 0048. 旋转图像

文章目录 1. 题目链接2. 题目大意3. 示例4. 解题思路5. 参考代码 1. 题目链接 0048. 旋转图像 - 力扣 2. 题目大意 描述:给定一个 nn 大小的二维矩阵(代表图像)matrix。 要求:将二维矩阵 matrix顺时针旋转 90。 说明&#xff…

Java基础(8)异常

目录 1.前言 2.正文 2.1异常的引入 2.2异常的类型 2.2.1编译时异常 2.2.2运行时异常 2.3区分Exception与Error 2.4异常的声明,抛出与捕获 2.4.1throw 2.4.2throws 2.4.2try-catch与finally 2.6自定义异常 3.小结 1.前言 哈喽大家好啊,Java…

功能强大视频编辑软件 Movavi Video Editor Plus 2024 v24.2.0 中文特别版

Movavi Video Editor Plus中文修改版是一款功能强大的视频制作编辑软件,使用能够帮助用户快速从录制的素材中制作成一个精美的电影,支持进行视频剪辑,支持添加背影、音乐和各种音乐,软件使用简单,无需任何的经验和专业…

闯关leetcode——231. Power of Two

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/power-of-two/description/ 内容 Given an integer n, return true if it is a power of two. Otherwise, return false. An integer n is a power of two, if there exists an integer x such th…

<项目代码>YOLOv8 煤矸石识别<目标检测>

YOLOv8是一种单阶段(one-stage)检测算法,它将目标检测问题转化为一个回归问题,能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法(如Faster R-CNN),YOLOv8具有更高的…

论文速读:完全测试时域适应(Test-time Adaptation)目标检测(CVPR2024)

原文标题:Fully Test-time Adaptation for Object Detection 中文标题:完全测试时间适应目标检测 通过百度网盘分享的文件:Fully_Test-time_Adaptation_for_Obje... 链接: 百度网盘 请输入提取码 提取码:yrvz 代码地址…

深度学习:卷积神经网络中的im2col

im2col 是一种在卷积神经网络(CNN)中常用的技术,用于将输入图像数据转换为适合卷积操作的矩阵形式。通过这种转换,卷积操作可以被高效地实现为矩阵乘法,从而加速计算。 在传统的卷积操作中,卷积核&#xff…

深度学习模型入门教程指南

在当前的人工智能生成内容(AIGC)领域中,深度学习模型无疑是支撑其技术核心的关键组件。深度学习模型的广泛应用极大地推动了图像生成、自然语言处理和自动化工作流的发展,本文将从多个角度介绍深度学习模型的概念、构建过程、实际…

计算机网络:网络层 —— IPv4 数据报的首部格式

文章目录 IPv4数据报的首部格式IPv4数据报分片生存时间 TTL字段协议字段首部检验和字段 IPv4数据报的首部格式 IPv4 数据报的首部格式及其内容是实现 IPv4 协议各种功能的基础。 在 TCP/IP 标准中,各种数据格式常常以32比特(即4字节)为单位来描述 固定部分&#x…

Java_Springboot核心配置详解

Spring Boot以其简洁、高效和约定优于配置的理念,极大地简化了Java应用的开发流程。在Spring Boot中,核心配置是应用启动和运行的基础。本文将详细介绍Spring Boot中的两种配置文件格式、基础注解的配置方式、自定义配置以及多环境配置。 一、Spring Bo…

【GESP】C++一级知识点研究,cout和printf性能差异分析

一道简单循环输出练习题(BCQM3148,循环输出),由于cout的代码超时问题,让我注意到二者在使用上的差异,遂查阅研究如下。 全文详见:https://www.coderli.com/gesp-knowledge-cout-printf/【GESP】C一级知识点研究&#…

【网络安全】揭示 Web 缓存污染与欺骗漏洞

未经许可,不得转载。 文章目录 前言污染与欺骗Web 缓存污染 DoS1、HTTP 头部超大 (HHO)2、HTTP 元字符 (HMC)3、HTTP 方法覆盖攻击 (HMO)4、未键入端口5、重定向 DoS6、未键入头部7、Host 头部大小写规范化8、路径规范化9、无效头部 CP-DoS10、HTTP 请求拆分Web 缓存污染与有害…

《数字图像处理基础》学习03-图像的采样

在之前的学习中我已经知道了图像的分类:物理图像和虚拟图像。《数字图像处理基础》学习01-数字图像处理的相关基础知识_图像处理 数字-CSDN博客 目录 一,连续图像和离散图像的概念 二,图像的采样 1, 不同采样频率采样同一张图…

微服务实战系列之玩转Docker(十七)

导览 前言Q:如何实现etcd数据的可视化管理一、创建etcd集群1. 节点定义2. 集群成员2.1 docker ps2.2 docker exec2.3 etcdctl member list 二、发布数据1. 添加数据2. 数据共享 三、可视化管理1. ETCD Keeper入门1.1 简介1.2 安装1.2.1 定义compose.yml1.2.2 启动ke…

MobileNetv2网络详解

背景: MobileNet v1中DW卷积在训练完之后部分卷积核会废掉,大部分参数为“0” MobileNet v2网络是由Google团队在2018年提出的,相比于MobileNet v1网络,准确率更高,模型更小 网络亮点: Inverted Residu…

巨好看的登录注册界面源码

展示效果 源码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" content"widthdevic…