FreeRTOS启动流程

    技术2022-07-11  107

    Reset_Handler:芯片上电默认进Reset_Handler

    SystemInit:初始化时钟及中断向量映射 __main :main函数入口

    __main

    xTaskCreate(): pvPortMalloc()分配任务控制块内存,prvHeapInit() 初始化堆栈 vTaskStartScheduler():启动系统节拍定时器器(一般都是使用 SysTick)并启动第一个任务

    FreeRTOS 为了任务启动和任务切换使用了三个异常:SVC、PendSV 和 SysTick:

    SVC(系统服务调用,亦简称系统调用)用于任务启动,有些操作系统不允许应用程 序直接访问硬件,而是通过提供一些系统服务函数,用户程序使用 SVC 发出对系统服务函 数的呼叫请求,以这种方法调用它们来间接访问硬件,它就会产生一个 SVC 异常。

    PendSV(可挂起系统调用)用于完成任务切换,它是可以像普通的中断一样被挂起的, 它的最大特性是如果当前有优先级比它高的中断在运行,PendSV 会延迟执行,直到高优先 级中断执行完毕,这样子产生的 PendSV 中断就不会打断其他中断的运行。

    SysTick 用于产生系统节拍时钟,提供一个时间片,如果多个任务共享同一个优先级, 则每次 SysTick 中断,下一个任务将获得一个时间片。

    注意:PendSV和SysTick异常优先级设置最低,避免任务切换时打断某个中断服务程序。 SysTick是硬件定时器,响应中断延迟与其无关。

    Processed: 0.042, SQL: 9