首先 STM32 要支持,F4 以上部分型号支持。
CCM-SRAM 通过专用的总线与 Cortex-M4 内核直接相连,绕过了 AHB 总线矩阵。这意味着它可以实现零等待周期的访问,提供最高的访问速度和确定性。
因此 DMA 无法访CCM-SRAM 只能被 Cortex-M4 内核访问,不能被 DMA 外设访问。
STM32 中叫做 CCMRAM,GD32 中叫做TCMSRAM
判断有没有这些区域
看SRAM内存的组成



所以TCMSRAM是64KB
修改SCT脚本
SCT分散链接脚本

LR_IROM1 0x08000000 0x00080000 { ; load region size_region
ER_IROM1 0x08000000 0x00080000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
.ANY (+XO)
}
RW_IRAM1 0x20000000 0x00020000 { ; RW data
.ANY (+RW +ZI)
}
RW_CCMRAM 0x10000000 0x00004000 { ; CCM RAM, 16KB, 用于 CPU-only 的高频变量
*.o (ccmsram) ; 只放带 __attribute__((section("ccmsram"))) 的变量
}
}在默认的脚本文件中添加了以下内容:
RW_CCMRAM 0x10000000 0x00004000 {
*.o (ccmsram)
}这个起始地址和范围要根据手册来。
宏定义
要放入CCRAM,需要在变量和函数前添加 __attribute__((section("ccmsram"))),这个很长,因此使用宏定义:
例如:
验证是否成功
一、对比运行速度
二、查看map文件
编译的那一堆文件中有个 .map 文件
三、编译后反汇编

fromelf --text -c -o "$L@L.asm" "#L"