一,启动流程
从这里开始我们开始讲解liteos的启动过程,通过前面连接器脚本的分析,我们已经对程序启动阶段期望的内存布局有了一个宏观的认识,然后系统上电从0x08000000地址boot起来之后要做的就是生成这个布局,然后初始化时钟,内存,任务,锁信号量等等基础的系统管理单元,然后才是我们的应用,本节让大家从宏观上对liteos有一个清晰的认识。启动流程讲解完成之后,会分享每一个小的框架如内存管理,任务调度,锁,信号量等每一块不相互独立,有一定关系,比如任务调度里和内存管理里面肯定要用到锁,信号量之类的。在我们使用内存分配接口之前肯定要先初始化好内存管理单元,其他的也类似。所以这里先从宏观上讲解顺序,说明前一节说的内存布局是如何形成的。
liteos的启动宏观流程如下:
二,boot
从连接器脚本知道我们的g_pfnVectors存储在0x08000000处,然后系统上电后第一个word会进入sp寄存器作为栈地址,然后第二个Reset_Handler执行的第一个代码。
看看Reset_Handler,分别是关闭中断,设置栈寄存器为_estack,拷贝中断向量表,拷贝数据段,拷贝代码段,初始化时钟,调用main。系统只有将dat