![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
FreeRTOS
文章平均质量分 51
学习操作系统
(】
这个作者很懒,什么都没留下…
展开
-
FreeRTOS创建任务过程
** 第一篇文中未涉及到优先级问题,所以任务函数、任务控制块关于优先级的成员变量全都没写,仅对任务基础知识进行介绍 **什么是任务根据功能的不同,把整个系统分割成一个个独立的且无法返回的函数任务栈任务栈就是一个全局数组任务函数任务函数主体无限循环且不能返回void Task1(void) //任务函数{ while (1) { }}任务控制块任务控制块就是任务的身份证,里面存有所有的任务信息,比如任务的栈指针、任务名称和任务形参。定义任务控制块需要新的数据类型 tskT原创 2021-02-21 21:20:13 · 198 阅读 · 0 评论 -
FreeRTOS实现就绪列表
就绪列表就绪列表就是一个 List_t 类型的数组(List_t 就是链表头的数据类型),数组大小由 决定最大任务优先级的宏 configMAX_PRIORITIES 决定目前在配置文件中默认定义为5。最大支持256个优先级,数组的下标就对应了任务的优先级,同一优先级的任务统一插入到就绪列表的同一条链表中就绪列表定义:List_t pxReadyTasksLists[configMAX_PRIORITIES];就绪列表只有5个数初始化任务相关的就绪列表static void prvInit原创 2021-02-22 20:11:54 · 381 阅读 · 0 评论 -
FreeRTOS实现调度器
调度器是操作系统的核心,主要功能是实现任务的切换,即从就绪列表里面找到优先级最高的任务,然后去执行该任务。调度器函数实现:void vTaskStartScheduler( void ){BaseType_t xReturn; /* 添加空闲任务,这块先不看,还没学到 */ #if( configSUPPORT_STATIC_ALLOCATION == 1 ) { StaticTask_t *pxIdleTaskTCBBuffer = NULL; StackType_t *pxIdl原创 2021-02-23 20:31:16 · 175 阅读 · 0 评论 -
FreeRtos临界段代码保护
临界段用一句话概括就是在执行程序的时候不能被中断的代码段。那什么时候程序会被打断呢?1、系统调度(Pendsv中断)2、外部中断因此FreeRtos对临界段的保护最终还是回到对中断的开关控制。Cortex-M内核快速开关中断指令如下在FreeRtos中 portmacro.h 文件中定义了如下对临界段保护的函数,实际是对BASEPRI的操作#define portDISABLE_INTERRUPTS() vPortRaiseBASEPRI()#define portENABLE_IN原创 2021-02-24 18:48:26 · 272 阅读 · 0 评论