MDK开发环境STM32启动文件_main函数分析

发布者:快乐航程最新更新时间:2018-08-14 来源: eefocus关键字:MDK  开发环境  STM32  启动文件  main函数 手机看文章 扫描二维码
随时随地手机看文章

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

** 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


关键字:MDK  开发环境  STM32  启动文件  main函数 引用地址:MDK开发环境STM32启动文件_main函数分析

上一篇:ucOS_II移植:Stm32启动代码分析
下一篇:STM32启动文件——startup_stm32f10x_hd.s

推荐阅读最新更新时间:2024-03-16 16:10

STM32常用通信——USART,IIC,SPI,CAN
STM32常用通信 CAN通信 CAN根据两根线上电位差来判断总线电平,总线电平分为显性电平和隐形电平,两者必居其一,发送方通过控制总线电平发送信息给接收方。 显性电平对应逻辑0,两根线压差2.5V左右,隐形电平对应逻辑1,压差为0。总线上可以挂很多单元,显性电平具有优先权,一个单元显性电平,则总线为显性。CAN总线起止断有120R的电阻,用于做阻抗匹配,减少回波反射。 CAN的位时序: 同步段SS SS 传播时间段PTS 相位缓冲段1 PBS1 BS1 相位缓冲段2 PBS2 BS2 1位分为四段,每段由若干Tq组成, 波特率=1/(Tq+TBS1+TBS2) TBS1=Tq*(TS1 +1) TBS2=T
[单片机]
STM32学习之传感器篇——DHT11温湿度传感器
1、DHT11传感器简介 DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性和卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式存在OTP内存中,传感器内部在检测型号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,使其成为该类应用甚至最为苛刻的应用场合的最佳选择。产品为4针单排引脚封装,连接方便。
[单片机]
<font color='red'>STM32</font>学习之传感器篇——DHT11温湿度传感器
MSP430 学习经验总结——MSP430开发环境建立
1.安装IARdormsp430软件,软件带USB仿真器的驱动。 2.插入USB仿真器,驱动选择安装目录的/drivers/TIUSBFET 3.建立一个工程,选择 option 选项,设置 a、选择器件,在 General 项的 Target 标签选择目标器件 b、选择输出仿真,在 Linker 项里的 Output 标签,选择输出 DebuginformationforC-SPY ,以输出调试 信息用于仿真。 c、若选择 Other ,Output下拉框选择 zax-m 即可以输出hex文件用以烧录,注意,此时仿真不了。 d、选择 Debugger 项的 Setup 标签, Driver 下拉框选择
[单片机]
STM32 YMODEM实现bootloader
这几天一直在尝试学STM32 bootloader,在网上查阅了一番,发现实现方法不计其数。于是自己有了想动手实现一番的欲望。 下面请听我细细道来,我选用的芯片是STM32F103ZE系类,该芯片是512k,每页是2k的。 接下来就是你要重点了: 其实bootloader说白了,就是在原有APP程序 再加上另一段程序---bootloader,这个bootloader可以对你flash进行擦写操作。 那么关于STM32具体实现BOOTLOADER步骤是怎么样的呢? 下面我就具体几个细节之处谈谈: 1,如何实现在APP程序跳转到BOOTLOADER程序. 2,既然APP程序可以跳转到bootloader,那么反之也是可以的。
[单片机]
STM32 串口通信(库函数操作)
1.说在前面: 清明三天小假期,放松一下无可厚非,但是,依旧要完成自己的学习任务 2.串口通信的简单介绍: 1.将串口作为一个沟通的渠道,可以和外界进行接收和发送信号 2.STM32和串口相关的寄存器: 2-1:USART_SR(状态寄存器):存储着MCU的一些状态 2-2:USART_DR(数据寄存器):暂存着一些数据信息 2-3:USART_BRR(波特率寄存器:暂存波特率信息 2-4:USART_CRI(控制寄存器):用于给usart进行使能 3.注:波特率的计算方法: 只要给出相应的时钟频率和设置usartdiv,就可以计算出波特率 3.串口通讯的简单配置和使用 1.其实基
[单片机]
<font color='red'>STM32</font> 串口通信(库<font color='red'>函数</font>操作)
SPARC V8结构嵌入式微处理器开发环境的设计实现
SPARC V8 ( Sc a l a b l e Pr o c e s s o rArchitecture V8)是Sun Microsystems 提出的一种32位RISC微处理器结构,此结构的处理器具有指令系统简单、采用硬布线控制逻辑、处理能力强、速度快、可靠性高等特点,基于这些特点,SPARC结构处理器现在被广泛地应用于UNIX工作站、服务器等稳定性要求很高的环境中。随着SPARC V8结构处理器越来越广泛的应用,如何搭建此结构微处理器的软件和硬件开发环境是一个值得研究的课题,本文中详细地阐述了开发环境的硬件平台设计方案和软件集成开发环境设计思路。   SPARC V8结构嵌入式微处理器的硬件开发环境设计硬件开发环境以
[单片机]
意法半导体stm32系列芯片的省电原因
stm32所有寄存器都需要时钟才能配置,寄存器是由D触发器组成的,只有送来了时钟,触发器才能被改写值。 任何MCU的任何外设都需要有时钟,8051也是如此;STM32为了让用户更好地掌握功耗,对每个外设的时钟都设置了开关,让用户可以精确地控制,关闭不需要的设备,达到节省供电的目的。 51单片机不用配置IO时钟,只是因为默认使用同一个时钟,这样是方便,但是这样的话功耗就降低不了。 例如,某个功能不需要,但是它还是一直运行。 STM32需要配置时钟,就可以把不需要那些功能的功耗去掉。 当你想关闭某个IO的时候,关闭它想对应的时钟使能就是了,不过在51里面,在使用IO的时候是没有设置IO的时钟的,还有在STM32中,
[嵌入式]
STM32的IO外部中断EXTI的使用
一、前言 在之前针对 STM32 的G PI O相关API函数及配置使用进行了详细的介绍,GPIO作为输入引脚时,调用相关读 信号 引脚函数接口就可以在程序的循环中,轮询的对输入信号进行读取 检测 操作,除了轮询的方式访问输入引脚,还可以通过另外一种叫做外部中断的方式来对引脚的输入信号进行检测,本篇首先介绍下EX TI 的结构,接着介绍外部中断的相关概念,对STM32的IO外部中断EXTI有个初步的了解,在此基础上重点围绕IO外部中断EXTI的使用展开分析。 图1 外部中断设计 二、EXTI结构 EXTI(Ex te rnal interrupt/event controller)—外部中断/事件 控制器 ,管理了控制器的
[单片机]
<font color='red'>STM32</font>的IO外部中断EXTI的使用
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved