打印

GD32F20x在keil下的启动文件和生成的.map文件分析

[复制链接]
3839|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
user110|  楼主 | 2016-1-22 17:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
;/**
;  ******************************************************************************
;  * @file    startup_gd32f20x_cl.s
;  * @author  MCU SD
;  * @version V1.0.0
;  * @date    15-Jul-2015
;  * @brief   gd32f20x startup code.
;  ******************************************************************************
;  */

;/* <<< Use Configuration Wizard in Context Menu >>>                                                        */

; Amount of memory (in bytes) allocated for Stack and Heap
; Tailor those values to your application needs
;// <h> Stack Configuration
;//   <o> Stack Size (in Bytes) <0-8192:8>
;// </h>
Stack_Size          EQU     0x400   ;定义栈的大小
                  ;伪指令AREA定义一个段,段名为STACK,NOINIT表示未初始化,READWRITE可读写,按照8(2^3)字节对齐
                    AREA    STACK, NOINIT, READWRITE, ALIGN = 3
Stack_Mem           SPACE   Stack_Size    ;分配连续 Stack_Size 字节的存储单元并初始化为 0
__initial_sp                          ;栈顶地址

;// <h> Heap Configuration
;//   <o>  Heap Size (in Bytes) <0-4096:8>
;// </h>
Heap_Size           EQU     0x200  ;定义堆的大小
             ;伪指令AREA定义一个段,段名为HEAP,NOINIT表示未初始化,READWRITE可读写,按照8(2^3)字节对齐
                    AREA    HEAP, NOINIT, READWRITE, ALIGN = 3
__heap_base  ;堆首地址
Heap_Mem            SPACE   Heap_Size   ;分配连续 Heap_Size 字节的存储单元并初始化为 0
__heap_limit  ;堆末地址


                    PRESERVE8   ;指示编译器8字节对齐
                    THUMB  ;告诉编译器以后的指令为THUMB指令

; Vector table entries with the exceptions ISR address
                    AREA    RESET, DATA, READONLY  ;只读数据段定义
                    EXPORT  __Vectors     ;EXPORT定义一个全局标号__Vectors,这个标号可以在其他文件中引用
                    EXPORT  __Vectors_End  ;EXPORT定义一个全局标号__Vectors_End,这个标号可以在其他文件中引用
                    EXPORT  __Vectors_Size

__Vectors           DCD     __initial_sp                      ; Top of Stack  //DCD命令分配存储空间,并初始化为栈顶指针__initial_sp
                    DCD     Reset_Handler                     ; Vector Number 1,Reset Handler
                    DCD     NMI_Handler                       ; Vector Number 2,NMI Handler
                    DCD     HardFault_Handler                 ; Vector Number 3,Hard Fault Handler
                    DCD     MemManage_Handler                 ; Vector Number 4,MPU Fault Handler
                    DCD     BusFault_Handler                  ; Vector Number 5,Bus Fault Handler
                    DCD     UsageFault_Handler                ; Vector Number 6,Usage Fault Handler
                    DCD     0                                 ; Reserved
                    DCD     0                                 ; Reserved
                    DCD     0                                 ; Reserved
                    DCD     0                                 ; Reserved
                    DCD     SVC_Handler                       ; Vector Number 11,SVCall Handler
                    DCD     DebugMon_Handler                  ; Vector Number 12,Debug Monitor Handler
                    DCD     0                                 ; Reserved
                    DCD     PendSV_Handler                    ; Vector Number 14,PendSV Handler
                    DCD     SysTick_Handler                   ; Vector Number 15,SysTick Handler

                    ; External Interrupts
                    DCD     WWDG_IRQHandler                   ; Vector Number 16,Window Watchdog
                    DCD     LVD_IRQHandler                    ; Vector Number 17,LVD through EXTI Line detect
                    DCD     TAMPER_IRQHandler                 ; Vector Number 18,Tamper Interrupt   
                    DCD     RTC_IRQHandler                    ; Vector Number 19,RTC through EXTI Line
                    DCD     FMC_IRQHandler                    ; Vector Number 20,FMC
                    DCD     RCC_IRQHandler                    ; Vector Number 21,RCC
                    DCD     EXTI0_IRQHandler                  ; Vector Number 22,EXTI Line 0
                    DCD     EXTI1_IRQHandler                  ; Vector Number 23,EXTI Line 1
                    DCD     EXTI2_IRQHandler                  ; Vector Number 24,EXTI Line 2
                    DCD     EXTI3_IRQHandler                  ; Vector Number 25,EXTI Line 3
                    DCD     EXTI4_IRQHandler                  ; Vector Number 26,EXTI Line 4
                    DCD     DMA1_Channel1_IRQHandler          ; Vector Number 27,DMA1 Channel 1
                    DCD     DMA1_Channel2_IRQHandler          ; Vector Number 28,DMA1 Channel 2
                    DCD     DMA1_Channel3_IRQHandler          ; Vector Number 29,DMA1 Channel 3
                    DCD     DMA1_Channel4_IRQHandler          ; Vector Number 30,DMA1 Channel 4
                    DCD     DMA1_Channel5_IRQHandler          ; Vector Number 31,DMA1 Channel 5
                    DCD     DMA1_Channel6_IRQHandler          ; Vector Number 32,DMA1 Channel 6
                    DCD     DMA1_Channel7_IRQHandler          ; Vector Number 33,DMA1 Channel 7
                    DCD     ADC1_2_IRQHandler                 ; Vector Number 34,ADC1 and ADC2
                    DCD     CAN1_TX_IRQHandler                ; Vector Number 35,CAN1 TX
                    DCD     CAN1_RX0_IRQHandler               ; Vector Number 36,CAN1 RX0
                    DCD     CAN1_RX1_IRQHandler               ; Vector Number 37,CAN1 RX1
                    DCD     CAN1_SCE_IRQHandler               ; Vector Number 38,CAN1 SCE
                    DCD     EXTI9_5_IRQHandler                ; Vector Number 39,EXTI Line 9..5
                    DCD     TIMER1_BRK_TIMER9_IRQHandler      ; Vector Number 40,TIMER1 Break and TIMER9 global
                    DCD     TIMER1_UP_TIMER10_IRQHandler      ; Vector Number 41,TIMER1 Update and TIMER10 global
                    DCD     TIMER1_TRG_COM_TIMER11_IRQHandler ; Vector Number 42,TIMER1 Break, Update, Trigger and Commutation and TIMER11 global
                    DCD     TIMER1_CC_IRQHandler              ; Vector Number 43,TIMER1 Capture Compare
                    DCD     TIMER2_IRQHandler                 ; Vector Number 44,TIMER2
                    DCD     TIMER3_IRQHandler                 ; Vector Number 45,TIMER3
                    DCD     TIMER4_IRQHandler                 ; Vector Number 46,TIMER4
                    DCD     I2C1_EV_IRQHandler                ; Vector Number 47,I2C1 Event
                    DCD     I2C1_ER_IRQHandler                ; Vector Number 48,I2C1 Error
                    DCD     I2C2_EV_IRQHandler                ; Vector Number 49,I2C2 Event
                    DCD     I2C2_ER_IRQHandler                ; Vector Number 50,I2C1 Error
                    DCD     SPI1_IRQHandler                   ; Vector Number 51,SPI1
                    DCD     SPI2_IRQHandler                   ; Vector Number 52,SPI2
                    DCD     USART1_IRQHandler                 ; Vector Number 53,USART1
                    DCD     USART2_IRQHandler                 ; Vector Number 54,USART2
                    DCD     USART3_IRQHandler                 ; Vector Number 55,USART3
                    DCD     EXTI15_10_IRQHandler              ; Vector Number 56,External Line[15:10]
                    DCD     RTCAlarm_IRQHandler               ; Vector Number 57,RTC Alarm through EXTI Line
                    DCD     OTG_FS_WKUP_IRQHandler            ; Vector Number 58,USB OTG FS WakeUp from suspend through EXTI Line
                    DCD            TIMER8_BRK_TIMER12_IRQHandler     ; Vector Number 59,TIMER8 Break Interrupt and TIMER12 global
                    DCD            TIMER8_UP_TIMER13_IRQHandler      ; Vector Number 60,TIMER8 Update Interrupt and TIMER13 global
                    DCD            TIMER8_TRG_COM_TIMER14_IRQHandler ; Vector Number 61,TIMER8 Trigger and Commutation Interrupt and TIMER14
                    DCD            TIMER8_CC_IRQHandler              ; Vector Number 62,TIMER8 Capture Compare
                    DCD     ADC3_IRQHandler                   ; Vector Number 63,ADC3
                    DCD            EXMC_IRQHandler                   ; Vector Number 64,EXMC
                    DCD     SDIO_IRQHandler                   ; Vector Number 65,SDIO
                    DCD     TIMER5_IRQHandler                 ; Vector Number 66,TIMER5
                    DCD     SPI3_IRQHandler                   ; Vector Number 67,SPI3
                    DCD     UART4_IRQHandler                  ; Vector Number 68,UART4
                    DCD     UART5_IRQHandler                  ; Vector Number 69,UART5
                    DCD     TIMER6_IRQHandler                 ; Vector Number 70,TIMER6
                    DCD     TIMER7_IRQHandler                 ; Vector Number 71,TIMER7
                    DCD     DMA2_Channel1_IRQHandler          ; Vector Number 72,DMA2 Channel1
                    DCD     DMA2_Channel2_IRQHandler          ; Vector Number 73,DMA2 Channel2
                    DCD     DMA2_Channel3_IRQHandler          ; Vector Number 74,DMA2 Channel3
                    DCD     DMA2_Channel4_IRQHandler          ; Vector Number 75,DMA2 Channel4
                    DCD     DMA2_Channel5_IRQHandler          ; Vector Number 76,DMA2 Channel5
                    DCD     ETH_IRQHandler                    ; Vector Number 77,Ethernet
                    DCD     ETH_WKUP_IRQHandler               ; Vector Number 78,Ethernet Wakeup through EXTI line
                    DCD     CAN2_TX_IRQHandler                ; Vector Number 79,CAN2 TX
                    DCD     CAN2_RX0_IRQHandler               ; Vector Number 80,CAN2 RX0
                    DCD     CAN2_RX1_IRQHandler               ; Vector Number 81,CAN2 RX1
                    DCD     CAN2_SCE_IRQHandler               ; Vector Number 82,CAN2 SCE
                    DCD     OTG_FS_IRQHandler                 ; Vector Number 83,USB OTG FS
                    DCD     0                                 ; Vector Number 84,Reserved
                    DCD     DMA2_Channel6_IRQHandler          ; Vector Number 85,DMA2 Channel6
                    DCD     DMA2_Channel7_IRQHandler          ; Vector Number 86,DMA2 Channel7
                    DCD     USART6_IRQHandler                 ; Vector Number 87,USART6
                    DCD     I2C3_EV_IRQHandler                ; Vector Number 88,I2C3 Event
                    DCD     I2C3_ER_IRQHandler                ; Vector Number 89,I2C3 Error
                    DCD     0                                 ; Vector Number 90,Reserved
                    DCD     0                                 ; Vector Number 91,Reserved
                    DCD     0                                 ; Vector Number 92,Reserved
                    DCD     0                                 ; Vector Number 93,Reserved
                    DCD     DCI_IRQHandler                    ; Vector Number 94,DCI                                            
                    DCD     CRYP_IRQHandler                   ; Vector Number 95,CRYP                                      
                    DCD     HASH_RNG_IRQHandler               ; Vector Number 96,Hash and Rng
                    DCD     0                                 ; Vector Number 97,Reserved
                    DCD     UART7_IRQHandler                  ; Vector Number 98,UART7
                    DCD     UART8_IRQHandler                  ; Vector Number 99,UART8
                    DCD     0                                 ; Vector Number 100,Reserved
                    DCD     0                                 ; Vector Number 101,Reserved
                    DCD     0                                 ; Vector Number 102,Reserved
                    DCD     0                                 ; Vector Number 103,Reserved
                    DCD     TLDI_IRQHandler                   ; Vector Number 104,TLDI
                    DCD     TLDI_ER_IRQHandler                ; Vector Number 105,TLDI error
__Vectors_End

__Vectors_Size      EQU  __Vectors_End - __Vectors
沙发
user110|  楼主 | 2016-1-22 17:12 | 只看该作者
                AREA    |.text|, CODE, READONLY   ;代码段定义

;利用PROC、ENDP这一对伪指令把程序段分为若干个过程,使程序的结构加清晰
; Reset handler routine
Reset_Handler       PROC
                    EXPORT  Reset_Handler                     [WEAK] ;[WEAK] 弱定义,意思是如果在别处也定义该标号(函数),在链接时用别处的地址。
                    ;如果没有其它定方定义,编译器也不报错,以此处地址进行链接
                    IMPORT  __main   ;IMPORT通知编译器要使用的标号在其他文件
                    IMPORT  SystemInit  
                    LDR     R0, =SystemInit ;装载函数地址SystemInit到寄存器,SystemInit用于时钟初始化
                    BLX     R0
                    LDR     R0, =__main ;_main为运行时库提供的函数;完成堆栈,堆的初始话等工作,会调用下面定义的__user_initial_stackheap
                    ;并在最后跳转到用户自定义的main()函数,来到C的世界
                    BX      R0
                    ENDP

; Dummy Exception Handlers
NMI_Handler         PROC
                    EXPORT  NMI_Handler                         [WEAK]
                    B       .
                    ENDP

HardFault_Handler   PROC
                    EXPORT  HardFault_Handler                   [WEAK]
                    B       .
                    ENDP

MemManage_Handler   PROC
                    EXPORT  MemManage_Handler                   [WEAK]
                    B       .
                    ENDP

BusFault_Handler    PROC
                    EXPORT  BusFault_Handler                    [WEAK]
                    B       .
                    ENDP

UsageFault_Handler  PROC
                    EXPORT  UsageFault_Handler                  [WEAK]
                    B       .
                    ENDP

SVC_Handler         PROC
                    EXPORT  SVC_Handler                         [WEAK]
                    B       .
                    ENDP

DebugMon_Handler    PROC
                    EXPORT  DebugMon_Handler                    [WEAK]
                    B       .
                    ENDP

PendSV_Handler      PROC
                    EXPORT  PendSV_Handler                      [WEAK]
                    B       .
                    ENDP

SysTick_Handler     PROC
                    EXPORT  SysTick_Handler                     [WEAK]
                    B       .
                    ENDP

Default_Handler     PROC
                    EXPORT  WWDG_IRQHandler                     [WEAK]
                    EXPORT  LVD_IRQHandler                      [WEAK]
                    EXPORT  TAMPER_IRQHandler                   [WEAK]
                    EXPORT  RTC_IRQHandler                      [WEAK]
                    EXPORT  FMC_IRQHandler                      [WEAK]
                    EXPORT  RCC_IRQHandler                      [WEAK]
                    EXPORT  EXTI0_IRQHandler                    [WEAK]
                    EXPORT  EXTI1_IRQHandler                    [WEAK]
                    EXPORT  EXTI2_IRQHandler                    [WEAK]
                    EXPORT  EXTI3_IRQHandler                    [WEAK]
                    EXPORT  EXTI4_IRQHandler                    [WEAK]
                    EXPORT  DMA1_Channel1_IRQHandler            [WEAK]
                    EXPORT  DMA1_Channel2_IRQHandler            [WEAK]
                    EXPORT  DMA1_Channel3_IRQHandler            [WEAK]
                    EXPORT  DMA1_Channel4_IRQHandler            [WEAK]
                    EXPORT  DMA1_Channel5_IRQHandler            [WEAK]
                    EXPORT  DMA1_Channel6_IRQHandler            [WEAK]
                    EXPORT  DMA1_Channel7_IRQHandler            [WEAK]
                    EXPORT  ADC1_2_IRQHandler                   [WEAK]
                    EXPORT  CAN1_TX_IRQHandler                  [WEAK]
                    EXPORT  CAN1_RX0_IRQHandler                 [WEAK]
                    EXPORT  CAN1_RX1_IRQHandler                 [WEAK]
                    EXPORT  CAN1_SCE_IRQHandler                 [WEAK]
                    EXPORT  EXTI9_5_IRQHandler                  [WEAK]
                    EXPORT  TIMER1_BRK_TIMER9_IRQHandler        [WEAK]
                    EXPORT  TIMER1_UP_TIMER10_IRQHandler        [WEAK]
                    EXPORT  TIMER1_TRG_COM_TIMER11_IRQHandler   [WEAK]
                    EXPORT  TIMER1_CC_IRQHandler                [WEAK]
                    EXPORT  TIMER2_IRQHandler                   [WEAK]
                    EXPORT  TIMER3_IRQHandler                   [WEAK]
                    EXPORT  TIMER4_IRQHandler                   [WEAK]
                    EXPORT  I2C1_EV_IRQHandler                  [WEAK]
                    EXPORT  I2C1_ER_IRQHandler                  [WEAK]
                    EXPORT  I2C2_EV_IRQHandler                  [WEAK]
                    EXPORT  I2C2_ER_IRQHandler                  [WEAK]
                    EXPORT  SPI1_IRQHandler                     [WEAK]
                    EXPORT  SPI2_IRQHandler                     [WEAK]
                    EXPORT  USART1_IRQHandler                   [WEAK]
                    EXPORT  USART2_IRQHandler                   [WEAK]
                    EXPORT  USART3_IRQHandler                   [WEAK]
                    EXPORT  EXTI15_10_IRQHandler                [WEAK]
                    EXPORT  RTCAlarm_IRQHandler                 [WEAK]
                    EXPORT  OTG_FS_WKUP_IRQHandler              [WEAK]
                    EXPORT  TIMER8_BRK_TIMER12_IRQHandler       [WEAK]
                    EXPORT  TIMER8_UP_TIMER13_IRQHandler        [WEAK]
                    EXPORT  TIMER8_TRG_COM_TIMER14_IRQHandler   [WEAK]
                    EXPORT  TIMER8_CC_IRQHandler                [WEAK]
                    EXPORT  ADC3_IRQHandler                     [WEAK]
                    EXPORT  EXMC_IRQHandler                     [WEAK]
                    EXPORT  SDIO_IRQHandler                     [WEAK]  
                    EXPORT  TIMER5_IRQHandler                   [WEAK]
                    EXPORT  SPI3_IRQHandler                     [WEAK]
                    EXPORT  UART4_IRQHandler                    [WEAK]
                    EXPORT  UART5_IRQHandler                    [WEAK]
                    EXPORT  TIMER6_IRQHandler                   [WEAK]
                    EXPORT  TIMER7_IRQHandler                   [WEAK]
                    EXPORT  DMA2_Channel1_IRQHandler            [WEAK]
                    EXPORT  DMA2_Channel2_IRQHandler            [WEAK]
                    EXPORT  DMA2_Channel3_IRQHandler            [WEAK]
                    EXPORT  DMA2_Channel4_IRQHandler            [WEAK]
                    EXPORT  DMA2_Channel5_IRQHandler            [WEAK]
                    EXPORT  ETH_IRQHandler                      [WEAK]
                    EXPORT  ETH_WKUP_IRQHandler                 [WEAK]
                    EXPORT  CAN2_TX_IRQHandler                  [WEAK]
                    EXPORT  CAN2_RX0_IRQHandler                 [WEAK]
                    EXPORT  CAN2_RX1_IRQHandler                 [WEAK]
                    EXPORT  CAN2_SCE_IRQHandler                 [WEAK]
                    EXPORT  OTG_FS_IRQHandler                   [WEAK]
                                
                    EXPORT  DMA2_Channel6_IRQHandler            [WEAK]                                   
                    EXPORT  DMA2_Channel7_IRQHandler            [WEAK]                                   
                    EXPORT  USART6_IRQHandler                   [WEAK]                                          
                    EXPORT  I2C3_EV_IRQHandler                  [WEAK]                                             
                    EXPORT  I2C3_ER_IRQHandler                  [WEAK]                                             
                                 
                    EXPORT  DCI_IRQHandler                      [WEAK]                                             
                    EXPORT  CRYP_IRQHandler                     [WEAK]                                    
                    EXPORT  HASH_RNG_IRQHandler                 [WEAK]

                    EXPORT  UART7_IRQHandler
                    EXPORT  UART8_IRQHandler                    [WEAK]
                    
                    EXPORT  TLDI_IRQHandler                     [WEAK]
                    EXPORT  TLDI_ER_IRQHandler                  [WEAK]   

WWDG_IRQHandler
LVD_IRQHandler
TAMPER_IRQHandler
RTC_IRQHandler
FMC_IRQHandler
RCC_IRQHandler
EXTI0_IRQHandler
EXTI1_IRQHandler
EXTI2_IRQHandler
EXTI3_IRQHandler
EXTI4_IRQHandler
DMA1_Channel1_IRQHandler
DMA1_Channel2_IRQHandler
DMA1_Channel3_IRQHandler
DMA1_Channel4_IRQHandler
DMA1_Channel5_IRQHandler
DMA1_Channel6_IRQHandler
DMA1_Channel7_IRQHandler
ADC1_2_IRQHandler
CAN1_TX_IRQHandler
CAN1_RX0_IRQHandler
CAN1_RX1_IRQHandler
CAN1_SCE_IRQHandler
EXTI9_5_IRQHandler
TIMER1_BRK_TIMER9_IRQHandler
TIMER1_UP_TIMER10_IRQHandler
TIMER1_TRG_COM_TIMER11_IRQHandler
TIMER1_CC_IRQHandler
TIMER2_IRQHandler
TIMER3_IRQHandler
TIMER4_IRQHandler
I2C1_EV_IRQHandler
I2C1_ER_IRQHandler
I2C2_EV_IRQHandler
I2C2_ER_IRQHandler
SPI1_IRQHandler
SPI2_IRQHandler
USART1_IRQHandler
USART2_IRQHandler
USART3_IRQHandler
EXTI15_10_IRQHandler
RTCAlarm_IRQHandler
OTG_FS_WKUP_IRQHandler
TIMER8_BRK_TIMER12_IRQHandler
TIMER8_UP_TIMER13_IRQHandler
TIMER8_TRG_COM_TIMER14_IRQHandler
TIMER8_CC_IRQHandler
ADC3_IRQHandler
EXMC_IRQHandler
SDIO_IRQHandler
TIMER5_IRQHandler
SPI3_IRQHandler
UART4_IRQHandler
UART5_IRQHandler
TIMER6_IRQHandler
TIMER7_IRQHandler
DMA2_Channel1_IRQHandler
DMA2_Channel2_IRQHandler
DMA2_Channel3_IRQHandler
DMA2_Channel4_IRQHandler
DMA2_Channel5_IRQHandler
ETH_IRQHandler
ETH_WKUP_IRQHandler
CAN2_TX_IRQHandler
CAN2_RX0_IRQHandler
CAN2_RX1_IRQHandler
CAN2_SCE_IRQHandler
OTG_FS_IRQHandler

DMA2_Channel6_IRQHandler                                 
DMA2_Channel7_IRQHandler                                               
USART6_IRQHandler                                                            
I2C3_EV_IRQHandler                                                         
I2C3_ER_IRQHandler                                                              
                                 
DCI_IRQHandler                                                               
CRYP_IRQHandler                                                         
HASH_RNG_IRQHandler                 

UART7_IRQHandler
UART8_IRQHandler                    
                    
TLDI_IRQHandler                     
TLDI_ER_IRQHandler
                B       .
                ENDP

                ALIGN ;填充字节

;*******************************************************************************
; User Stack and Heap initialization
;*******************************************************************************
;堆和栈的初始化
                 IF      :DEF:__MICROLIB ;“DEF”的用法——:DEF:X 就是说X定义了则为真,否则为假
                      ;如果定义了MICORLIB,
                 ;将__initial_sp、__heap_base、__heap_limit赋予全局属性供外部使用
                 EXPORT  __initial_sp
                 EXPORT  __heap_base
                 EXPORT  __heap_limit
               
                 ELSE
                 
                 IMPORT  __use_two_region_memory ;通知编译器要使用的标号在其他文件
                 EXPORT  __user_initial_stackheap ;声明全局标号__user_initial_stackheap
   ;如果使用默认的C库,程序启动过程中就不会执行该标号下的代码              
__user_initial_stackheap
                  ;进行堆栈和堆的赋值,在__main函数执行过程中调用。
                 LDR     R0, =  Heap_Mem  ;保存堆首地址
                 LDR     R1, =(Stack_Mem + Stack_Size) ;保持栈的大小
                 LDR     R2, = (Heap_Mem +  Heap_Size) ;堆的大小
                 LDR     R3, = Stack_Mem  ;栈顶指针
                 BX      LR

                 ALIGN

                 ENDIF

                 END

;/******************* (C) COPYRIGHT 2015 GIGADEVICE *****END OF FILE****/

使用特权

评论回复
板凳
user110|  楼主 | 2016-1-22 17:16 | 只看该作者
生成的.map文件分析
1、//文件生成的模块之间相互引用的关系
Section Cross References

    //main.o是main.c的编译生成的目标文件,其中文件中每个函数被编译成一个段(Section)
    //下面这句话的意思是:目标文件main.o中段i.GPIO_Configuration引用了gd32f20x_rcc.o
    //目标文件中i.RCC_APB2PeriphClock_Enable段的标号RCC_APB2PeriphClock_Enable
    main.o(i.GPIO_Configuration) refers to gd32f20x_rcc.o(i.RCC_APB2PeriphClock_Enable) for RCC_APB2PeriphClock_Enable
    main.o(i.GPIO_Configuration) refers to gd32f20x_gpio.o(i.GPIO_Init) for GPIO_Init
    main.o(i.main) refers to main.o(i.GPIO_Configuration) for GPIO_Configuration
    main.o(i.main) refers to systick.o(i.SysTick_Configuration) for SysTick_Configuration
    main.o(i.main) refers to gd32f20x_gpio.o(i.GPIO_SetBits) for GPIO_SetBits
    main.o(i.main) refers to gd32f20x_gpio.o(i.GPIO_ResetBits) for GPIO_ResetBits
    main.o(i.main) refers to systick.o(i.Delay_1ms) for Delay_1ms
    gd32f20x_it.o(i.SysTick_Handler) refers to systick.o(i.TimingDelay_Decrement) for TimingDelay_Decrement
    systick.o(i.Delay_1ms) refers to systick.o(.data) for TimingDelay

2、//删除镜像没调用到的输入段,这样可以减少生成的可执行文件的大小
    Removing Unused input sections from the image.

    Removing main.o(.rev16_text), (4 bytes).
    Removing main.o(.revsh_text), (4 bytes).
    Removing main.o(.data), (4 bytes).
    Removing gd32f20x_it.o(.rev16_text), (4 bytes).
    Removing gd32f20x_it.o(.revsh_text), (4 bytes).
    Removing systick.o(.rev16_text), (4 bytes).
    Removing systick.o(.revsh_text), (4 bytes).
    Removing system_gd32f20x.o(.rev16_text), (4 bytes).
    Removing system_gd32f20x.o(.revsh_text), (4 bytes).
    Removing system_gd32f20x.o(i.SystemCoreClockUpdate), (360 bytes)

3、
//镜像中符号表
Image Symbol Table
    //局部符号
    Local Symbols

    Symbol Name                              Value     Ov Type        Size  Object(Section)

    ../clib/microlib/init/entry.s            0x00000000   Number         0  entry7b.o ABSOLUTE
    ../clib/microlib/init/entry.s            0x00000000   Number         0  entry8b.o ABSOLUTE
    ../clib/microlib/init/entry.s            0x00000000   Number         0  entry9a.o ABSOLUTE
    ../clib/microlib/init/entry.s            0x00000000   Number         0  entry11b.o ABSOLUTE
    ../clib/microlib/init/entry.s            0x00000000   Number         0  entry10a.o ABSOLUTE
    ../clib/microlib/init/entry.s            0x00000000   Number         0  entry9b.o ABSOLUTE
    ../clib/microlib/init/entry.s            0x00000000   Number         0  entry10b.o ABSOLUTE
    ../clib/microlib/init/entry.s            0x00000000   Number         0  entry11a.o ABSOLUTE

4、
//全局符号
    Global Symbols

    Symbol Name                              Value     Ov Type        Size  Object(Section)

    BuildAttributes$$THM_ISAv4$P$D$K$B$S$PE$A:L22UL41UL21$X:L11$S22US41US21$IEEE1$IW$USESV6$~STKCKD$USESV7$~SHL$OSPACE$EBA8$MICROLIB$REQ8$PRES8$EABIv2 0x00000000   Number         0  anon$$obj.o ABSOLUTE
    __ARM_use_no_argv                        0x00000000   Number         0  main.o ABSOLUTE
    __cpp_initialize__aeabi_                  - Undefined Weak Reference
    __cxa_finalize                            - Undefined Weak Reference
    __decompress                              - Undefined Weak Reference
    _clock_init                               - Undefined Weak Reference
    _microlib_exit                            - Undefined Weak Reference
    __Vectors_Size                           0x000001a8   Number         0  startup_gd32f20x_cl.o ABSOLUTE
    __Vectors                                0x08000000   Data           4  startup_gd32f20x_cl.o(RESET)
    __Vectors_End                            0x080001a8   Data           0  startup_gd32f20x_cl.o(RESET)
    __main                                   0x080001a9   Thumb Code     0  entry.o(.ARM.Collect$$$$00000000)
    _main_stk                                0x080001a9   Thumb Code     0  entry2.o(.ARM.Collect$$$$00000001)

5、//镜像的存储分布
Memory Map of the image

  //程序的入口,Reset_Handler的地址,中断向量表的大小为0x1a8
  Image Entry point : 0x080001a9  
   
  //程序的加载首地址和长度,Size:1688(0x698) = 代码code(1208) + 常数RO Data(456)+ 已初始化的全局变量 RW Data(24)
  Load Region LR_IROM1 (Base: 0x08000000, Size: 0x00000698, Max: 0x00040000, ABSOLUTE)
   
    //ROM执行区首地址和长度,Size:1664(0x680) = 代码code(1208) + 常数RO Data(456)
    Execution Region ER_IROM1 (Base: 0x08000000, Size: 0x00000680, Max: 0x00040000, ABSOLUTE)

    Base Addr    Size         Type   Attr      Idx    E Section Name        Object

    0x08000000   0x000001a8   Data   RO         5260    RESET               startup_gd32f20x_cl.o          //中断向量表
    0x080001a8   0x00000000   Code   RO         5265  * .ARM.Collect$$$$00000000  mc_w.l(entry.o)
    0x080001a8   0x00000004   Code   RO         5268    .ARM.Collect$$$$00000001  mc_w.l(entry2.o)
    0x080001ac   0x00000004   Code   RO         5271    .ARM.Collect$$$$00000004  mc_w.l(entry5.o)
    0x080001b0   0x00000000   Code   RO         5273    .ARM.Collect$$$$00000008  mc_w.l(entry7b.o)
    0x080001b0   0x00000000   Code   RO         5275    .ARM.Collect$$$$0000000A  mc_w.l(entry8b.o)
    0x080001b0   0x00000008   Code   RO         5276    .ARM.Collect$$$$0000000B  mc_w.l(entry9a.o)
    0x080001b8   0x00000000   Code   RO         5278    .ARM.Collect$$$$0000000D  mc_w.l(entry10a.o)
    0x080001b8   0x00000000   Code   RO         5280    .ARM.Collect$$$$0000000F  mc_w.l(entry11a.o)
    0x080001b8   0x00000004   Code   RO         5269    .ARM.Collect$$$$00002712  mc_w.l(entry2.o)
    0x080001bc   0x00000024   Code   RO         5261    .text               startup_gd32f20x_cl.o
    0x080001e0   0x00000024   Code   RO         5282    .text               mc_w.l(init.o)
    0x08000204   0x00000004   Code   RO          148    i.BusFault_Handler  gd32f20x_it.o
    0x08000208   0x00000002   Code   RO          149    i.DebugMon_Handler  gd32f20x_it.o
    0x0800020a   0x00000002   PAD
    0x0800020c   0x00000014   Code   RO          238    i.Delay_1ms         systick.o
    0x08000220   0x0000003c   Code   RO            3    i.GPIO_Configuration  main.o
    0x0800025c   0x00000112   Code   RO         2616    i.GPIO_Init         gd32f20x_gpio.o
    0x0800036e   0x00000004   Code   RO         2625    i.GPIO_ResetBits    gd32f20x_gpio.o
    0x08000372   0x00000004   Code   RO         2626    i.GPIO_SetBits      gd32f20x_gpio.o
    0x08000376   0x00000004   Code   RO          150    i.HardFault_Handler  gd32f20x_it.o
    0x0800037a   0x00000004   Code   RO          151    i.MemManage_Handler  gd32f20x_it.o
    0x0800037e   0x00000002   Code   RO          152    i.NMI_Handler       gd32f20x_it.o
    0x08000380   0x00000028   Code   RO          239    i.NVIC_SetPriority  systick.o
    0x080003a8   0x00000002   Code   RO          153    i.PendSV_Handler    gd32f20x_it.o
    0x080003aa   0x00000002   PAD
    0x080003ac   0x00000020   Code   RO         3356    i.RCC_APB2PeriphClock_Enable  gd32f20x_rcc.o
    0x080003cc   0x00000002   Code   RO          154    i.SVC_Handler       gd32f20x_it.o
    0x080003ce   0x00000008   Code   RO          281    i.SetSysClock       system_gd32f20x.o
    0x080003d6   0x00000002   PAD
    0x080003d8   0x000000f8   Code   RO          282    i.SetSysClockTo120  system_gd32f20x.o
    0x080004d0   0x00000050   Code   RO          240    i.SysTick_Configuration  systick.o
    0x08000520   0x00000008   Code   RO          155    i.SysTick_Handler   gd32f20x_it.o
    0x08000528   0x00000088   Code   RO          284    i.SystemInit        system_gd32f20x.o
    0x080005b0   0x00000018   Code   RO          241    i.TimingDelay_Decrement  systick.o
    0x080005c8   0x00000004   Code   RO          156    i.UsageFault_Handler  gd32f20x_it.o
    0x080005cc   0x0000000e   Code   RO         5286    i.__scatterload_copy  mc_w.l(handlers.o)
    0x080005da   0x00000002   Code   RO         5287    i.__scatterload_null  mc_w.l(handlers.o)
    0x080005dc   0x0000000e   Code   RO         5288    i.__scatterload_zeroinit  mc_w.l(handlers.o)
    0x080005ea   0x00000002   PAD
    0x080005ec   0x00000074   Code   RO            4    i.main              main.o
    0x08000660   0x00000020   Data   RO         5284    Region$$Table       anon$$obj.o


    Execution Region RW_IRAM1 (Base: 0x20000000, Size: 0x00002018, Max: 0x00020000, ABSOLUTE)

    Base Addr    Size         Type   Attr      Idx    E Section Name        Object

    0x20000000   0x00000004   Data   RW          242    .data               systick.o
    0x20000004   0x00000014   Data   RW          285    .data               system_gd32f20x.o
    0x20000018   0x00002000   Zero   RW         5258    STACK               startup_gd32f20x_cl.o

6、
//RW Data存放已初始化的全局变量,是Flash的一段空间。在程序启动前会从Flash拷贝到SRAM中
    //所以程序占SRAM和Flash的大小都包括了RW Data
    Total RO  Size (Code + RO Data)                 1664 (   1.63kB)
    Total RW  Size (RW Data + ZI Data)              8216 (   8.02kB)  (程序占SRAM的大小)
    Total ROM Size (Code + RO Data + RW Data)       1688 (   1.65kB)  (程序占Flash的大小)

使用特权

评论回复
地板
bboo| | 2016-1-22 22:38 | 只看该作者
分析.map是很牛的

使用特权

评论回复
5
dianz| | 2016-1-22 22:44 | 只看该作者
这个不错,能看懂Map文件,对芯片的理解就更深一层

使用特权

评论回复
6
chuntian2016| | 2016-1-25 20:53 | 只看该作者
user110 发表于 2016-1-22 17:12
AREA    |.text|, CODE, READONLY   ;代码段定义

;利用PROC、ENDP这一对伪指令把程序段 ...

该程序的非常复杂的,汇编语言是基础的。

使用特权

评论回复
7
smilingangel| | 2016-2-20 17:25 | 只看该作者
这个是需要在keil环境中多调试设置的。

使用特权

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

本版积分规则

1

主题

30

帖子

2

粉丝