首页 > 其他 > 详细

在超级终端上输入一个字符 假设是’a’ ;超级终端会显示出你输入的字符,将工程在RAM中运行然后在FLASH中运行

时间:2020-08-15 23:09:05      阅读:117      评论:0      收藏:0      [点我收藏+]

通过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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!