ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU

[STM32F1] 烧写到目标的flash

[复制链接]
37|11
 楼主 | 2018-10-11 16:08 | 显示全部楼层 |阅读模式
| 2018-10-11 16:13 | 显示全部楼层
有相关的代码吧
 楼主 | 2018-10-11 16:19 | 显示全部楼层
我没发现相关的代码啊,数据段是怎么搬运到内存之中????
| 2018-10-11 16:23 | 显示全部楼层
这个与运行的机制有关。。
 楼主 | 2018-10-11 16:26 | 显示全部楼层

能稍微给我讲一下吗?
这编译器自动添加了搬运数据段的代码?
| 2018-10-11 16:30 | 显示全部楼层
这个不是应用程序完成的,启动代码里应该讲的是这个
| 2018-10-11 16:33 | 显示全部楼层


你仿真,看一下汇编,不要直接停止在main函数,在执行main函数前有一段代码,编译器添加的
| 2018-10-11 16:42 | 显示全部楼层
这个需要一段代码做搬运动作。通常这段代码是由编译器提供的。
| 2018-10-11 16:47 | 显示全部楼层
以Keil为例。注意两个引入的符号:SystemInit和__main。SystemInit毫无疑问是C代码中提供的,而__main却在代码中找不到。代码中写的是main。
这种写法就是依赖Keil编译器提供的load代码来搬运。代码流程:
__main --> __scatterload .......
           --> main

Reset_Handler    PROC
                 EXPORT  Reset_Handler             [WEAK]
        IMPORT  SystemInit
        IMPORT  __main

                 LDR     R0, =SystemInit
                 BLX     R0
                 LDR     R0, =__main
                 BX      R0
                 ENDP

实际上,也可以自己写代码做搬运动作。
写法:
                 LDR     R0, =SystemInit
                 BLX     R0
                 ;Write your own load code here
                 LDR     R0, =main
                 BX      R0
                 ENDP


这时就需要了解,在编译完成的Image中,Load View和Execute View的概念。
链接器在链接的时候会生成每个section的符号:Base,Length,Limit之类。load代码需要根据这些符号确定搬运的源地址、目的地址,以及长度。
具体可以查阅Keil帮助的Linker及Scatter file章节。
3.3 Load View and Execution View of an Image
6.4 Image$$ execution region symbols
6.5 Load$$LR$$ load region symbols
 楼主 | 2018-10-11 16:50 | 显示全部楼层
结贴了,多谢大家讨论这么多哈,呵呵
| 2018-10-11 17:02 | 显示全部楼层
是否需要强制定义地址啊
| 2018-10-12 11:11 | 显示全部楼层
跟烧写的方式有关系吗
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

快速回复 返回顶部 返回列表