ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

启动与链接

启动与链接 启动流程从向量表的第一项到main首先初始化MSP主栈指针后进入Reset_Handlerg_pfnVectors:.word _estack /* 初始主栈指针 (MSP) - 硬件自动加载 */.word Reset_Handler /* 复位入口 - 硬件自动加载到 PC */.word NMI_Handler.word HardFault_Handler.word MemManage_Handler.word BusFault_Handler.word UsageFault_Handler.......流程如下图所示在链接脚本中将isr_vector放在第一个位置即0x08000000硬件复位时的向量表地址。SECTIONS{.isr_vector : ← 第一个段物理位置 Flash 起点{. ALIGN(4);KEEP (*(.isr_vector)) ← KEEP 防止 --gc-sections 删除. ALIGN(4);} FLASH ← 放进 FLASH (0x08000000).text : { ... } FLASH ← 代码段在向量表之后...}由上可得初始化MSP主栈指针后进入Reset_Handler继续调用__start转入C语言代码。Reset_Handler:bl __start.L_main_return:bl .L_main_return复制.data段数据到SRAM供程序读写src _sidata; for(dest _sdata; dest edata;) { *dest *src; }清零.bss段.bss段不占用FLASHfor(dest _sbss; dest _ebss) { *dest 0; }时钟初始化进入main函数
返回列表