
FreeRTOS从入门到精通
文章平均质量分 93
Zevalin爱灰灰
如果能找到就好了
展开
-
FreeRTOS从入门到精通 第一章(初识FreeRTOS)
(1)裸机又称为前后台系统,前台系统指的中断服务函数,后台系统指的大循环,即应用程序。(2)裸机的特点:①实时性很差,应用程序得依次执行。②容易出现空等待的情况,浪费CPU资源。③结构臃肿,所有功能的代码放在一个主循环中。(1)FreeRTOS的内核支持抢占式、合作式和时间片调度。(2)系统的组件在创建时可以选择动态或者静态的RAM,比如任务、消息队列、信号量、软件定时器等等。(3)提供了一个用于低功耗的Tickless模式(在任务空闲时,关闭其外设时钟)。原创 2024-12-29 12:28:37 · 1234 阅读 · 0 评论 -
FreeRTOS从入门到精通 第二章(FreeRTOS移植)
将FreeRTOS v202411.00版本的压缩包解压,包中的文件结构如下图所示,其中FreeRTOS中存放FreeRTOS内核,FreeRTOS-Plus中存放FreeRTOS组件(一般不使用)。FreeRTOS文件夹中又有几个文件夹,其中Source中装有FreeRTOS内核的源码,Demo中装有对各种单片机(及编译器)移植好的工程代码(或者说演示工程),License中的内容是一些许可信息,Test中存放公用以及移植层测试代码。原创 2024-12-30 06:00:00 · 844 阅读 · 0 评论 -
FreeRTOS从入门到精通 第三章(任务创建和任务删除)
(1)任务的创建和删除本质就是调用FreeRTOS的API函数。API函数描述动态方式创建任务静态方式创建任务删除任务(2)动态创建任务与静态创建任务:①动态创建任务——任务的任务控制块以及任务的栈空间所需的内存,均由FreeRTOS从FreeRTOS管理的堆中分配。②静态创建任务——任务的任务控制块以及任务的栈空间所需的内存,需用户分配提供。(3)任务控制块:/* 任务栈栈顶,必须为TCB的首个成员 *//* 任务状态列表项 *//* 任务事件列表项 */原创 2024-12-30 07:00:00 · 2545 阅读 · 0 评论 -
FreeRTOS从入门到精通 第四章(任务挂起和恢复)
(1)任务挂起和恢复的本质就是调用FreeRTOS的API函数。API函数描述挂起任务恢复被挂起的任务在中断中恢复被挂起的任务(2)挂起任务类似暂停任务,它可重新恢复,但删除任务则是将任务永远删除,除非是重新创建任务(任务也会重头开始执行),否则任务将永远消失。(3)带“FromISR”后缀的函数是在中断函数中专用的API函数。原创 2025-01-01 12:41:20 · 1065 阅读 · 0 评论 -
FreeRTOS从入门到精通 第五章(中断管理)
(1)让CPU打断正常运行的程序,转而去处理紧急的事件(程序),这个过程就叫中断,受理的事件称为中断服务程序。(2)中断执行机制,可简单概括为三步:①外设产生中断请求(GPIO外部中断、定时器中断等)。②CPU停止执行当前程序,转而去执行中断处理程序(ISR)。③执行完毕,返回被打断的程序处,继续往下执行。(3)中断服务函数的优先级需在FreeRTOS所管理的范围内;在中断服务函数里面若需调用FreeRTOS的API函数,只能使用带“FromISR”后缀的函数。原创 2025-01-01 12:47:08 · 1185 阅读 · 0 评论 -
FreeRTOS从入门到精通 第六章(FreeRTOS临界段代码保护及任务调度器挂起和恢复)
(4)需注意,临界区中是屏蔽了中断的,而在实际运用中,中断服务程序往往需要执行非常重要的动作,为了防止这些“非常重要的动作”迟迟没有执行,临界区的代码段不宜过长(或者说执行时间不宜过长)。(3)临界区外,中断与任务调度可以打断当前程序的运行,而临界区内直接屏蔽了中断(实际上,任务调度也是依靠中断实现的)。(2)临界段代码保护函数分为任务级和中断级,也就是分为在任务函数中使用或者和在中断服务函数中使用。(1)FreeRTOS在进入临界段代码的时候需要关闭中断,当处理完临界段代码以后再打开中断。原创 2025-01-05 12:16:00 · 566 阅读 · 0 评论 -
FreeRTOS从入门到精通 第七章(FreeRTOS列表和列表项)
(1)列表是 FreeRTOS中的一个数据结构,概念上和链表有点类似,用来跟踪FreeRTOS中的任务,列表项就是存放在列表中的项目。(2)列表相当于链表,列表项相当于节点,FreeRTOS中的列表是一个双向环形链表。(3)列表的特点:①列表项间的地址非连续的,是人为的连接到一起的。②列表项的数目是由后期添加的个数决定的,随时可以改变。函数描述初始化列表初始化列表项列表末尾插入列表项列表插入列表项列表移除列表项。原创 2025-01-05 12:27:42 · 945 阅读 · 0 评论 -
FreeRTOS从入门到精通 第八章(任务调度)
⑤调用函数prvEnableVFP使能FPU。(1)作用:启动任务调度器,任务调度器启动后,FreeRTOS便会开始进行任务调度。③关闭中断,防止调度器开启之前或过程中,受中断干扰,会在运行第一个任务时打开中断。(1)作用:完成启动任务调度器中与硬件架构相关的配置部分,以及启动第一个任务。①检测用户在FreeRTOSConfig.h文件中对中断的相关配置是否有误。④初始化全局变量,并将任务调度器的运行标志设置为已运行。⑤初始化任务运行时间统计功能的时基定时器。②如果使能软件定时器,则创建定时器任务。原创 2025-01-05 12:29:14 · 410 阅读 · 0 评论 -
FreeRTOS从入门到精通 第九章(时间片调度)
②任务task1、task2同优先级,由于task1先创建,它在就绪队列的首端,于是先执行task1,task1的执行逻辑如下图所示,因为语句集合1中的语句也需要时间运行,经过实际验证,运行四次语句集合1的总耗时是大于10ms的,于是会出现在task1第四次死等时有任务切换的情况。(3)删除FreeRTOS_experiment.c文件中task3任务的相关内容,将task1和task2的任务优先级均设置为2,并修改task1和task2的实现,各自维护的计数值在死循环内每10ms自增一次。原创 2025-01-23 00:05:58 · 1369 阅读 · 0 评论 -
FreeRTOS从入门到精通 第十章(FreeRTOS任务相关API函数)
(1)此函数用于获取指定任务的任务优先级,使用该函数前需在FreeRTOSConfig.h文件中将宏INCLUDE_uxTaskPriorityGet置1。UBaseType_t uxTaskPriorityGet //返回任务优先级数值(const TaskHandle_t xTask //要查找的任务句柄,NULL代表任务自身)原创 2025-01-23 00:15:40 · 791 阅读 · 1 评论 -
FreeRTOS从入门到精通 第十一章(FreeRTOS时间管理)
②task2的优先级较高,优先执行task2,如下所示,在不考虑task1的情况下(或者说task1运行时task2一直处于自我阻塞状态),task2依次执行LED2状态翻转、死等100ms及绝对延时500ms,这些操作加上阻塞时间共500ms。④随着时间的推移,task1在进行死等的时候很可能task2的阻塞时间正好结束,由于task2的优先级较高,task1会直接被打断,从而引发task1非预期的等待,这就导致LED1在这次闪烁轮回中的闪烁频率会产生细微的变化。②预期实验现象:两个LED灯不同步闪烁。原创 2025-01-28 14:00:47 · 808 阅读 · 0 评论 -
FreeRTOS从入门到精通 第十二章(FreeRTOS消息队列)
(1)队列是任务到任务、任务到中断、中断到任务数据交流的一种机制,它不同于全局变量。假设有一个全局变量a,现有两个任务都在写这个变量a,如下所示,变量自增分为三个步骤,如果在任务1读数据以后、修改数据以前发生任务切换,这将导致任务2和任务1读取相同的数据,并且基于相同的数据做相同的修改,这显然是有问题的,而使用队列可以避免这种问题(指访问冲突)。原创 2025-01-28 14:13:14 · 1219 阅读 · 0 评论 -
FreeRTOS从入门到精通 第十三章(信号量)
参考教程:【正点原子】手把手教你学FreeRTOS实时系统_哔哩哔哩_bilibili(1)信号量是一种解决同步问题的机制,可以实现对共享资源的有序访问,FreeRTOS中使用的是二值信号量、计数型信号量与互斥信号量。(2)以计数型信号量进行举例说明:①计数值大于0,代表有信号量资源。当获取信号量,即将资源分配给一个任务时,信号量计数值(资源数)减一,也即可分配的资源数减一;当释放信号量,即任务将资源归还给OS时,信号量计数值(资源数)加一,也即可分配的资源数加一。②信号量的计数值都有最大值限制,如果最大值原创 2025-01-29 10:07:08 · 1624 阅读 · 0 评论 -
FreeRTOS从入门到精通 第十四章(队列集)
(1)一个队列只允许任务间传递的消息为同一种数据类型,如果需要在任务间传递不同数据类型的消息时,那么就可以使用队列集。(2)队列集可用于对多个队列或信号量进行“监听”,其中不管哪一个消息到来,都可让任务退出阻塞状态。(3)队列集大致使用流程:①启用队列集功能需要将宏configUSE_QUEUE_SETS配置为1。②创建队列集。③创建队列或信号量。④往队列集中添加队列或信号量。⑤往队列发送信息或释放信号量。⑥获取队列集的消息。(1)队列集相关API函数概览:函数描述创建队列集。原创 2025-01-29 10:12:10 · 743 阅读 · 0 评论 -
FreeRTOS从入门到精通 第十五章(事件标志组)
(1)事件标志位是一个“位”,用来表示事件是否发生。(2)事件标志组是一组事件标志位的集合,可以简单的理解事件标志组,是一个整数。(3)事件标志组的特点:①每一个位与一个事件相关联,高8位除外,高8位用作存储事件标志组的控制信息。(下图所示的是32 位长度的事件标志组)②每一位事件的含义,以及高电平和低电平分别代表什么,由用户自己决定。③任意任务或中断都可以读写这些位。④可以等待某一位成立,或者等待多位同时成立。原创 2025-01-31 22:21:57 · 785 阅读 · 0 评论 -
FreeRTOS从入门到精通 第十六章(任务通知)
(1)任务通知顾名思义是用来通知任务的,任务控制块中的结构体成员变量ulNotifiedValue就是这个通知值。(2)队列、信号量、事件标志组与任务通知的区别:①使用队列、信号量、事件标志组时都需另外创建一个结构体,通过中间的结构体进行任务间的通信。②使用任务通知时,任务结构体TCB中就包含了内部对象,可以直接接收其它任务发过来的“通知”。(3)只要合理、灵活地利用任务通知的特点,可以在一些场合中替代队列、信号量、事件标志组。原创 2025-01-31 22:27:47 · 770 阅读 · 0 评论 -
FreeRTOS从入门到精通 第十七章(软件定时器)
(1)定时器的概念:从指定的时刻开始,经过一个指定时间,然后触发一个超时事件,用户可自定义定时器的周期。(2)定时器的种类:①硬件定时器:芯片本身自带的定时器模块,硬件定时器的精度一般很高,每次在定时时间到达之后就会自动触发一个中断,用户在中断服务函数中处理信息。②软件定时器:具有定时功能的软件,可设置定时周期,当指定时间到达后要调用回调函数(也称超时函数),用户在回调函数中处理信息。const char * pcTimerName //软件定时器名字。原创 2025-02-01 03:45:00 · 946 阅读 · 0 评论 -
FreeRTOS从入门到精通 第十八章(Tickless低功耗模式)
(1)一般MCU都有相应的低功耗模式,裸机开发时可以使用MCU的低功耗模式。(2)FreeRTOS提供了一个叫Tickless的低功耗模式,方便带FreeRTOS操作系统的应用开发。(1)Tickless低功耗模式的本质是通过调用指令WFI实现睡眠模式。原创 2025-02-01 05:15:00 · 450 阅读 · 0 评论 -
FreeRTOS从入门到精通 第十九章(内存管理)
(1)动态方法创建:自动地从FreeRTOS管理的内存堆(其实就是全局中的一个超大数组,这个数组由FreeRTOS管理)中申请创建对象所需的内存,并且在对象删除后,可将这块内存释放回FreeRTOS管理的内存堆。(2)需用户提供各种内存空间,并且使用静态方式占用的内存空间一般固定下来了,即使任务、队列等被删除后,这些被占用的内存空间一般没有其它用途。(1)pvPortMalloc函数:①pvPortMalloc函数用于申请内存(建议与释放内存一一对应)。原创 2025-02-03 01:25:39 · 910 阅读 · 2 评论