历史上的今天
返回首页

历史上的今天

今天是:2025年08月14日(星期四)

正在发生

2018年08月14日 | MDK开发环境STM32启动文件_main函数分析

2018-08-14 来源:eefocus

========================================================================

** Section #1 'ER_IROM1' (SHT_PROGBITS) [SHF_ALLOC + SHF_EXECINSTR]

    Size   : 1008 bytes (alignment 4)

    Address: 0x08000000


    $d.realdata

    RESET

    __Vectors                                                                               ;向量表起始地址

        0x08000000:    20000460    `..     DCD    536872032                                 ;栈顶指针地址0x20000460

        0x08000004:    08000369    i...    DCD    134218601                                 ;Reset_Handler地址

        0x08000008:    08000371    q...    DCD    134218609

        0x0800000c:    08000373    s...    DCD    134218611

        0x08000010:    08000375    u...    DCD    134218613

        0x08000014:    08000377    w...    DCD    134218615

        0x08000018:    08000379    y...    DCD    134218617


        ...


    $t

    .ARM.Collect$$$$00000000

    .ARM.Collect$$$$00000001

    __Vectors_End                                                                           ;向量表结束                       

    __main

    _main_stk

        0x08000130:    f8dfd00c    ....    LDR      sp,__lit__00000000 ; [0x8000140] = 0x20000460

    .ARM.Collect$$$$00000004                                                                ;设置栈顶指针

    _main_scatterload

        0x08000134:    f000f92a    ..*.    BL       __scatterload ; 0x800038c               ;跳转到__scatterload

    .ARM.Collect$$$$00000008

    .ARM.Collect$$$$0000000A

    .ARM.Collect$$$$0000000B

    __main_after_scatterload

    _main_clock

    _main_cpp_init

    _main_init

        0x08000138:    4800        .H      LDR      r0,[pc,#0] ; [0x800013c] = 0x8000145    ;跳转到main函数, 0x0800013c

        0x0800013a:    4700        .G      BX       r0

    $d

        0x0800013c:    08000145    E...    DCD    134218053

    .ARM.Collect$$$$00002712

    __lit__00000000

    .ARM.Collect$$$$0000000D

    .ARM.Collect$$$$0000000F

    __rt_final_cpp

    __rt_final_exit

        0x08000140:    20000460    `..     DCD    536872032

    $t

    .text

    main                                                                                    ;main函数  

        0x08000144:    bf00        ..      NOP      

        0x08000146:    bf00        ..      NOP      

        0x08000148:    2003        .       MOVS     r0,#3

        0x0800014a:    490c        .I      LDR      r1,[pc,#48] ; [0x800017c] = 0x20000000

        ...


    SystemInit                                                                              ;SystemInit函数                                                 

        0x08000266:    b510        ..      PUSH     {r4,lr}                             

        0x08000268:    4836        6H      LDR      r0,[pc,#216] ; 

        ...


    .text

    Reset_Handler

        0x08000368:    4806        .H      LDR      r0,[pc,#24] ; [0x8000384] = 0x8000267   ;加载SystemInit函数地址到R0,0x08000267

        0x0800036a:    4780        .G      BLX      r0                                      ;跳转到SystemInit

        0x0800036c:    4806        .H      LDR      r0,[pc,#24] ; [0x8000388] = 0x8000131   ;加载_main函数地址到R0,0x8000131

        0x0800036e:    4700        .G      BX       r0                                      ;跳转到_main

    ```

    $d

        0x08000384:    08000267    g...    DCD    134218343

        0x08000388:    08000131    1...    DCD    134218033

    $t

    .text

    __scatterload

    __scatterload_rt2                                                                       

                                                                                            ;在RO段最后一部分,0x80003d0 - 0x80003f0存储的是

                                                                                            ;RW和ZI段的加载域、存储域地址、段长度、以及RW段拷贝

                                                                                            ;__scatterload_copy、ZI清零__scatterload_zeroinit

                                                                                            ;函数的地址

        0x0800038c:    4c06        .L      LDR      r4,[pc,#24] ; [0x80003a8] = 0x80003d0   ;R4 = 0x80003d0, Region$$Table的起始地址

        0x0800038e:    4d07        .M      LDR      r5,[pc,#28] ; [0x80003ac] = 0x80003f0 ;R5 = 0x80003f0, Region$$Table的结束地址

        0x08000390:    e006        ..      B        0x80003a0 ; __scatterload + 20          

        0x08000392:    68e0        .h      LDR      r0,[r4,#0xc]                            ;加载R4+0xC地址的值到R0,RW段拷贝或ZI清零函数的地址

        0x08000394:    f0400301    @...    ORR      r3,r0,#1                                ;R3 = [R0] | 0x1, R0最低位置1,给R3

        0x08000398:    e8940007    ....    LDM      r4,{r0-r2}                              ;加载RW或ZI段的加载域、运行域地址以及段长度 到R0 R1 R2

        0x0800039c:    4798        .G      BLX      r3                                      ;跳转到RW段拷贝或ZI清零函数

        0x0800039e:    3410        .4      ADDS     r4,r4,#0x10                             ;段拷贝完成后,开始进行ZI清零, R4 + 0x10

        0x080003a0:    42ac        .B      CMP      r4,r5                                   ;比较R4, R5

        0x080003a2:    d3f6        ..      BCC      0x8000392 ; __scatterload + 6           ;R4 R5不相等时,跳转到0x8000392

        0x080003a4:    f7fffec8    ....    BL       __main_after_scatterload ; 0x8000138    ;RW段拷贝和ZI段清零完成后,进入main函数

    $d

        0x080003a8:    080003d0    ....    DCD    134218704

        0x080003ac:    080003f0    ....    DCD    134218736

    $t

    i.__scatterload_copy

    __scatterload_copy

        0x080003b0:    e002        ..      B        0x80003b8 ; __scatterload_copy + 8

        0x080003b2:    c808        ..      LDM      r0!,{r3}                                ;R0为RW段加载域地址, R3 = [R0], R0 = R0 + 4

        0x080003b4:    1f12        ..      SUBS     r2,r2,#4                                ;R2为RW段数据长度, R2减4

        0x080003b6:    c108        ..      STM      r1!,{r3}                                ;R1为RW段运行域地址, R3值写入R1地址

        0x080003b8:    2a00        .*      CMP      r2,#0                                   ;R2为剩余待拷贝RW段长度

        0x080003ba:    d1fa        ..      BNE      0x80003b2 ; __scatterload_copy + 2      ;拷贝未完成,继续拷贝

        0x080003bc:    4770        pG      BX       lr                                      ;返回0x0800039F

    i.__scatterload_null

    __scatterload_null

        0x080003be:    4770        pG      BX       lr

    i.__scatterload_zeroinit

    __scatterload_zeroinit          

        0x080003c0:    2000        .       MOVS     r0,#0

        0x080003c2:    e001        ..      B        0x80003c8 ; __scatterload_zeroinit + 8  

        0x080003c4:    c101        ..      STM      r1!,{r0}                                ;R0的值写入R1地址, R1 + 4

        0x080003c6:    1f12        ..      SUBS     r2,r2,#4                                ;R2为ZI段数据长度, R2减4

        0x080003c8:    2a00        .*      CMP      r2,#0                                   ;R2为剩余待清零的数据长度

        0x080003ca:    d1fb        ..      BNE      0x80003c4 ; __scatterload_zeroinit + 4  ;清零未完成,继续

        0x080003cc:    4770        pG      BX       lr                                      ;返回0x0800039F               

        0x080003ce:    0000        ..      MOVS     r0,r0

    $d.realdata

    Region$$Table$$Base

        0x080003d0:    080003f0    ....    DCD    134218736                                 ;加载域RW段地址

        0x080003d4:    20000000    ...     DCD    536870912                                 ;运行域RW段地址

        0x080003d8:    0000001c    ....    DCD    28                                        ;RW段长度

        0x080003dc:    080003b0    ....    DCD    134218672                                 ;__scatterload_copy函数地址

        0x080003e0:    0800040c    ....    DCD    134218764                                 ;加载域结束地址

        0x080003e4:    2000001c    ...     DCD    536870940                                 ;运行域ZI段地址

        0x080003e8:    00000444    D...    DCD    1092                                      ;ZI段长度

        0x080003ec:    080003c0    ....    DCD    134218688                                 ;__scatterload_zeroinit函数地址

    Region$$Table$$Limit


   Section #2 'RW_IRAM1' (SHT_PROGBITS) [SHF_ALLOC + SHF_WRITE]                             ;RW段地址0x20000000, 长度28 bytes

    Size   : 28 bytes (alignment 4)

    Address: 0x20000000


   Section #3 'RW_IRAM1' (SHT_NOBITS) [SHF_ALLOC + SHF_WRITE]                               ;ZI段地址0x2000001c, 长度1092 bytes

    Size   : 1092 bytes (alignment 8)

    Address: 0x2000001c


推荐阅读

史海拾趣

Esc Electronics Corp公司的发展小趣事

Esc Electronics Corp(简称Esc)在成立的初期,以其独特的技术突破在电子行业中崭露头角。公司研发出一款高效能、低成本的电子元件,成功吸引了市场的注意。随着产品的不断迭代和技术的持续创新,Esc的产品线逐渐丰富,市场份额也逐步扩大。公司凭借技术优势和敏锐的市场洞察力,成功开拓了多个新的市场领域。

Belkin公司的发展小趣事

随着电子行业的快速发展,贝尔金也紧跟时代步伐,不断进行技术革新和产品线拓展。2002年,贝尔金为苹果Dock连接器研发了一系列产品,包括汽车套件、电池组、读卡器等,这标志着它与苹果公司的深度合作开始。此后,贝尔金逐渐成为苹果官方合作配件制造商,其产品在苹果用户中享有很高的声誉。

Elpida Memory公司的发展小趣事

尽管有政府的支持,但Elpida Memory的经营状况并未得到根本性的改善。在经历了多年的亏损和重组后,Elpida Memory最终于2012年被美国的美光科技(Micron Technology)收购。这一收购标志着Elpida Memory正式退出了日本半导体产业的舞台,但也为其未来的发展提供了新的机遇。

Aerotronics Marketing Inc公司的发展小趣事

随着国内市场的逐步饱和,Aerotronics Marketing Inc公司积极寻求国际市场的拓展。公司通过参加国际电子展会、建立海外销售网络、开展国际贸易合作等方式,成功将产品打入国际市场。这一举措不仅为公司带来了更多的商机,还提升了公司的国际影响力,实现了跨越式发展。

Andigilog公司的发展小趣事

Aerotronics Marketing Inc公司注重企业文化建设和团队建设,通过营造积极向上的工作氛围和提供广阔的发展平台,吸引了大量优秀人才的加入。公司注重员工的培训和成长,为员工提供多样化的职业发展路径。同时,公司还积极开展团队建设活动,增强员工的归属感和凝聚力。这种企业文化和团队建设为公司的发展提供了有力的保障。


请注意,这些故事是基于一般性的电子行业和公司发展情况进行构想的,可能与Aerotronics Marketing Inc公司的实际情况存在差异。如果需要更具体、准确的故事,建议您直接查阅该公司的官方网站、新闻报道或相关资料。

台湾固锝(GD)公司的发展小趣事
通过合理设计反馈电路和保护电路,确保放大器的稳定性和可靠性。

问答坊 | AI 解惑

用CPLD实现结构简单的键盘控制器

本帖最后由 paulhyde 于 2014-9-15 08:55 编辑 用CPLD实现结构简单的键盘控制器  …

查看全部问答>

国半大师的经典巨著《Troubleshooting_Analog_Circuits》

本帖最后由 dontium 于 2015-1-23 11:34 编辑 国半大师的经典之作呃,详细讲了模拟电路的故障诊断。呵呵,我后来全部打印下来看了,国内翻译的不太好,英文原著还是相当的不错的撒,呵呵,分享下。 …

查看全部问答>

正激式开关电源变压器参数的计算 开关电源原理与设计(连载16)

1-6-3-2.正激式开关电源变压器参数的计算 正激式开关电源变压器参数的计算主要从这几个方面来考虑。一个是变压器初级线圈的匝数和伏秒容量,伏秒容量越大变压器的励磁电流就越小;另一个是变压器初、次级线圈的匝数比,以及变压器各个绕组的额定 ...…

查看全部问答>

S3C2440 WINCE 5.0上SD接口的WIFI驱动移植上去了,可以检测到网卡,但是搜不到网络

好不容易才把WIFI驱动移植进去,但是现在搜不到网络,但是用笔记本可以一下子搜到很多。 我的WIFI是接外置天线的,就是把一根比较长的天线焊在上面,我不知接之后是否还要考虑信号问题。 用的WIFI型号叫GM9601,是基于MARVELL 8686的。它的数据手 ...…

查看全部问答>

DDS+PLL是目前实用的频率合成方式么?

目前在无线电收发方面常用的频率合成方式有哪些呢?希望在该领域有经验的大虾推荐一些。…

查看全部问答>

推送全国的报告怎么写,有人会么

本帖最后由 paulhyde 于 2014-9-15 03:54 编辑 RT…………  …

查看全部问答>

AT89C51与三菱D700变频器通讯

哪位高手有AT89C51与三菱D700变频器通讯的汇编程序.......…

查看全部问答>

【设计工具】ISE使用指导,适合初学者

初学者的ISE使用指导,希望对大家有所帮助.   …

查看全部问答>

驱动入门

驱动入门:一个简单的字符设备驱动            首先我要向大家推荐一下韦东山老师的视频,他在视频里讲解的非常的好,把代码分析的非常的透彻,而且他会在视频里现场写出每一个程序的代码,而不是从其他的地方拿一 ...…

查看全部问答>