当前位置: 首页 > news >正文

RAM不够?CUBEIDE使用CCMRAM

RAM不够?使用CCMRAM


文章目录

  • RAM不够?使用CCMRAM
  • 打开连接LD文件:
  • 添加代码
  • 添加标识宏
  • 使用


打开连接LD文件:

在这里插入图片描述

添加代码

在SECTIONS段最后加上下面代码:

 _siccmram = LOADADDR(.ccmram);	/* CCM-RAM section * * IMPORTANT NOTE! * If initialized variables will be placed in this section,* the startup code needs to be modified to copy the init-values.  */.ccmram (NOLOAD) :{. = ALIGN(4);_sccmram = .;       /* create a global symbol at ccmram start */*(.ccmram)*(.ccmram*). = ALIGN(4);_eccmram = .;       /* create a global symbol at ccmram end */} >CCMRAM

代码解释:
这段代码是针对 ARM Cortex-M 系列处理器的链接脚本代码,用于描述内存布局中的 .ccmram(Core Coupled Memory RAM)段。这段代码告诉链接器如何将程序的各个部分放置在 .ccmram 段中。下面我会对每个部分进行详细解释:

_siccmram = LOADADDR(.ccmram);

这一行代码将 .ccmram 段的加载地址(LOADADDR)赋值给 _siccmram 符号。_siccmram 是一个全局符号,它将指向 .ccmram 段的起始地址。

.ccmram (NOLOAD) :
{. = ALIGN(4);_sccmram = .;       /* create a global symbol at ccmram start */*(.ccmram)*(.ccmram*). = ALIGN(4);_eccmram = .;       /* create a global symbol at ccmram end */
} >CCMRAM

这段代码定义了 .ccmram 段的内容。以下是对各个部分的解释:

. = ALIGN(4);:这是一个地址对齐操作,确保接下来的数据在 4 字节边界上对齐。ALIGN(4) 意味着数据将按照 4 字节对齐。

_sccmram = .;:这一行代码创建一个全局符号 _sccmram,它将指向此时的地址,即 .ccmram 段的起始地址。

*(.ccmram) 和 (.ccmram):这两行代码表示将所有放置在 .ccmram 段的标准和重定位代码(包括初始化数据、代码等)都添加到此处。

. = ALIGN(4);:再次执行地址对齐操作,确保 .ccmram 段的大小是 4 的倍数。

_eccmram = .;:这一行代码创建另一个全局符号 _eccmram,它将指向此时的地址,即 .ccmram 段的结束地址。

最后,>CCMRAM 指示链接器将这些内容放置在名为 CCMRAM 的特定内存区域中。

综合来看,这段代码的作用是定义了一个名为 .ccmram 的段,该段将位于指定的 CCMRAM 内存区域中。这段代码也提供了起始地址 _sccmram 和结束地址 _eccmram 的全局符号,以便在程序中可以引用这些地址。

添加标识宏

然后在main.h中添加使用CCMRAM的宏标识:

#define CCMRAM __attribute__((section(".ccmram")))

使用

使用:在你想让变量使用CCMRAM的变量的前面加上标识CCMRAM
在这里插入图片描述
结果:成功使用CCMRAM
在这里插入图片描述

http://www.lryc.cn/news/120677.html

相关文章:

  • npm ERR! code ERESOLVEnpm ERR! ERESOLVE unable to resolve dependency tree
  • 使用 prometheus client SDK 暴露指标
  • Jmeter之BeanShell取出参数进行四则运算,并判断是否正确
  • PYTHON 斗地主发牌 (简易版)
  • CSS文本裁剪
  • ClickHouse常见的引擎和使用
  • 构建之法 - 软件工程实践教学:一线教师的13问
  • 联调 matlab 遇到的一些事儿
  • 时序预测 | Matlab实现基于GRNN广义回归神经网络的电力负荷预测模型
  • 3.2 Tomcat基础
  • 认识http的方法、Header、状态码以及简单实现一个http的业务逻辑
  • Faiss在windows下安装和使用
  • 【JavaEE进阶】SpringBoot项目的创建
  • c++二进制转化十进制代码(小数)
  • 07_ansible, 条件选择、加载客户事件、在roles和includes上面应用’when’语句、条件导入、基于变量选择文件和模版、注册变量
  • 4个简化IT服务台任务的ChatGPT功能
  • 群晖7.X版安装cpolar内网穿透
  • [保研/考研机试] KY183 素数 北京航空航天大学复试上机题 C++实现
  • Java基础入门篇——IDEA开发第一个入门程序(五)
  • 系统学习Linux-Redis基础
  • 实现缓存el-table分页大小,用户新建标签打开该页面需保持分页大小(考虑是否为嵌入式页面)
  • 056B R包ENMeval教程-基于R包ENMeval对MaxEnt模型优化调参和结果评价制图(更新)
  • MySQL_数据库的DDL语句(表的创建与修改)
  • 常见面试题:字节序判别和转换
  • Maxwell与canal工具对比
  • SpringBoot——如何运行Python脚本并返回数据
  • 在生产环境中部署Elasticsearch:最佳实践和故障排除技巧———索引与数据上传(二)
  • R语言初学者书籍推荐
  • Taro+Vue3,点击按钮把另一个页面分享出去
  • CSS基础:学习CSS样式的基本语法和应用,了解如何美化网页。