MDK开发环境STM32启动文件_main函数分析
2017-11-22 17:10
483 查看
MDK开发环境 STM32启动文件_main函数分析
一直对STM32启动文件不了解,在此记录以供查阅。
======================================================================== ** 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
相关文章推荐
- OK6410开发板开发环境搭建-NFS文件启动和使用dnw2烧写镜像文件
- Android开发环境搭建和项目各文件介绍应用安装和启动过程
- Android启动之init.c文件main函数分析
- 使用Visual Studio + Visual Assist X + MDK(编译器) 构建STM32开发环境
- MDK-ARM(Keil uVision V4.72)上STM32开发环境配置
- STM32启动过程解析-2.02固件库启动文件分析
- 004:STM32启动文件详解及SystemInit函数分析(转)
- stm32存储器结构、 IAR 开发环境下的.icf 文件、.map文件 解析
- STM32启动文件详解及SystemInit函数分析(转)
- stm32 启动文件.s源码 分析
- STM32学习笔记之中断向量表,MDK程序启动分析
- STM32启动文件分析
- keil 的stm32启动文件分析
- 前端开发环境之GRUNT自动WATCH压缩JS文件与编译SASS文件环境下Ruby安装sass常见错误分析
- STM32启动过程解析-2.02固件库启动文件分析
- STM32 启动文件分析
- Cubieboard开发环境、Uboot的SD启动卡制作、U-boot初步分析
- STM32启动文件分析
- android开发环境遇到adt无法启动的问题分析及解决方法
- bootstrap源码分析系列:一,文件结构和开发环境