FreeRTOS的重要知识点

系统栈和任务栈

系统栈
系统栈用于中断函数和中断嵌套
系统栈大小在启动文件.S文件中分配
FreeRTOS的重要知识点
系统栈指针为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没有专门的函数,可以使用临界段实现同样的功能

上一篇:conquer your critical inner voice


下一篇:dup、dup2复制的意义,实现文件共享操作,实现重定位,重定位命令 >【linux】(l)