FreeRTOS的重要知识点

系统栈和任务栈

系统栈
系统栈用于中断函数和中断嵌套
系统栈大小在启动文件.S文件中分配
在这里插入图片描述
系统栈指针为MSP指针
任务栈
任务栈用于局部变量,函数形参,现场保护及返回地址等
任务栈大小在FreeRTOSConfig.h文件定义的heap中分配
任务栈指针为PSP指针

临界段 调度锁 任务锁 中断锁

临界段
临界段作用是临界段的代码不允许任何中断打断,即临界段必须一次性执行完成
执行临界段关闭了优先级值大于configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY值的所有中断,PendSV中断和SysTick中断优先级最低(优先级值高),因此执行任务切换的PendSV中断和SysTick中断被关闭了,任务切换禁止

临界段API功能
taskENTER_CRITICAL()进入临界段
taskEXIT_CRITICAL()退出临界段
taskENTER_CRITICAL_FROM_ISR()进入临界段(中断中使用)
taskEXIT_CRITICAL_FROM_ISR()退出临界段(中断中使用)

调度锁
调度锁是调度器开关函数,处于调度锁开和调度锁关之间的代码不会被高优先级的任务抢占

调度锁API功能
vTaskSuspendAll()调度锁开
xTaskResumeAll()调度锁关

不能在调度锁开关之间执行任何会引起任务切换的函数,如vTaskDelayUntil、vTaskDelay、xQueueSend 等

任务锁
任务锁防止当前任务的执行被高优先级的任务打断,FreeRTOS没有专门的函数,可以使用调度锁或关闭PendSV中断及Systick中断实现同样的功能

中断锁
中断锁是防止中断处理被更高优先级的中断打断,FreeRTOS没有专门的函数,可以使用临界段实现同样的功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值