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