![](https://img-blog.csdnimg.cn/direct/1ad0417b449c4910b77600d607e2249d.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
7天看懂freertos内核原理
文章平均质量分 96
本专栏参考野火的freertos内核实现与应用,但在其基础上做了很多原理性的补充,适合有一定C语言基础的第一次学习freertos的小白,通过分析简化后的源码,从而掌握freertos实现的基本原理,希望能够帮助到大家学习。
nanaki50213
这个作者很懒,什么都没留下…
展开
-
freertos内核原理Day7(支持时间片)
这是freertos内核实现的最后一节, 如果理解了前面的内容,这节内容理解起来会非常容易,这节内容也比较少; 这里先说明时间片的概念:一个优先级的根节点下,可以挂载多个属于这个优先级的任务节点,且它们都享有相同的CPU运行时间。前面几节可以知道systick被配置为了1ms中断一次,systick中断触发的周期就是一个tick(tick就是Rtos中的任务运行时长的最小时间单位)。首先在main函数中先创建3个任务: 可以看到在创建的任务中task1 和task2都是优先级为2的任务,task3原创 2024-03-08 05:20:30 · 1930 阅读 · 4 评论 -
freertos内核原理Day6(实现任务延时列表)
1、可以看到我们定义了任务延时列表根节点1和2(1是挂载系统时基变量溢出前的延时任务的,2是用来挂载系统时基变量溢出后的延时任务的2、定义了一个任务延时根节点指针pxDelayedTaskList(用来指向时基没有溢出的那条列表3、定义了一个任务延时根节点指针pxOverflowDelayedTaskList(用来指向时基溢出的那条列表6.1.2任务延时列表初始化既然任务延时列表是属于延时列表的一种,则在任务列表初始化时,应该一并初始化任务延时列表;/* 初始化任务相关的列表 */原创 2024-03-06 10:30:00 · 909 阅读 · 1 评论 -
freertos内核原理Day5(支持多优先级)
这里首先说明一点,configUSE_PORT_OPTIMISED_TASK_SELECTION宏控制是选择“通用方法”还是“优化方法”的宏定义,1选择“优化方法”,反之“通用方法”;原创 2024-03-03 22:46:35 · 1775 阅读 · 0 评论 -
freertos内核原理DAY4(空闲任务与阻塞延时)
目录4.空闲任务与阻塞延时4.1空闲任务的创建4.1.1定义空闲任务栈4.1.2获取空闲任务内存(main.c中实现)4.1.3创建空闲任务(task.c中实现)4.2实现阻塞延时4.2.1systick滴答时钟寄存器配置4.2.2 vTaskDelay()软件延时函数(task.c中实现)4.3仿真程序能理解这节的前提是看懂了前面的"任务定义及切换""链表"及"临界段"这三个内容;(这节内容请务必先下载后面提供的程序,对照着程序看,不然容易理不清)要知道使用freertos操作系统的目的是为了榨干cpu原创 2024-01-18 14:54:18 · 1138 阅读 · 0 评论 -
freertos内核原理 Day3(临界段的保护)
taskENTER_CRITICAL_FROM_ISR()中断级进入临界段函数,taskEXIT_CRITICAL_FROM_ISR中断级退出临界段函数,这两个函数是成对使用的,且在中断中使用(),若函数是内联函数,则编译器会自动的将函数的代码加载到以后会调用到函数的地方,若此时内联函数中的代码量很小,则效率会比调用函数时高(但当内联函数的代码量很大时,这会导致程序的代码量急剧增大,此时内联的效率反而更低,这时代码量大的函数用普通调用就可以了。3.返回中断进入临界段前的basepri寄存器配置;原创 2024-01-15 01:05:57 · 1346 阅读 · 0 评论 -
freertos内核原理 Day2(任务定义及切换)
main.c中实现main.c中实现头文件freertos.h中定义定义根节点数组pxReadyTasksLists,里面存放各个链表的根节点,如下图所示。原创 2024-01-07 20:14:38 · 2188 阅读 · 3 评论 -
freertos内核原理 Day1(链表)
头文件list.h中辅助排序值(xitemvalue);节点排序时确定当前节点处于链表的第几位指向下一节点指针(pxnext);指向上一节点指针(pxprevious);指向内核对象指针(pvowner);指向节点所在链表(pvcontainer);根节点代表的就是当前链表/* 辅助值,用于帮助节点做顺序排列 *//* 指向链表下一个节点 *//* 指向链表前一个节点 *//* 指向拥有该节点的内核对象,通常是TCB *//* 指向该节点所在的链表 */原创 2024-01-03 17:16:24 · 1282 阅读 · 0 评论