MQX操作系统启动到main函数的过程

嵌入式技术

1330人已加入

描述

当一个嵌入式操作系统上电的时候,是如何从硬件跳转到软件的main函数里面的呢?许多学习嵌入式软件的人一开始都会有这样的疑惑,今天这里将详细介绍MQX系统启动到main函数的这个过程,这个过程被称之为启动引导程序(bootLoader),由于bootLoader与硬件系统强相关,因此不同的硬件需要不同的bootloader。

一,启动引导程序的作用

Bootloader顾名思义boot(能初始化基本硬件,时钟、存储、串口、关闭中断),loader(加载、运行、固话外部程序),初始化时钟和存储是为了向flash中读取操作系统代码。关闭中断是为了外设的意外中断导致boot失败。

二、MQX上电复位到main函数之前的执行过程。

这里用Cortex_M4的处理器作列,在芯片启动的时候会自动执行0x0000000h处的指令,查询芯片的存储映射情况(该存储的分配位于../Linker_Files中的intflash.ld),汇编的代码位于boot.s中,在intflash.ld中会运行memory.ldinc和sections.ldinc段。在sections.ldinc中可以找到中断向量表,在中断向量表的第二项,就是复位启动地址。

main

注意:__attribute__((section(".vectors_rom"))),这个函数可以改变函数属性,可以让后函数在main之前运行。

在中断向量表的第二项,可以找到函数复位的启动地址,在代码中有个宏定义:#define BOOT_START__boot,在源文件boot.s中有这个函数。在这个函数中做的操作就是清除中断使能寄存器和中断挂起寄存器、切换进程堆栈指针和调用startup.c这个函数,这样就会跳转到main函数里面执行。

main

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分