
FreeRTOS 教程
文章平均质量分 96
FreeRTOS 教程:从零基础到入门,在这个专栏中,我们将探讨FreeRTOS操作系统的各个方面,旨在为初学者提供一个全面的学习平台,同时也为有经验的开发者提供进阶知识和技巧。
The_xzs
多读书,多看报,少吃零食,多睡觉。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【FreeRTOS 教程 八】直达任务通知
可以参考通过 FreeRTOS 通知减少 RAM 占用空间并加速执行。每个 RTOS 任务都有一个任务通知数组。每个任务,都有“挂起”或“非挂起”的通知状态和一个32位通知值。常量 configTASK_NOTIFICATION_ARRAY_ENTRIES 设置任务通知数组中的索引数量。在 FreeRTOS V10.4.0 版本前,任务只有单条任务通知,而无通知数组。直达任务通知是直接发送到任务的事件,而不是通过中间对象(如队列、事件组或信号量)间接发送至任务的事件。向任务发送“直达任务通知”原创 2025-02-03 17:24:53 · 827 阅读 · 0 评论 -
【FreeRTOS 教程 七】互斥锁与递归互斥锁
互斥锁是包含优先级继承机制的二进制信号量。鉴于二进制信号量是实现同步(任务之间或任务与中断之间)的更好方式,因此互斥锁更适合实现简单的相互排斥(即互斥)。用于互斥时,互斥锁就像用于保护资源的令牌。当一个任务希望访问资源时,必须首先获得(“获取”)该令牌。使用完资源后,任务必须“返还”令牌,以便其他任务有机会访问相同的资源。用户可对一把递归互斥锁重复加锁。只有用户为每个成功的 xSemaphoreTakeRecursive() 请求调用 xSemaphoreGiveRecursive() 后,原创 2025-02-02 18:59:10 · 1569 阅读 · 0 评论 -
【FreeRTOS 教程 六】二进制信号量与计数信号量
队列数据可用时,任务将取消阻塞,从队列中检索数据,然后执行必要的数据处理。阻塞时间表示在尝试“获取”信号量时,如果信号量不足立即可用,任务应进入阻塞状态的。中断始终“提供”信号量(将写入队列使其为满),但从不获取信号量。在许多情况下,任务通知可以提供二进制信号量的轻量级替代方案。创建一个计数信号量,并返回一个可以引用该新建信号量的句柄。创建一个计数信号量,并返回一个可以引用该新建信号量的句柄。创建一个二进制信号量,并返回一个可以引用该信号量的句柄。创建一个二进制信号量,并返回一个可以引用该信号量的句柄。原创 2025-02-02 15:16:56 · 898 阅读 · 0 评论 -
【FreeRTOS 教程 五】FreeRTOS 内存管理细致讲解
每个提供的实现都包含在单独的源文件中(分别是 heap_1.c、heap_2.c、heap_3.c、heap_4.c 和 heap_5.c),位于主 RTOS 源代码下载内容的 Source/Portable/MemMang 目录下。每次一个项目中,只应包含其中一个源文件[这些可移植层函数定义的堆将由 RTOS 内核使用,即使用 RTOS 的应用程序选择使用自己的堆实现]。但是,如果分配给正在创建任务的堆栈的大小不是总相同,那么可用的空间内存可能会被碎片化成许多小块,最终导致分配失败。原创 2025-01-26 15:41:32 · 1067 阅读 · 0 评论 -
【FreeRTOS 教程 四】队列创建与发布项目到队列
一个被限制在受保护的内存区域的任务可以将数据传递给一个被限制在不同的受保护内存区域的任务, 因为通过调用队列发送函数 来调用 RTOS 将提高微控制器的权限等级。消息通过队列以副本的方式发送, 这意味着数据(可以是更大的缓冲区的指针)本身被复制到队列中, 而不是队列始终只存储对数据的引用。单个队列可用于接收不同的消息类型, 以及来自多个地点的消息, 方法是将队列定义为保存一个结构体,该结构的一个成员持有消息类型, 另一个成员保存消息数据(或消息数据的一个指针)。队列中的每个项目必须具有相同的大小。原创 2025-01-25 22:32:28 · 1347 阅读 · 0 评论 -
【FreeRTOS 教程 三】协程状态、优先级、实现及调度
crQUEUE_SEND_FROM_ISR() 和 crQUEUE_RECEIVE_FROM_ISR()宏是 协程版的函数,对应于任务中使用的 xQueueSendFromISR()和 xQueueReceiveFromISR()函数。crQUEUE_SEND_FROM_ISR()和 crQUEUE_RECEIVE_FROM_ISR()宏是协程版的函数,对应于任务中使用的 xQueueSendFromISR()和 xQueueReceiveFromISR()函数。协程 可以在钩子函数内阻塞。原创 2025-01-24 15:30:18 · 1051 阅读 · 0 评论 -
【FreeRTOS 教程 二】任务优先级与任务控制
如果正在使用的移植实现了使用“前导零计数”类指令的移植优化任务选择机制 (针对单一指令中的任务选择)而且 configUSE_PORT_OPTIMISED_TASK_SELECTION 在 FreeRTOSConfig.h 中设置为 1,则 configMAX_PRIORITIES 无法高于 32。该函数可以恢复已挂起的任务。对 vTaskSuspend的调用不会累积次数,例如:若在同一任务上调用 vTaskSuspend()两次, 将仍然仅需调用一次vTaskResume(),即可准备完毕挂起的任务。原创 2025-01-23 16:24:52 · 1430 阅读 · 0 评论 -
【FreeRTOS 教程 一】任务结构体及其基础创建使用
任务提供了更灵活的并发控制,适合需要抢占式调度的场景,但可能会增加RAM的使用。协程则是一种更轻量级的并发机制,适合资源受限的环境,但它们的调度是协作式的,需要开发者更仔细地管理协程的执行。当任务实际执行时,它被称为处于运行状态。任务当前正在使用处理器。如果运行 RTOS 的处理器只有一个内核, 那么在任何给定时间内都只能有一个任务处于运行状态。准备就绪任务指那些能够执行(它们不处于阻塞或挂起状态), 但目前没有执行的任务, 因为同等或更高优先级的不同任务已经处于运行状态。原创 2025-01-22 17:58:15 · 841 阅读 · 1 评论