关于配置MCU从FLASH某一位置开始运行——以CH32V203为例
正常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链接脚本说明