DSP_定义一个大的全局数组_探索之路

news2025/4/6 7:05:28

前言

最近在做基于dsp平台的无通信接口系统辨识,辨识的时候会有很大的数据需要存到一个数组当中,而dsp如果定义一个很大的全局数组,编译会报错。 本文将探索如何解决这个报错以及全局数组的大小极限。

正文

首先,我们定义了一个长度为50000的float的数组,float y[50000]; 然后编译报错如下:

 熟悉dsp的朋友应该知道,这个时候就需要修改.cmd文件了, 另外,管全局变量的section名称叫做'.ebss', 说白了,我们要去改 2837xD_FLASH_lnk_cpu1.cmd(其他型号的dsp请对号入座)里面的这一行(红色)。

 为了达到想要的目的,本人是经过几番摸索的,愚蠢的过程就省略了,直接给出关键信息,我参考了以下博文:

CCS软件报错:“第0页“.text”大小为0x1041的节的对齐/分块放置失败。”_css 仿真 1041error_渡己之道的博客-CSDN博客

 其中,最让我受启发的是下面我截的这段话。

 float y[50000];是一个很大的数据块 size = 5w * 2 = 10w(dsp一个size 16位,float32位需要2个size), 而.ess的分区最大的也才 0x1000 = 4096(d),  4096是远远小于10w的。 所以我们需要搞一个大的分区分配给.ess。.cmd的关键修改如下

//   RAMGS2      : origin = 0x00E000, length = 0x001000
// Δ                                             ↓ 分区大小改大
   RAMGS2      : origin = 0x00E000, length = 0x00C000

/*
   RAMGS3      : origin = 0x00F000, length = 0x001000
   RAMGS4      : origin = 0x010000, length = 0x001000
   RAMGS5      : origin = 0x011000, length = 0x001000
   RAMGS6      : origin = 0x012000, length = 0x001000
   RAMGS7      : origin = 0x013000, length = 0x001000
   RAMGS8      : origin = 0x014000, length = 0x001000
   RAMGS9      : origin = 0x015000, length = 0x001000
//   RAMGS10     : origin = 0x016000, length = 0x001000
   RAMGS11     : origin = 0x017000, length = 0x001000
   RAMGS12     : origin = 0x018000, length = 0x001000     // Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices.
   RAMGS13     : origin = 0x019000, length = 0x001000     // Only Available on F28379D, F28377D, F28375D devices. Remove line on other devices.
*/

我把 从 RAMGS2 到 RAMGS13 这 12个分区,合并成了1个分区,都合并成了RAMGS2。分区大小从0x1000改成了0xC000 = 49152,这应该是可以合并的分区极限了。

另外一处,.ebss section的分区分配也需要做相应的修改。

SECTIONS
{
   /* Allocate program areas: */
   .cinit              : > FLASHB      PAGE = 0, ALIGN(4)
   .pinit              : > FLASHB,     PAGE = 0, ALIGN(4)
   .text               : >> FLASHB | FLASHC | FLASHD | FLASHE      PAGE = 0, ALIGN(4)
   codestart           : > BEGIN       PAGE = 0, ALIGN(4)

   /* Allocate uninitalized data sections: */
   .stack              : > RAMM1        PAGE = 1

   //.ebss               : >> RAMLS5 | RAMGS11 | RAMGS12	PAGE = 1
   // Δ                                   ↓ 这个分区大小是0xC000
   .ebss               : >>  RAMLS5  | RAMGS2  PAGE = 1

   .esysmem            : > RAMLS5       PAGE = 1

... 省略 ...

现在,我们给全局变量分配的分区最大size是49152,float数组的极限应该是49152/2 = 24576。但实验证明,float数组极限大小最多达到24544, 分区保留64个size。 

也就是说float数组极限大小为:(最大分区大小 - 64)/ 2

对上述结论,我们有做了一组对比测试,把分区大小改为0xB000, [ 0xB000(h) - 64(d)] / 2 = 22496。

分别测试定义 22496大小的数组和22497的数组,编译结果如下:

 

 22496大小的数组通过了编译,而22497大小的数组未通过编译,说明结论是成立的。

那么本文讨论的内容就到此结束了,感谢您的阅读,欢迎留言讨论、收藏、点赞、分享。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数学库:Extreme Optimization Numerical 8.1.4 Crack

Extreme Optimization Numerical.NET 的极端优化数值库,更快地构建金融、工程和科学应用程序,具有置信度和预测带的非线性曲线拟合,用于 .NET的极端优化数值库是为 Microsoft .NET 框架构建的通用数学和统计类的集合。用于 .NET的极端优化数值…

将无风险资产与单个风险资产进行组合

目录 1. 基本概念 2. 将无风险资产与单个风险资产进行组合 3. 有效资产组合 1. 基本概念 无风险资产和风险资产。 我的理解:无风险资产利率完全可确定,风险资产的利率称为预期收益率,并且有标准差。 关于风险资产预期收益率和标准差的计…

NC65 自由报表发布为节点如何显示以及如何取消已发布的报表节点

NC65 自由报表发布为节点如何显示以及如何取消已发布的报表节点? 一、NC65 自由报表发布为节点如何显示? 答:需要在动态建模平台-权限管理-职责管理下的职责节点进行功能分配,如下图: 二、如何取消已发布的报表节…

Javac Spire.Presentation 之PPT文本图片内容提取

目录结构前言文档准备引入Maven依赖代码块提取结果验证ppt_demo.ppt 提取结果pptx_demo.pptx 提取结果前言 应公司需求,需实现以下功能 PPT文本内容的替换;PPT文本内容的提取;PPT中图片的提取存放; 此文章将使用Spire.Presenta…

Mal-PEG-SCM,Maleimide PEG SCM,双功能修饰性PEG

Mal-PEG-SCM,SCM-PEG-Maleimide,Maleimide PEG SCM,Maleimide PEG Succinimidyl Carboxymethyl Ester马来酰亚胺-聚乙二醇-琥珀酰亚胺羧甲基酯,马来酰亚胺PEG琥珀酰亚胺羧甲基酯Product specifications:1.CAS No&#…

DataGrip下载安装及使用教程(详细版)

一.安装教程 1.下载 官网下载:DataGrip: The Cross-Platform IDE for Databases && SQL by JetBrains 2.点击Download跳转到下载页面 3.下载最新版本的可以直接点击 Download 下载,下载其他版本的点击 Other versions 下载其他版本 4. 4.选择…

改变Linux文件权限、所属用户组、所有者知识总结

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:Linux操作…

requestAnimationFrame详解-js性能优化

requestAnimationFrame 请求动画帧 它是一个浏览器的宏任务 requestAnimationFrame的用法与settimeout很相似,只是不需要设置时间间隔而已。requestAnimationFrame使用一个回调函数作为参数,这个回调函数会在浏览器重绘之前调用。它返回一个整数&#x…

快鲸SCRM打通工单系统,实现客户售前售后一体化管理

深度运营客户关系,做好客户售后服务,才符合企业的长远利益。然而大多数企业只注重售前售中,忽视了售后,导致客户售后服务现状不尽人意,主要体现在: 把客户问题抛到售后群后,便放任不管; 缺乏标…

自动驾驶感知——超声波技术

文章目录1. 超声波基本概念1.1 声波的频率与分类1.2 超声波的波速和波长1.3 超声波的指向性1.4 超声波的反射和折射1.5 超声波的衰减1.6 超声波产生的效应2. 超声波传感器原理及传感器分类2.1 超声波传感器原理2.2 压电式超声波传感器2.3 磁致伸缩式超声波传感器2.4 超声波传感…

MyBatis案例 | 使用映射配置文件实现CRUD操作——通过主键查询对应数据

本专栏主要是记录学习完JavaSE后学习JavaWeb部分的一些知识点总结以及遇到的一些问题等,如果刚开始学习Java的小伙伴可以点击下方连接查看专栏 本专栏地址:🔥JavaWeb Java入门篇: 🔥Java基础学习篇 Java进阶学习篇&…

关于Linux中断的相关查询

1.linux 内核 /proc/interrupts 在 /proc/interrupts 文件中记录了 Linux 内核的中断信息,我们可以通过命令查看 sudo cat /proc/interrupts 文件中以表格的形式列举出来所有的内核中断,其表头信息标注如下: 我们可以通过特定任务执行时…

计算机SCI论文一定要在指定的机构润色吗? - 易智编译EaseEditing

不一定要在指定的机构润色。 首先期刊要求润色,是非常正常的事情。国人投的中文论文,有的也会被要求润色。 更不要说国外的英文期刊了,咱们写的英文文章投过去,大部分都会被要求润色的。 为什么期刊总是要求润色语言呢&#xff…

Windows7操作系统安全(3)

实验简介 实验所属系列:网络安全实践 实验对象: 本科/专科信息安全专业 相关课程及专业:计算机基础,Linux基础 实验时数(学分):2学时 实验类别:实践实验类预备知识 Windows系列是目…

Oracle重建控制文件

利用trace文件重建控制文件 1、生成trace文件: SQL>alter database backup controlfile to trace;2、找到生成的trace文件: SQL>show parameter user_dump_destuser_dump_dest 文件对应的路径即为trace文件的路径 3、关闭数据库 SQL>shutdo…

VueJS 之模板引用

文章目录参考描述模板引用引用访问模板引用组件中的模板引用$nextTick()示例updated错误示范正确演示$nextTick()参考 项目描述搜索引擎Bing哔哩哔哩黑马程序员VueJS 官方文档模板引用 描述 项目描述Edge109.0.1518.70 (正式版本) (64 位)操作系统Windows 10 专业版vue/cli5.…

jvm相关,jvm内存溢出,内存占用过高,CPU占用率高原因分析,MAT内存镜像文件分析的使用----学习笔记

什么是内存泄漏? 什么是内存溢出 内存溢出: OutOfMemory 它是指程序在申请内存时,没有足够的内存空间供其使用,抛出 OutOfMemory 错误 内存泄露: Memory Leak 它是指程序运行后,没有释放所占用的内存空间,比如程序运行完后没有释…

数据库和SQL初探

数据库和SQL初探1. 什么是数据库2. 数据库的结构3. MySQL表定义相关操作4. MySQL体系结构和存储引擎1. 什么是数据库 将大量数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合。用来管理数据库的计算机系统称为数据库管理系统(DatabaseManagementSyste…

Java面试题二(自用-持续更新)

本文目录如下:Java面试题(二)四、并发编程线程和进程的区别?守护线程是什么?创建线程有哪几种方式?线程有哪些状态?sleep() 和 wait() 有什么区别?线程的sleep()方法和yield()方法有什么区别?线…

我发现买不起自己出版的书了,这到底是咋回事?

大家好,我是冰河~~ 这次我是真的有点买不起自己的书了! 聊聊背景 继出版《海量数据处理与大数据技术实战》、《MySQL技术大全:开发、优化与运维实战》和《深入理解分布式事务:原理与实战》之后,冰河于2022年6月出版…