一,freeRTOS系统启动流程
在系统上电的时候第一个执行的是启动文件里面由汇编编写的复位函数Reset_Handler(芯片上电默认进Reset_Handler)。SystemInit初始化时钟及中断向量映射。复位函数的最后会调用 C 库函数__main。__main 函数的主要工做是初始化系统的堆和栈。main函数入口中将硬件初始化,RTOS 系统初始化,最后启动任务调度器。最后调用C中的main函数,从而进入 C语言程序。
int main (void)
{
/* 硬件初始化 */
HardWare_Init(); (1)
/* RTOS 系统初始化 */
RTOS_Init(); (2)
/* 建立任务 1,但任务 1 不会执行,由于调度器尚未开启 */ (3)
RTOS_TaskCreate(Task1);
/* 建立任务 2,但任务 2 不会执行,由于调度器尚未开启 */
RTOS_TaskCreate(Task2);
/* ......继续建立各类任务 */
/* 启动 RTOS,开始调度 */
RTOS_Start(); (4)
}
void Task1( void *arg ) (5)
{
while (1)
{
/* 任务实体,必须有阻塞的状况出现 */
}
}
void Task1( void *arg ) (6)
{
while (1)
{
/* 任务实体,必须有阻塞的状况出现 */
}
}
二,main函数中将硬件和RTOS系统先初始化完成,建立一个启动任务后就启动调度器,然后在启动任务里面建立各类应用任务,当全部任务都建立成功后,启动任务把本身删除。
main主函数举例