
FreeRTOS
文章平均质量分 81
侥幸哥f
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
FreeRTOS-内存管理
在使用FreeRTOS创建任务、队列、信号量等对象时,有动态创建和静态创建(本质上内存分配的问题FreeRTOS提供了5种动态内存管理算法,分别为heap_1heap_2heap_3heap_4heap_5,如下所示heap_1:只实现了pvportMallor(创建),没有实现vportFree(释放),只能申请无法释放内存,管理的内存堆是一个数组heap_2:使用最适应算法,支持释放内存,但不能将相邻的空闲内存块合并成一个大的空闲内存块,不可避免的会产生内存碎片内存碎片。原创 2024-10-11 12:47:17 · 484 阅读 · 0 评论 -
FreeRTOS-Tickless低功耗模式
裸机开发时可以使用MCU的低功耗模式,见STM32F1单片机-PWR电源控制FreeRTOS提供了Tickless的低功耗模式,方便应用开发FreeRTOS使用睡眠模式进入低功耗模式,Tickless低功耗模式本质上是调用WFI指令实现睡眠模式有时候在任务运行时间统计中,大部分的时间都是在执行空闲任务系统其他任务被阻塞或者挂起时运行),所以需要进入低功耗模式去降低功耗的情况下不影响系统运行,即在执行空闲任务的期间,让MCU进入低功耗模式,当其他任务准备运行时,唤醒MCU退出低功耗模式宏配置成1。原创 2024-10-10 14:51:50 · 524 阅读 · 0 评论 -
FreeRTOS-软件定时器
定时器:指定时间开始,经过一个指定的时间,触发一个超时事件,用户可自定义定时器的周期硬件定时器:硬件自带的定时器模块,精度高,定时时间到达以后可以触发中断,调用中断函数缺点是个数有限软件定时器具有定时功能的软件,可设置定时周期,当指定时间到达后要调用回调函数(也称超时函数),用户在回调函数中处理信息,成本低,内存足够的情况下个数不限,但精度不高可裁剪配置成1使能定时器、支持设置单次定时器或周期定时器软件定时器的超时回调函数是由软件定时器服务任务调用的,超时回调函数本身不是任务。原创 2024-10-10 14:06:22 · 1558 阅读 · 0 评论 -
FreeRTOS-任务通知
任务通知:用来通知任务,任务控制块(TCB)中的结构体成员变量ulNotifiedValue就是这个通知值使用队列信号量事件标志组时都需另外创建一个结构体,通过中间的结构体进行间接通信使用任务通知时,任务结构体TCB中就包含了内部对象,可以直接接收别人发来的通知任务通知优势效率高使用内存更小(使用其他方法需要创建对应的结构体)任务通知劣势无法发数据给ISR(ISR没有任务结构体)、无法广播给多个任务(任务通知只能是被指定的一个任务接收并处理)、无法缓存多个数据(只能保存一个数据)、原创 2024-10-09 12:26:22 · 1049 阅读 · 0 评论 -
FreeRTOS-事件标志组
事件标志位:用一个位来表示事件是否发生,裸机中的中断标志位等等事件标志组:是一组事件标志位的集合,简单认为就是一个整数事件标志组特点:它每一个位表示一个事件(高8位不算)。每一位事件的含义由用户自己决定(1表示发生,0表示未发生)。任意任务或中断都可以读写这些位。可以等待某一位成立或者等待多位同时成立事件标志组的32位标志位,其中的高8位用来存储事件标志组的控制信息,低24位用作存储事件标志,一个事件组最多可以存储24个事件标志,位23表示事件标志23等以此类推。原创 2024-10-08 20:37:51 · 412 阅读 · 0 评论 -
FreeRTOS-信号量
信号量是一种解决同步问题的机制,可以实现对共享资源的有序访问。信号量中存在计数值,计数值>0时表示信号量有资源信号量仅存放数值,无法存放其他数据;释放信号量,不可阻塞,计数值++,计数值最大时,返回失败;获取信号量,计数值–,当没有资源时,可阻塞二值信号量的本质是一个长度为1的队列,该队列就只有空和满两种状态(0,1),这就是二值二值信号量通常用于互斥访问(条件判断只有一种情况满足)或任务同步(任务按前后顺序执行下面是二值信号量相关的API函数使用二值信号量的过程创建二值信号量。原创 2024-09-28 16:06:03 · 1196 阅读 · 0 评论 -
FreeRTOS-队列及队列集
队列是任务到任务、任务到中断、中断到任务数据交流的一种机制(消息传递使用队列的情况下如图,在写读队列时,会进入临界区,无法触发任务调度,不会出现多任务冲突,只需要调用API函数即可在队列中可以存储数量有限大小固定的数据。队列中的每一个数据叫做“队列项目”,队列能够存储“队列项目”的最大数量称为队列的长度队列采用先进先出(FIFO)的数据存储缓冲机制,即先入队的数据会先从队列中被读取,FreeRTOS也可以配置成先进后出的方式FreeRTOS中队列采用实际值传递,或传递地址任何任务和中断。原创 2024-09-27 16:05:54 · 801 阅读 · 0 评论 -
FreeRTOS-任务查询及延时函数
【代码】FreeRTOS-任务查询及延时函数。原创 2024-09-24 11:44:16 · 415 阅读 · 0 评论 -
FreeRTOS-时间片调度
同等优先级任务轮流的享有相同的CPU时间(可设置),叫时间片,在FreeRTOS中,一个时间片就等于SysTick中断周期,所以说时间片大小取决于滴答定时器中断频率运行完Task1一个时间片后,切换到Task2,Task2运行完一个时间片后,切换到Task3运行假设Task3运行到一半时,Task3被阻塞(系统延时或等待信号量等)了,此时直接切换到Task1。原创 2024-09-22 16:33:21 · 649 阅读 · 0 评论 -
FreeRTOS-列表及列表项
链表是一种物理存储上非连续,数据元素的逻辑顺序通过链表中的指针链接次序,实现的一种线性存储结构,主要分为单向链表和双向链表链表由一系列节点(链表中每一个元素称为节点)组成,节点在运行时动态生成,每个节点包括存储数据的数据域和存储下一个节点地址的指针域(第n节点的指针域保存第n+1节点的地址)链表最大的作用就是通过节点把离散的数据链接在一起,组成一个表,常规操作包括节点的插入和删除,人为规定了一个根节点,根节点有一个节点计数器,用于统计整条链表的节点个数下图为单向链表图,每个元素都是一个节点,里面包括数据域。原创 2024-09-21 17:56:32 · 577 阅读 · 0 评论 -
FreeRTOS-临界段保护及任务调度器的挂起和恢复
临界区运用首先在任务创建实验里临界段代码又叫临界区,是指那些必须完整运行不能被打断(中断或者任务调度)的代码段外设-需要严格按照时序初始化的外设:IIC、SPI等。系统-系统自身需求。用户-用户需求临界区是直接屏蔽了中断,系统任务调度靠中断,ISR也靠中断FreeRTOS在进入临界段代码的时候会关闭中断,当处理完临界段代码后再打开中断成对使用支持嵌套尽量保持临界段耗时短下面是临界段相关函数//任务级进入临界段//任务级退出临界段//中断级进入临界段//中断级退出临界段任务级临界区。原创 2024-09-14 11:22:40 · 520 阅读 · 0 评论 -
FreeRTOS-中断管理
具体STM32的NVIC管理见添加链接描述ARM Cortex-M使用了8位宽的中断优先级配置寄存器来配置中断的优先等级STM32只用了寄存器的高4位,所以只提供16(2^4)级的最大中断优先等级STM32的中断优先级分为抢占优先级和子(响应)优先级,建议将所有优先级位指定为抢占优先级位,方便FreeRTOS管理中断优先级数值越小,优先级越高。任务优先级数值越大,优先级越高抢占优先级:抢占优先级高的中断可以打断正在执行且抢占优先级低的中断子优先级:当同时发生具有相同抢占优先级。原创 2024-09-13 14:49:41 · 1374 阅读 · 0 评论 -
FreeRTOS-任务挂起和恢复
任务挂起是指将某个任务从就绪态或运行态中移除,并将其置于挂起态,让它暂时不再参与调度,不分配CPU时间片,直到它被恢复挂起任务时,它会立即停止运行,直到该任务被显式恢复。挂起任务用于节省CPU资源或防止某些任务在特定条件下继续执行挂起任务可以恢复,而删除任务无法恢复任务恢复是指将挂起的任务从挂起态恢复到就绪态,使其可以再次参与调度,并根据其优先级来决定何时运行任务恢复通常是在外部条件发生变化、或另一个条件ISR(中断服务程序)通知当前任务可以继续工作时使用下面是任务挂起和恢复的API函数。原创 2024-09-11 21:27:47 · 716 阅读 · 0 评论 -
FreeRTOS-任务创建和删除
任务的创建和删除本质就是调用FreeRTOS的API函数(指可供用户调用的函数,用于管理和控制操作系统的各种功能)下面是任务创建和删除的API函数和描述//动态方式创建任务//静态方式创建任务//删除任务。原创 2024-09-10 16:30:32 · 913 阅读 · 0 评论 -
FreeRTOS-基本介绍和移植STM32
裸机:前后台系统,前台系统指的是中断服务函数,后台系统指的是大循环,即应用程序特点实时性差、delay(浪费资源)、结构臃肿(实现功能都放在无限循环)FreeRTOS开发:实时操作系统,强调的是实时性特点分而治之(实现功能划分为多个任务)、延时函数(不会空等待,会让出CPU的使用权给其他任务,即任务调度)、抢占式(高优先级任务抢占低优先级)、任务堆栈(每个任务都有自己的栈空间,用于保存局部变量以及任务的上下文信息)任务调度器就是决定在某一个时刻调用哪一个任务,切换速度很快,造成在。原创 2024-09-08 13:10:16 · 2076 阅读 · 0 评论