DshanMCU-R128s2启动与资源划分

启动与资源划分

下面简单介绍一下 R128 方案的资源划分与启动流程。

资源划分

CPU 资源划分

这只是默认配置方案,CPU 资源划分可以按照需求任意修改

CPU功能说明
M33控制核。运行 WI-FI/BT 固件、协议栈、驱动、休眠唤醒、安全启动、安全控制
C906应用核。运行大部分驱动与主要应用,控制台
HIFI5算法核。运行音频相关驱动与算法

内存配置

R128 方案目前三个核 OS 运行的地址范围如下表。

这只是默认配置方案,CPU 资源划分可以按照需求任意修改。

CPU内存使用地址
M33lspsram,运行地址范围 0x8000000 - 0x8300000
C906lspsram,运行地址范围 0x8300000 - 0x8800000
HIFI5hspsram,运行地址范围 0xC000660 - 0xC0A0660

启动流程

R128 方案非安全启动流程如下,其中 M33 为启动核:

这只是默认配置方案,启动流程可以按照需求任意修改。

  1. BROM
    1. 加载 M33 BOOT0 至 SRAM
    2. 跳转 M33 BOOT0 运行
  2. M33 BOOT0
    1. 初始化 LSPSRAM 与 HSPSRAM
    2. 加载 M33 RTOS 至 LSPSRAM
    3. 加载 C906 RTOS 至 LSPSRAM
    4. 加载 HIFI5 RTOS 至 HSPSRAM
    5. 跳转运行 M33 RTOS
  3. M33 RTOS
    1. 启动运行 C906 RTOS
    2. 启动运行 HIFI5 RTOS
  4. C906 RTOS
    1. 启动运行用户程序
BROM SRAM BOOT0 LSPSRAM HSPSRAM M33 C906 HIFI5 load M33 Core BOOT0 to SRAM Boot BOOT0 on M33 init LSPSRAM init HSPSRAM load M33 RTOS to LSPSRAM load C906 RTOS to LSPSRAM load HIFI5 RTOS to HSPSRAM BOOT0 Boot M33 RTOS Boot C906 RTOS C906 RTOS Running on LSPSRAM Boot HIFI5 RTOS HIFI5 RTOS Running on HSPSRAM APP Running on HSPSRAM BROM SRAM BOOT0 LSPSRAM HSPSRAM M33 C906 HIFI5

修改运行核心

系统有三个不同的核心,分别是 M33,C906,HIFI5,其中M33是启动核心不可以关闭,另外两个核心都可以关闭。当不需要使用 C906 核心或者 HIFI5 DSP 核心的时候,可以将这两个核心关闭。方法如下:

关闭 HIFI5 核心

首先,选择好 M33 的方案,因为 HIFI5 是由 M33 来启动的。

source envsetup.sh
lunch_rtos r128s2_m33

直接取消勾选即可:

image1

关闭 C906 核心

首先,选择好 M33 的方案,因为 C906 是由 M33 来启动的。

source envsetup.sh
lunch_rtos r128s2_m33

直接取消勾选即可:

image1

修改核心运行内存空间

修改到 HSPSRAM 运行

R128 的 M33 和 C906 两个核运行的系统都是默认运行在 LSPSRAM,这里示例如何修改到 HSPSRAM

  1. 关闭启动 HIFI5 核心

首先,选择好 M33 的方案,因为 HIFI5 是由 M33 来启动的。

source envsetup.sh
lunch_rtos r128s2_m33

由于默认 HIFI5 是运行在 HSPSRAM 的,这里需要释放 HSPSRAM。运行 mrtos_menuconfig 启动配置。

直接取消勾选即可。

image1

  1. 将 M33 和 C906 设置成在 HSPSRAM 运行

首先选择 M33 的方案:

source envsetup.sh
lunch_rtos r128s2_m33

接着运行 mrtos_menuconfig 修改启动地址,所需要修改的配置如下图所示:

image2

lspsram 地址空间为 0x8000000-0x87fffff,hspsram 地址空间为 0xc000000-0xc7fffff。

这里将所需要的修改的核的地址,将8改成c即可。如修改 M33 的起始地址,将 0x08004000,修改成0x0c004000 即可,如下图。

image3

然后保存配置,重新编译 M33 方案。接下来修改 C906 的地址,选择 C906 的方案

source envsetup.sh
lunch_rtos r128s2_c906

接着运行 mrtos_menuconfig 修改启动地址,所需要修改的配置如下图所示:

image4

然后保存配置,重新编译 C906 方案。

  1. 修改配置文件

首先,确认自己方案使用的 image_header 文件,运行一次打包的命令 pack,从打包的 log 中能看出方案所选的文件,如下图:

image4-1

如果需要修改 M33 的地址,则只修改 M33 的即可,C906同理。如果取消启动 DSP,则直接注销掉 DSP的配置代码。

最后,修改 M33 和 C906 在 HSPSRAM 运行,并且取消运行 HIFI5 的 image_header 文件修改可如下所示:

diff --git a/r128s2/pro/configs/image_header_xip.cfg b/r128s2/pro/configs/image_header_xip.cfg
index 5c83ac1..fc87d06 100755
--- a/r128s2/pro/configs/image_header_xip.cfg
+++ b/r128s2/pro/configs/image_header_xip.cfg
@@ -30,9 +30,9 @@
         {"id": "0xa5e05a00", "bin": "boot0_spinor.fex", "attr": "0x01", "sram_offs": "0x40b0000", "ep": "0x40b0080"},
         {"id": "0xa5e05a00", "bin": "boot0_sdcard.fex", "attr": "0x01", "sram_offs": "0x40b0000", "ep": "0x40b0080"},
         {"id": "0xa5e15a01", "bin": "freertos-gz.fex", "attr": "0x01"},
-        {"id": "0xa5e05a01", "bin": "rtos_arm.fex", "attr": "0x01", "sram_offs": "0x8004000", "ep": "0x8004000"},
-        {"id": "0xa5e05a01", "bin": "rtos_riscv.fex", "attr": "0x01", "sram_offs": "0x8200000", "ep": "0x8200000"},
-           {"id": "0xa5e05a01", "bin": "rtos_dsp.fex", "attr": "0x01", "sram_offs": "0xc000000", "ep": "0xc000660"},
+        {"id": "0xa5e05a01", "bin": "rtos_arm.fex", "attr": "0x01", "sram_offs": "0xc004000", "ep": "0xc004000"},
+        {"id": "0xa5e05a01", "bin": "rtos_riscv.fex", "attr": "0x01", "sram_offs": "0xc200000", "ep": "0xc200000"},
+       //    {"id": "0xa5e05a01", "bin": "rtos_dsp.fex", "attr": "0x01", "sram_offs": "0xc000000", "ep": "0xc000660"},
         {"id": "0xa5e05a01", "bin": "etf.fex", "attr": "0x01", "sram_offs": "0x4000000", "ep": "0x4000000"},
         {"id": "0xa5e05a01", "bin": "rtos_xip_rv.fex", "attr": "0x02"},
         {}

查看代码内存分布

可以在 SDK 中运行 kamp 命令查看代码的内存分布

image

可以在最后查看内存的总使用情况

image

配置XIP

R128-S2 内置 NOR FLASH,可以将运行效率要求不高的代码保存在 XIP 段中,减少内存的占用。

配置 XIP 需要把对应的函数和库文件加入 xip.lds.S 中,具体语法请参照 ld 语法。

image

image

配置多个堆内存

有些时候当不需要使用 DSP 核心或者 DSP 核心内存使用量较少时,可以配置多个堆内存,将一部分内存放置于不同的 RAM 上使用。这里以 R128-S2 关闭 DSP 核心并将 HSPSRAM 分配给 C906 核心使用为例:

配置前内存分布情况

配置前进入 C906 核心运行 free 命令查看当前内存使用分布情况。

image

关闭 DSP 核心

首先,选择好 M33 的方案,因为 DSP 是由 M33 来启动的。

source envsetup.sh
lunch_rtos r128s2_m33

由于默认 DSP 是运行在 HSPSRAM 的,这里需要释放 HSPSRAM。运行 mrtos_menuconfig 启动配置。

直接取消勾选即可。

image

修改后请重新编译 M33 核心的固件。

image

将 HPSRAM 全部分配给 C906 使用

选择好 C906 的方案,运行配置界面

source envsetup.sh
lunch_rtos r128s2_c906
image-20231017135824514

image

找到 Kernel Options

image

找到 Heap Memory Manager (Use heap-4 to allocate memory) —>

image

选中 Use heap-multiple to allocate memory

image

配置 Default Heap Ram 为 heap in lpsram 配置默认内存堆为 lpsram

image

勾选 lpsram heap 和 lpsram heap dynamic address,意思是 lpsram 的内存是动态分布的

image

配置 lpsram heap size 的大小是0x600000,因为前面 2M 给 M33 使用,所以剩下 6M

image

配置 hpsram heap 使能 HPSRAM,并配置 hpsram heap start address 为 0xc000000,hpsram heap size 为 0x7FFFFF 表示将 HPSRAM 全部分配给 C906 核心使用。

image

将 HPSRAM 部分分配给 C906 使用

如果 HPSRAM 需要运行 DSP,可以分配部分给 C906 使用,配置 hpsram heap start address为 0xc400000,0xc000000 是 HPSRAM 的开始地址,前面 4M 已经分配给 DSP 使用;并配置 hpsram heap size 为 0x400000 意思是可以用的 HPSRAM 大小是 4M。

image

配置后的内存分布情况

编译打包烧录后,可以使用 free 命令查看配置后的内存分布情况。可以看到 HPSRAM 的8M内存全部分配给 C906 使用了,C906 一共可以用 4M LPSRAM + 8M HPSRAM = 12M RAM

image

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

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

相关文章

Linux内核模块文件组成介绍

Linux驱动开发主要的工作就是编写模块,一个典型的Linux内核模块文件.ko 主要由以下几个部分组成。 模块加载函数(必须) 当通过insmod或modprobe命令加载内核模块时,模块的加载函数会自动被内核执行,完成本模块的相关初始化工作。 Linux内核模…

深度解析LinkedList

LinkedList是Java集合框架中List接口的实现之一,它以双向链表的形式存储元素。与传统的数组相比,链表具有更高的灵活性,特别适用于频繁的插入和删除操作。让我们从底层实现开始深入了解这个强大的数据结构。 底层数据结构 LinkedList的底层数…

python画图【00】Anaconda和Pycharm和jupyter的使用

①Anaconda ②Pycharm 一、Anaconda安装步骤 1、双击安装包,点击next。 2、点我同意I agree 3、 4、选择需要安装的位置,位置可根据自己情况安装到具体位置,但要记住安装到了哪里。然后点击next 5、可选择加入到环境变量,…

Linux内核编码规范

学习linux内核或者linux驱动的人应该先掌握内核编码规范,这样才能更好的驾驭linux内核、驱动。 下面就从这几个方面讲解一下linux内核编码规范。 注释风格、排版风格、头文件风格、变量定义、宏定义、函数 1 注释风格 1.1 注释的原则是有助于对程序的阅读和理解&…

nmap端口扫描工具安装和使用方法

nmap(Network Mapper)是一款开源免费的针对大型网络的端口扫描工具,nmap可以检测目标主机是否在线、主机端口开放情况、检测主机运行的服务类型及版本信息、检测操作系统与设备类型等信息。本文主要介绍nmap工具安装和基本使用方法。 nmap主…

jar混淆,防止反编译,Allatori工具混淆jar包

文章目录 Allatori工具简介下载解压配置config.xml注意事项 Allatori工具简介 官网地址:https://allatori.com/ Allatori不仅混淆了代码,还最大限度地减小了应用程序的大小,提高了速度,同时除了你和你的团队之外,任何人…

java的XWPFDocument3.17版本学习

maven依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.17</version> </dependency> 测试类&#xff1a; import org.apache.poi.openxml4j.exceptions.InvalidFormatExcep…

【第七在线】数据分析与人工智能在商品计划中的应用

随着技术的不断进步&#xff0c;数据分析和人工智能&#xff08;AI&#xff09;已经成为了现代商品计划的关键组成部分。在服装行业&#xff0c;这两项技术正在帮助企业更好地理解市场需求、优化库存管理、提高生产效率和提供更好的客户体验。本文将深入探讨数据分析和人工智能…

华为鸿蒙开发适合哪些人学习?

随着鸿蒙系统的崛起&#xff0c;越来越多的人开始关注鸿蒙开发&#xff0c;并希望成为鸿蒙开发者。然而&#xff0c;鸿蒙开发并不适合所有人&#xff0c;那么哪些人最适合学习鸿蒙开发呢&#xff1f;本文将为您总结鸿蒙开发适合的人群。 一、具备编程基础的人 学习鸿蒙开发需要…

C语言——最古老的树

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 缺乏明确的目标&#xff0c;一生将庸庸…

性能优化之资源优化

性能优化之资源优化 资源优化性能关键检测流程。浅析一下基于Unity3D 美术规则约束一、模型层面二、贴图层面三、动画层面四、声音层面&#xff1a;&#xff08;音频通用设置&#xff09;五、UI层面&#xff1a; 题外点&#xff1a;诚然在优化中&#xff0c;美术占比是很重要的…

CDN缓存技术对网站的作用有什么

CDN缓存是什么&#xff1f; CDN缓存&#xff0c;即内容分发网络缓存&#xff0c;是一种用于提高网络内容传输效率和稳定性的技术。CDN缓存可以在网络中存储大量的数据和文件&#xff0c;例如网页、图片、视频等&#xff0c;从而避免用户直接从原始服务器获取数据&#xff0c;减…

sql-labs服务器结构

双层服务器结构 一个是tomcat的jsp服务器&#xff0c;一个是apache的php服务器&#xff0c;提供服务的是php服务器&#xff0c;只是tomcat向php服务器请求数据&#xff0c;php服务器返回数据给tomcat。 此处的29-32关都是这个结构&#xff0c;不是用docker拉取的镜像要搭建一下…

如何使用kali来进行一次ddos攻击

本文章用于记录自己的学习路线&#xff0c;不用于其他任何途径! ! ! 哈喽啊&#xff01;又是好久不见&#xff0c;本博主在之前发过一个ddos攻击的介绍。 emm…虽然那篇文章也提到了ddos攻击的方式&#xff0c;但太过于简陋&#xff0c;好像也没有什么用&#xff0c;so&#…

redis主从复制(在虚拟机centos的docker下)

1.安装docker Docker安装(CentOS)简单使用-CSDN博客 2.编辑3个redis配置 cd /etc mkdir redis-ms cd redis-ms/ vim redis6379.conf vim redis6380.conf vim redis6381.conf# master #端口号 port 6379#设置客户端连接后进行任何其他指定前需要使用的密码 requirepass 12345…

力扣单调栈算法专题训练

目录 1 专题说明2 训练 1 专题说明 本博客用来计算力扣上的单调栈题目、解题思路和代码。 2 训练 题目1&#xff1a;2866美丽塔II。 解题思路&#xff1a;先计算出prefix[i]&#xff0c;表示0~i满足递增情况下&#xff0c;0~i上的元素之和最大值。然后计算出suffix[i]&#…

【数据结构】队列的使用|模拟实现|循环队列|双端队列|面试题

一、 队列(Queue) 1.1 概念 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出FIFO(First In First Out) 入队列&#xff1a;进行插入操作的一端称为队尾&#xff08;Tail/Rear&#xff09; 出队列…

Oracle WebLogic Server WebLogic WLS组件远程命令执行漏洞 CVE-2017-10271

Oracle WebLogic Server WebLogic WLS组件远程命令执行漏洞 CVE-2017-10271 已亲自复现 漏洞名称漏洞描述影响版本 漏洞复现环境搭建漏洞利用 修复建议 漏洞名称 漏洞描述 在Oracle WebLogic Server 10.3.6.0.0/12.1.3.0.3/2.2.1/1.10/12.2.1.1/22.0&#xff08;Application …

Linux数据库主从复制(单主单从)

MySQL主从复制的优点包括&#xff1a; 1、横向扩展解决方案 - 在多个从站之间分配负载以提高性能。在此环境中&#xff0c;所有写入和更新都必须在主服务器上进行。但是&#xff0c;读取可以在一个或多个从设备上进行。该模型可以提高写入性能&#xff08;因为主设备专用于更新…

css 三角形实现方式及快速联想记忆

css实现三角形是常见的需求&#xff0c;在此记录如下 1 边框实现 原理&#xff1a;相邻的border之间会形成一条斜线(可按此联想记忆) .triangle {width: 0;height: 0;border-left: 100px solid red;border-right: 100px solid green;border-top: 100px solid blue;border-bot…