关于配置MCU从FLASH某一位置开始运行——以CH32V203为例

发布时间 2023-09-15 15:20:01作者: ZaiLi

正常MCU运行时,都是从FLASH 0起始地址开始运行,有时因为某些需要,需要配置从非0地址开始运行。以CH32V203为例(适用于其他CH32V系列),主要修改配置如下:

主要集中在ld文件的修改:

1、修改FLASH的分配,将FLASH分配成2块区域,如下图

/* CH32V20x_D6 - CH32V203K8-CH32V203C8-CH32V203G8-CH32V203F8 */

    FLASH1 (rx) : ORIGIN = 0x00000000, LENGTH = 16K
    FLASH (rx) : ORIGIN = 0x00004000, LENGTH = 48K
    
    RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 20K

 

2、修改初始化段,程序的入口,_start存放在该段,如下图

    .init :
    {
        _sinit = .;
        . = ALIGN(4);
        KEEP(*(SORT_NONE(.init)))
        . = ALIGN(4);
        _einit = .;
    } >FLASH1 AT>FLASH1

实际上FLASH分为两个区域,每个段都进行了修改,但由于此处第二部分FLASH区域使用原有的FLASH名称没有改变,因此ld文件中其他段不需要修改。

 

关于ld文件的介绍,想了解的朋友可参考下帖讲解:

RISC-V MCU CH32V307/CH32V203/CH32V003等 ld链接脚本说明