打印
[STM32F1]

烧写到目标flash

[复制链接]
660|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jiahy|  楼主 | 2022-6-18 22:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
MDK编译环境,目标stm32f103,一般程序编译出来text(ro)段,data段,bss段等都在hex或者bin文件之中,烧写到目标的flash中,可是data段与bss(zi)段是怎么加载到SRAM(内存)中的

使用特权

评论回复
沙发
pengf| | 2022-6-18 22:59 | 只看该作者
有相关的代码吧

使用特权

评论回复
板凳
foxsbig| | 2022-6-19 14:54 | 只看该作者
是不是正点的例程讲过这里

使用特权

评论回复
地板
jiahy|  楼主 | 2022-7-4 19:57 | 只看该作者
我没发现相关的代码啊,数据段是怎么搬运到内存之中????

使用特权

评论回复
5
renyaq| | 2022-7-4 20:00 | 只看该作者
这个与运行的机制有关。。

使用特权

评论回复
6
jiahy|  楼主 | 2022-7-4 20:02 | 只看该作者

能稍微给我讲一下吗?
这编译器自动添加了搬运数据段的代码?

使用特权

评论回复
7
chuxh| | 2022-7-4 20:04 | 只看该作者
这个不是应用程序完成的,启动代码里应该讲的是这个

使用特权

评论回复
8
pengf| | 2022-7-4 20:06 | 只看该作者
你仿真,看一下汇编,不要直接停止在main函数,在执行main函数前有一段代码,编译器添加的

使用特权

评论回复
9
dengdc| | 2022-7-4 20:10 | 只看该作者
这个需要一段代码做搬运动作。通常这段代码是由编译器提供的。

使用特权

评论回复
10
zhenykun| | 2022-7-4 20:14 | 只看该作者
以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

使用特权

评论回复
11
yszong| | 2022-7-4 20:16 | 只看该作者
是否需要强制定义地址啊

使用特权

评论回复
12
renyaq| | 2022-7-4 20:19 | 只看该作者
跟烧写的方式有关系吗

使用特权

评论回复
13
wyjie| | 2022-7-4 20:21 | 只看该作者
这些都是由编译器分配的,我们需要做的只是下载就好了,使用者只需要编写程序就好了。

使用特权

评论回复
14
tian111| | 2022-7-4 20:24 | 只看该作者
这些都是由编译器分配的,我们需要做的只是下载就好了,使用者只需要编写程序就好了。

使用特权

评论回复
15
jiahy|  楼主 | 2022-7-4 20:24 | 只看该作者
唉,还是没有什么结果,算了,多谢大家啦

使用特权

评论回复
16
alxd| | 2022-7-27 15:25 | 只看该作者
编译器分配的,这个是内部操作

使用特权

评论回复
17
Charlene沙| | 2022-7-27 15:54 | 只看该作者
我觉得应该是单片机内部操作的吧

使用特权

评论回复
18
B1lanche| | 2022-7-27 16:08 | 只看该作者
单片机不是有指针之类的么,通过这种方式实现的吧

使用特权

评论回复
19
Candic12e| | 2022-7-27 16:40 | 只看该作者
你可以问问ST的技术支持,但是我觉得这种应该是有程序操作的

使用特权

评论回复
20
Belle1257| | 2022-7-27 17:05 | 只看该作者
可能是因为指针实现的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

862

主题

9861

帖子

4

粉丝