通过build option 选项决定下载进入RAM还是FLASH
勾选下面的对好
则工程下面的箭头不见了
F2812_RAM_lNK.CMD 文件分析
综上BEGIN 是在H0 SARAM 中存放的 地址是0X3F8000 占用两个字
备注里说明 是 boot to h0 模式 入下所示
/* BEGIN is used for the "boot to HO" bootloader mode */
Ramfuns 是在PRAMH0 中 其实地址是0X3F8002 长度 0X00FFE
注意到:.text 放在PRAMH0中 (.text 段 存放编译生成的可执行代码)
.cinit 放在PRAMH0 中 (.cinit段 存放全局变量和静态变量的初始化数据)
.pinit 放在PRAMH0 中 ()
.SWITCH 放在PRAMH0中 (存放C语言switch 语句产生的跳转表)
另外 还用memory 指令 划分了 DRAM H0 空间
放在页面1 里面
还是在 HO SARAM 的空间里面(8K x 16 )
.ebss 在 DRAMH0 中
(.bss段 为全局变量和静态变量保留的空间,当程序启动的时候,在.cinit 空间中的数据会,由引导程序复制到.bss 空间中去,在大内存模式下,在远内存中定义的变量保留在空间.ebss段中)
.econst 在 DRAMH0 中
(const段,存放字符串常数及用const 限定的全局变量和静态变量的初始化数据
字符串常数以及const 用far 限定的时候,要存放在.econst 段中)
.esysmem 在 DRAM H0 中
RAMM1 是专们用来放堆栈的, 一般函数中的局部临时变量一般放在栈中, 还有 中断函数的调用 ,以及函数等待调用 保护现场 恢复现场 等操作 一般也放在堆栈中 处理
RESET 存储空间 用 memory 指令 指定存储空间
用section 指令 分配段 .reset 分配段到存储空间。
现在再来查看FLASH 的CMD 文件
之前是:
现在是
现在讨论对F2812 CMD 文件的详细解释:
用MEMORY 分配存储空间
BEGIN 的存储空间 起始地址 0x3f7ff6 长度 两个字
这个用的是 boot to flash 模式
/* Part of FLASHA. Used for "boot to Flash" bootloader mode. */
Section 指令部分
本f2812 .cmd 文件中 并 没有将 FLASH 中的程序拷贝到RAM 中运行的情况。
如果牵扯到 初始化 FLASH 的 这部分 分
必须用 CODE SECTION 伪指令 将 函数名 init falsh 生成到段 ramfuncs 中去。
然后 还需要 知名 ramfuncs 的 加载起始地址 加载结束地址, 运行起始地址
注意 加载地址是在 flash 中, 运行地址是在RAM 中。
同时在main 函数中 还要运行 memcopy 函数 复制flash 中的代码段 到 RAM中,。
然后在RAM 中执行。
在超级终端上输入一个字符 假设是’a’ ;超级终端会显示出你输入的字符,将工程在RAM中运行然后在FLASH中运行
原文:https://www.cnblogs.com/bailongwei654321/p/13510505.html