购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.5.5 上电复位到main函数之前的执行过程

MQX工程框架启动过程分为芯片启动和MQX操作系统启动,硬件启动过程与NOS一致,如图2-4所示。在ARM Cortex-M4处理器架构中,芯片上电后自动执行物理地址0x00000000h处指令,查询位于芯片内部的存储映射区域(位于工程文件夹的“..\04_Linker_Files”文件夹下的intflash.ld文件)。

图2-4 MQX的芯片上电启动执行流程

根据存储区分布可知上电起始地址指向中断向量表(位于工程文件夹的“..\03_MCU”文件夹下的vectors.c文件)。

中断向量表中获取其中第一个表项的内容作为系统栈的栈首指针赋给主栈指针(Main Stack Pointer,MSP),获取其中的第二个表项的内容作为系统启动函数的地址赋给程序计数器(Program Counter,PC)。在AMQXFW-Framework工程框架中,系统启动首先执行的函数是由汇编语言编写的__boot函数(位于工程文件夹下“..\03_MCU”中的boot.s文件中),在其中执行关中断、切换当前使用栈为进程栈(Process Stack Pointer,PSP)等过程。

__boot函数最后转入执行__thumb_startup函数(位于工程文件夹的“..\03_MCU”文件夹下startup.c文件),进入C语言函数部分。在__thumb_startup函数中,完成禁用看门狗(wdog_disable)、初始化内存数据(__copy_rom_sections_to_ram)、初始化系统时钟(SystemClockSetup)等操作。其中zero_fill_bss为全局变量指定初值。

__thumb_startup函数最后进入main函数执行,调用MQX操作系统的入口函数_mqx()开始启动MQX。 WU8UDW6AuMhwC+6XdIQiBqs13LsTSvx6VKxaInQKnrE7xvRP7m42g3Ws5mPmnfHX

点击中间区域
呼出菜单
上一章
目录
下一章
×