修改LD文件分配RAM2K区域
在链接脚本(LD文件)中定义独立的RAM2K存储区,确保地址范围不与其他段重叠:
MEMORY
{
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 448K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 30K
RAM2K (xrw) : ORIGIN = 0x20007800, LENGTH = 2K
}
.ram2k_address :
{
. = ALIGN(4);
. = ORIGIN(RAM2K)+0x0000;
KEEP(*(SORT_NONE(.ram2k_address_1)))
. = ALIGN(4);
} >RAM2K AT >RAM2K
在C代码中通过__attribute__将变量绑定到该段:
volatile uint8_t RAM2K_BUF[2040] __attribute__((section(".ram2k_address_1")));
通过MRS工具指定RAM地址
在MounRiver Studio的工程配置中,向Linker Flags添加参数直接指定段地址:
--section-start=.ram2k_address_2=0x20007800
对应的变量声明方式:
volatile uint8_t RAM2K_BUF2[8] __attribute__((section(".ram2k_address_2")));
关键注意事项
地址范围必须确保不与芯片原有RAM区域冲突,CH582M的32KB RAM原始范围为0x20000000-0x20007FFF。示例中0x20007800-0x20007FFF是最后2KB空间。
双电源供电模式下,需确认芯片手册中指定区域的掉电保持特性。部分芯片的特定RAM区域支持低功耗状态下的数据保留。
变量需使用volatile关键字防止编译器优化导致意外访问。对于关键数据,建议增加校验机制(如CRC)确保数据完整性。
CH58x RAM2K独立分配技巧
1183

被折叠的 条评论
为什么被折叠?



