静态网站怎么维护,东阳实惠营销型网站建设,wordpress调用分类名称,上海公共招聘官网1.MAP文件浅析
1.1.MDK编译后生成的中间过程文件 1.2.Map文件构成#xff1a;
程序段交叉引用关系#xff08;Section Cross References#xff09;#xff1a;描述各文件之间函数调用关系删除映像未使用的程序段#xff08;Removing Unused input sections from the im…1.MAP文件浅析
1.1.MDK编译后生成的中间过程文件 1.2.Map文件构成
程序段交叉引用关系Section Cross References描述各文件之间函数调用关系删除映像未使用的程序段Removing Unused input sections from the image描述工程中未用到被删除的冗余程序段(函数/数据)映像符号表Image Symbol Table描述各符号程序段/数据在存储器中的地址、类型、大小等映像内存分布图Memory Map of the image描述各个程序段(函数)在存储器中的地址及占用大小映像组件大小Image component sizes给出整个映像代码(.o)占用空间汇总信息
1.3.与MAP相关的概念
名词别称解释内存Section/程序段/RO(Read Only) data.constdata只读数据Flash(ROM)RO(Read Only) code.text只读代码Flash(ROM)RW(Read Write).data可写数据定义了且初始化不为0Flash(ROM)/SRAMZI(Zero initialized).bss定义了但没初始化初始化为0SRAM
总结MAP文件是MDK编译代码后产生的集程序、数据及IO空间的一种映射列表文件简单说就是包括了各种.c文件、函数、符号等的地址、大小、引用关系等信息。MAP的主要作用是分析各.c文件占用FLASH 和 RAM的大小方便优化代码
2.STM32启动过程
2.1.STM32STM32启动模式自举模式
M3/M4/M7等内核复位后做的第一件事
从地址 0x0000 0000 处取出堆栈指针 MSP 的初始值该值就是栈顶地址从地址 0x0000 0004 处取出程序计数器指针 PC 的初始值该值是复位向量芯片厂商可以会把0x0000 0000和0x0000 0004地址映射到其它的地址如0x0800 0000和0x0800 0004 启动模式选择表STM32F1 F4与其类似FSMC可重映射到外部SRAMF7/H7只有一个BOOT
2.2.STM32启动过程以Flash为例
初始化MSP从0x0800 0000获取堆栈指针 MSP此时会设置堆(Heap_Size)和栈(Stack_Size)的大小初始化PC从0x0800 0004获取程序计数器指针PC此时PC指向中断向量表(Reset Vector既__Vector)在中断向量表中第一条指令即是Reset_Handler在Reset_Handler函数中会调用SystemInit函数可选并调用标准C库函数__mian()执行一系列设置调用main函数__main()函数的细节 __scatterload()把RW/RO输出段从装载域地址复制到运行域地址并完成了ZI运行域的初始化工作 __rt_entry()完成库函数的初始化 __user_setup_stackheap()初始化堆栈 栈(Stack)编译器自动分配和释放存放函数参数、函数调用、局部变量等 堆(Heap)程序分配和释放如malloc、calloc、realloc等 函数局部变量较多嵌套关系复杂时需加大栈大小Stack_Size Reset_Handler函数如下
Reset_Handler PROC //PROC定义子程序//WEAK弱定义EXPORT Reset_Handler [WEAK] //EXPORT标明全局属性可被外部调用IMPORT __main //IMPORT申明来自外部文件类externIMPORT SystemInitLDR R0, SystemInitBLX R0 LDR R0, __mainBX R0ENDP //ENDP表示子程序结束【注】Reset_Handler的作用外部存储器配置中断向量表地址配置。 __main()参考链接 【1】STM32 启动解析__main main 【2】MDK __main()代码执行过程分析 【3】【stm32】stm32深入思考(1) 之 系统启动流程 main之前的过程__main作用start.s作用