FreeRTOS
文章平均质量分 93
_Amor_
这个作者很懒,什么都没留下…
展开
-
FreeRTOS 内存管理
函数描述申请内存释放内存获取当前空闲内存的大小。原创 2024-03-26 12:07:23 · 1037 阅读 · 1 评论 -
FreeRTOS Tickless 低功耗模式
很多应用场合对于功耗的要求很严格,比如可穿戴低功耗产品、物联网低功耗产品等。那么大家想一下,我们要如何去降低功耗呢?一般MCU都有相应的低功耗模式,裸机开发时可以使用 MCU 的低功耗模式。FreeRTOS 也提供了一个叫 Tickless 的低功耗模式,方便带 FreeRTOS 操作系统的应用开发。这里我们主要使用的是这个睡眠模式1. 如何降低功耗?Tickless 低功耗模式的本质是通过调用指令 WFI 实现睡眠模式!2. Tickless 模式的设计思想?那我们可以结合这个现象来设计 Tickless原创 2024-03-25 20:16:34 · 785 阅读 · 0 评论 -
FreeRTOS 软件定时器
定时器:从指定的时刻开始,经过一个指定时间(超时时间),然后触发一个超时事件,用户可自定义定时器的周期。类似于生活中的闹钟。硬件定时器:芯片本身自带的定时器模块(外设),硬件定时器的精度一般很高(相对于软件定时器),每次在定时时间到达之后就会自动触发一个中断(溢出中断),用户在中断服务函数中处理信息。原创 2024-03-25 15:32:13 · 1067 阅读 · 0 评论 -
FreeRTOS 任务通知
任务通知API函数主要有两类:① 发送通知 ,② 接收通知。注意:发送通知API函数可以用于任务和中断服务函数中;接收通知API函数只能用在任务中。因为中断它是没有任务控制块这个结构体的,所以接收通知API函数是不能用于中断中的。函数描述发送通知,带有通知值(三种方式均可使用)发送通知,带有通知值并且保留接收任务的原通知值(三种方式均可使用)发送通知,不带通知值(通知值++,应用于信号量)在中断中发送任务通知在中断中发送任务通知在中断中发送任务通知。原创 2024-03-25 10:03:29 · 937 阅读 · 0 评论 -
FreeRTOS 事件标志组
函数描述使用动态方式创建事件标志组使用静态方式创建事件标志组清零事件标志位在中断中清零事件标志位设置事件标志位在中断中设置事件标志位等待事件标志位设置事件标志位,并等待事件标志位更多事件标志组相关的API函数介绍请查阅《FreeRTOS开发指南》-- 第十六章“FreeRTOS事件标志组”原创 2024-03-24 16:38:29 · 639 阅读 · 0 评论 -
FreeRTOS 队列集
函数描述创建队列集队列添加到队列集中从队列集中移除队列获取队列集中有有效消息的队列在中断中获取队列集中有有效消息的队列。原创 2024-03-24 15:48:31 · 746 阅读 · 0 评论 -
FreeRTOS 信号量
优先级翻转这个现象主要就是由二值信号量导致的,并且在后面要介绍互斥信号量的时候,都是由优先级翻转牵扯出来的,所以说这个可以说是一个承上启下的作用了,所以这里有必要来好好介绍一下。优先级翻转:高优先级的任务反而慢执行,低优先级的任务反而优先执行优先级翻转在抢占式内核中是非常常见的,但是在实时操作系统中是不允许出现优先级翻转的,因为优先级翻转会破坏任务的预期顺序,可能会导致未知的严重后果。在使用二值信号量的时候,经常会遇到优先级翻转的问题。原创 2024-03-24 11:31:52 · 991 阅读 · 0 评论 -
FreeRTOS 消息队列
队列实际它的内存是分为两部分,第一个就是存放结构体的内存,接着是队列里面的队列项,它用来存放数据的,我们写入数据给队列就写入到队列项里面了。int8_t * pcHead /* 存储区域的起始地址(队列项的起始地址) *//* 下一个写入的位置 */union /* 当把这个结构体用作不同的功能的时候,联合体的作用是不一样的 *//* 当用作队列的时候,就使用的上面这个 *//* 当用作互斥信号量的时候,就使用的下面这个 */} u;/* 等待发送列表 */原创 2024-03-21 21:52:29 · 1041 阅读 · 0 评论 -
FreeRTOS 时间管理
相对延时:指每次延时都是从执行函数vTaskDelay()开始,直到延时指定的时间结束。绝对延时:指将整个任务的运行周期看成一个整体,适用于需要按照一定频率运行的任务。绝对延时示意图:(1) 为任务主体,本身任务要运行的时间,也就是任务真正要做的工作。(2) 是任务函数中调用 vTaskDelayUntil() 对任务进行延时(3) 为其他任务在运行。(高优先级)所以它这里包含了三部分,这三部分加起来就是它的绝对延时时间。实验目的:学习 FreeRTOS 相对延时和绝对延时API 函数的使用,并了原创 2024-03-21 19:48:48 · 486 阅读 · 0 评论 -
FreeRTOS任务相关API函数
此函数用于获取指定任务的任务优先级,使用该函数需将宏 INCLUDE_uxTaskPriorityGet 置 1形参描述xTask要查找的任务句柄,NULL代表任务自身返回值描述整数任务优先级数值此函数用于改变某个任务的任务优先级,使用该函数需将宏 INCLUDE_vTaskPrioritySet 为 1形参描述xTask任务句柄,NULL代表任务自身需要设置的任务优先级此函数用于获取系统中任务的任务数量返回值描述整型系统中任务的数量。原创 2024-03-20 16:20:01 · 807 阅读 · 0 评论 -
FreeRTOS时间片调度
轮流地享有相同的 CPU 时间(可设置), 叫时间片。在FreeRTOS中,一个时间片就等于SysTick 中断周期。Task3 只执行不到一个时间片,那下一次再回到 Task3 的时候,怎么样?它剩下的时间片不会要了,同样的也只给它一个时间片的时间去执行。原创 2024-03-20 11:26:11 · 1158 阅读 · 0 评论 -
FreeRTOS 任务调度
学习调度器之前的一些建议:本讲的内容和 Cortex-M 处理器的内核架构密切联系,所以学习之前建议大家:作用:用于启动任务调度器,任务调度器启动后, FreeRTOS 便会开始进行任务调度。作用:该函数用于完成启动任务调度器中与硬件架构相关的配置部分,以及启动第一个任务。注意:运行完 xPortStartScheduler() 之后是不会再返回了,直接跳到第一个任务去执行了。我们主要讲解两个函数:想象下 OS 应该如何启动第一个任务?比如 OS 创建了多个任务,那么多个任务 OS 怎么知道启动哪原创 2024-03-20 10:43:12 · 1269 阅读 · 1 评论 -
FreeRTOS的列表和列表项
列表是 FreeRTOS 中的一个数据结构,概念上和链表有点类似,列表被用来跟踪 FreeRTOS中的任务。那我们前面说过列表有就绪列表、挂起列表、阻塞列表等等这些,那这些表示什么?表示任务的一种状态。列表项就是存放在列表中的项目。意思它就是列表的子集。列表相当于链表,列表项相当于节点,FreeRTOS 中的列表是一个双向环形链表。列表的特点:列表项间的地址非连续的,它并不是依靠地址连接在一起,而是人为的连接到一起的。原创 2024-03-18 15:14:18 · 1254 阅读 · 0 评论 -
FreeRTOS 临界段代码保护及调度器挂起与恢复
什么是临界段:临界段代码也叫做临界区,是指那些必须完整运行,不能被打断的代码段。适用场合如:问题 1:什么可以打断当前程序的运行?问题 2:如何才能不被打断?注意:不在 FreeRTOS 管理范围内的中断,它们还是可以照样打断的。FreeRTOS 在进入临界段代码的时候需要关闭中断,当处理完临界段代码以后再打开中断。任务级临界区调用格式示例:中断级临界区调用格式示例:特点:挂起它的意思就是暂停,挂起任务调度器, 代表任务就不能切换、不能调度了。但是中断它是依旧正常响应的,调用此函数不需要关闭中断。那这原创 2024-03-15 10:12:07 · 999 阅读 · 0 评论 -
FreeRTOS 中断管理
简介:让 CPU 打断正常运行的程序,转而去处理紧急的事件(程序),就叫中断。中断执行机制,可简单概括为三步:说到中断,那必不可少就提到我们的中断优先级,因为中断它说到底其实就是一个比较紧急的事件,我们要优先去处理紧急事件,但是你在处理的过程中难免有可能会遇到更加紧急的事情,那这时候咋办?那这时候你就要去处理更加紧急的事情。那这个对应到中断,就是它中断优先级要更高。也就是说中断优先级高的可以抢占优先级低的中断去执行,也就是中断嵌套。ARM Cortex-M 使用了 8 位宽 的寄存器来配置中断的优先等级,这原创 2024-03-14 12:16:31 · 2553 阅读 · 0 评论 -
FreeRTOS 的任务挂起和恢复
函数原型:形参描述xTaskToSuspend待挂起任务的任务句柄此函数用于挂起任务,使用时需将宏 INCLUDE_vTaskSuspend 配置为 1。无论优先级如何,被挂起的任务都将不再被执行,直到任务被恢复 。1.2 任务恢复1.2.1 任务中恢复(在任务函数中调用)函数原型:形参描述xTaskToResume待恢复任务的任务句柄使用该函数注意宏:INCLUDE_vTaskSuspend必须定义为 11.2.2 中断中原创 2024-03-13 15:54:17 · 1079 阅读 · 0 评论 -
FreeRTOS 的任务创建和删除
在 FreeRTOSConfig.h 中。/* START_TASK 任务 配置* 包括: 任务句柄 任务优先级 堆栈大小 创建任务*/ # define START_TASK_PRIO 1 /* 任务优先级 */ # define START_TASK_STACK_SIZE 128 /* 堆栈大小,单位字,乘以 4 变成字节 */ TaskHandle_t start_task_handler;/* 任务句柄 */ void start_task(void * pvParameters);原创 2024-03-13 13:45:38 · 1665 阅读 · 0 评论 -
FreeRTOS 基础知识
调度器:就是使用相关的调度算法来决定当前需要执行的哪个任务。那我们说了,我们 RTOS 会创建很多个任务,那这个任务同一时刻只能执行一个,那要执行哪一个呢?就由这个调度算法来决定。抢占式调度。主要是针对优先级不同的任务,每个任务都有一个优先级(我们创建每一个任务都会分配一个优先级给它),优先级高的任务可以抢占优先级低的任务,然后去执行。那这里要注意:FreeRTOS 是优先级的数值越大,它的任务优先级就越大。时间片调度。原创 2024-01-13 12:40:57 · 931 阅读 · 1 评论 -
FreeRTOS 入门知识
我们把 FreeRTOS 分成两部分,这样一看是比较清晰的。Free 直译过来就是自由的免费的,RTOS 我们前面有介绍到就是实时操作系统,所以两个连一起就是一个免费的嵌入式实时操作系统了。它的特点就是免费的。那我相信大家呢,不管你是做什么产品,你第一个考虑的是什么,其实就是成本,这个 FreeRTOS 它是一个免费的,所以在成本上为 0,非常好这点。但是市面上免费的 os 很多啊,那我为什么要用你啊,要学你啊。因为你不单单只考虑成本,你要考虑什么?原创 2024-01-11 20:00:41 · 1287 阅读 · 1 评论