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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《软件方法(下)》8.2.4 类和属性的命名

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 8.2 建模步骤C-1 识别类和属性 8.2.4 类和属性的命名 8.2.4.2 关于DDD话语中的“通用语言” DDD(领域驱动设计)话语中有“通用语言(Ubiquitous L…

MongoDB介绍

一、MongoDB介绍 1.1 mongoDB介绍 MongoDB 是由C语言编写的,是一个基于分布式文件存储的开源数据库系统。 在高负载的情况下,添加更多的节点,可以保证服务器性能。 MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB …

[SQL]实验 视图和索引的应用

实验目的: [实验目的和要求] 1、掌握视图的创建、修改和重命名的方法 2、掌握视图中数据的操作 3、了解索引的作用 4、掌握索引的创建方法 实验步骤: 1、在销售管理数据库中,创建一个女职工视图,包括员工的编号、姓名、性别、雇佣…

不忍学弟学妹受苦受难!!!逐一讲解发动机原理实验报告(1)

固体火箭发动机侵蚀燃烧测试实验 经过了愉快迷糊——哦不瑟瑟发抖——哦不痛不欲生的两天,终于和小伙伴们协力完成了西北工业大学航天学院发动机原理实验报告。具体的实验指导书均可在本人博客资源站下载。 固体火箭发动机侵蚀燃烧测试实验,嗯哼—— 实…

面试官95%会问的接口测试知识!

接口测试最近几年被炒的火热了,越来越多的测试同行意识到接口测试的重要性。接口测试为什么会如此重要呢? 主要是平常的功能点点点,大家水平都一样,是个人都能点,面试时候如果问你平常在公司怎么测试的,你除…

前端基础location的使用

概念 获取当前页面的地址信息,还可以修改某些属性,实现页面跳转和刷新等。 样例展示 window.location 含义.originURL 基础地址,包括协议名、域名和端口号.protocol协议 (http: 或 https:).host域名端口号.hostname域名.port端口号.pathname路…

laravel 对接支付,本地穿透问题

本地穿透有好多工具,参考链接:https://zhuanlan.zhihu.com/p/339923535 我这边是用的 NATAPP 官网:https://natapp.cn/ 客户端下载:https://natapp.cn/# NATAPP1分钟快速新手图文教程:https://natapp.cn/article/n…

【String、StringBuilder 和 StringBuffer 的 区别】

✅ String、StringBuilder 和 StringBuffer 的 区别 ✅典型解析✅扩展知识仓✅String 的不可变性✅ 为什么JDK 9 中把String 的char[ ] 改成了 byte[ ] ? ✅为什么String设计成不可变的✅缓存✅安全性✅线程安全✅hashcode缓存✅ 性能 ✅String 的 " " 是如何实现的…

JWT是什么?它有什么用?

1. 什么是 JWT? JWT是 JSON Web Token 的缩写,通过数字签名的方式,以 JSON 对象为载体,在不同的服务器终端之间安全传输的信息。 2. JWT 有什么用? JWT 最常见的场景就是授权认证,一旦用户登录&#xff…

[已解决] Ubuntu远程桌面闪退+登录显示“远程桌面由于数据加密错误 , 这个会话将结束“

两个月前,由于跑代码在Ubuntu配置环境,乱七八糟的下载了很多东西,导致了一系列问题..... 问题1 Ubuntu远程桌面闪退 实验室有两台服务器,IP后三位分别为141和142,其中141在输入密码后立即闪退,142可以正常…

【Vue新手必看】ElementUI表单实战教程,轻松掌握!

ElementUI表单 el的表单官网内容很多&#xff0c;看了一眼觉得心累了。但实际上它使用起来非常的方便,el为我们封装了各种组件&#xff0c;样式也大众。 一个简单的案例 代码如下&#xff08;使用时确保引入了相关的组件&#xff09; <template> <el-form ref"…

麒麟信安日志轮询分割操作说明

1、背景介绍 由于模块上面硬盘容量有限&#xff0c;需要定时清理系统日志。为了方便用户使用&#xff0c;在系统中设定自动日志轮询操作&#xff0c;让日志占用容量由操作系统自动管理&#xff0c;用户无需担心日志太多把硬盘容量占满。 2、操作说明 新建需要分割的日志logr…