john_lee 发表于 2014-10-24 14:21
DATA (RW) : ORIGIN = ...., LENGTH = .... 是定义memory area,但你给出 LENGTH 为 0 是不正确的。
...
是的,启动代码里没有复制LMA到VMA的过程。
但是这个步骤似乎也不是必要步骤,因为我的TEST等段也没有做放到内存里去运行,说明这块芯片的flash应该是支持读写。
于是我试了试把BSS段和DATA段放在flash里,编译出来也是正常的8K。
GLOBAL_BSS (RW) : ORIGIN = AFTER(TEXT), LENGTH = 0x00001000
DATA (RW) : ORIGIN = AFTER(GLOBAL_BSS), LENGTH = 0x00001000
BSS (RW) : ORIGIN = AFTER(DATA), LENGTH = 0x00001000
把DATA段虚拟到内存里和直接放在flash的区别,应该就是放在内存里的数组初始值会掉电清零、而flash里的数组初始值不会掉电清零。
不知道我这样理解的对不对? |