一,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系统先初始化完成,建立一个启动任务后就
本文详细解析freeRTOS系统启动流程,从启动文件的执行到C库函数__main,再到main函数中初始化硬件和RTOS系统。接着介绍了任务创建函数xTaskCreate,包括参数意义和任务控制块。此外,还探讨了vTaskStartScheduler如何启动调度器,并简述了SVC、PendSV和SysTick在任务启动和切换中的作用。
订阅专栏 解锁全文
7124

被折叠的 条评论
为什么被折叠?



