1.修改连接脚本STM32G431XX_FLASH.ld

/* Specify the memory areas */
MEMORY
{
RAM (xrw)      : ORIGIN = 0x20000000, LENGTH = 22K
FLASH (rx)      : ORIGIN = 0x8000000, LENGTH = 128K
CCMRAM (xrw) : ORIGIN = 0x10000000, LENGTH = 10K    /* 新增:CCMRAM 10KB */
}
  /*--- 用于CCMRAM的自定义段 ---*/
  .ccmram :
  {
    . = ALIGN(4);
    _sccmram = .;  
    *(.ccmram)
    *(.ccmram*)
    . = ALIGN(4);
    _eccmram = .; 
  } >CCMRAM AT> FLASH    /* 数据在Flash中初始化,运行时拷贝到CCMRAM */
  1. 代码中main函数开始手动复制flash内容到ccmram
    ld中添加定义:
/* Highest address of the user mode stack */
_estack = ORIGIN(RAM) + LENGTH(RAM);    /* end of RAM */
_sidata_ccmram = LOADADDR(.ccmram); /* 新增 */
// 手动复制FLASH中的数据到ccmram
void ccmram_init(void)
{
    extern uint32_t _sccmram;
    extern uint32_t _eccmram;
    extern uint32_t _sidata_ccmram;
    
    uint32_t *pSrc = &_sidata_ccmram;
    uint32_t *pDst = &_sccmram;
    
    while (pDst < &_eccmram) {
        *pDst++ = *pSrc++;
    }
}

在这里插入图片描述
3.使用

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

在这里插入图片描述
在这里插入图片描述
4.debug时可查看地址
在这里插入图片描述

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐