FreeRTOS启动流程

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是硬件定时器,响应中断延迟与其无关。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值