CH32V307启动文件data段与bss段的拷贝与Flash的配置问题

最近有个疑问,CH32V307系列的用户程序下载到Flash的零等待区,有种说法是存在同样大小的RAM,用于分割,一部分做RAM,一部分做Flash,Flash这部分代码厂商程序会自动将其上载至RAM。

那么用户程序相当于就烧录在RAM中了,读写速度已经可以了,为什么在启动文件中还要将data段和bss段拷贝至作为RAM的区域呢? 这样不是浪费空间吗,这块很很不理解,官方大大可以解释一下吗


2:
	/* Load data section from flash to RAM */
	la a0, _data_lma
	la a1, _data_vma
	la a2, _edata
	bgeu a1, a2, 2f
1:
	lw t0, (a0)
	sw t0, (a1)
	addi a0, a0, 4
	addi a1, a1, 4
	bltu a1, a2, 1b
2:
	/* Clear bss section */
	la a0, _sbss
	la a1, _ebss
	bgeu a0, a1, 2f
1:
	sw zero, (a0)
	addi a0, a0, 4
	bltu a0, a1, 1b


您好,RAM掉电数据会丢失,程序还是放在FLASH中的,只是上电运行时会将程序搬运到RAM,掉电后RAM中就没有数据了。


我精简一下我的问题,就是Flash整体会上载到ram,为什么启动文件中还做了一次data和bss的拷贝


您好,你可以这么理解,以64+256的配置为例,只有64K那块区域是真正的RAM,那256K可以理解为运行速度较快的FLASH,你需要将data段搬运到真正的RAM区域即那64K的RAM区域里面。后面沟通可通过邮箱(lzs@wch.cn)和我沟通


你好,请问程序dubug时它反复在下面这段代码里执行是怎么回事

	lw t0, (a0)
	sw t0, (a1)
	addi a0, a0, 4
	addi a1, a1, 4
	bltu a1, a2, 1b



您好,此处就是汇编代码在循环执行搬运。搬运结束就会跳出。


只有登录才能回复,可以选择微信账号登录