
Free RTOS 实时操作系统
文章平均质量分 78
学习实时操作系统学习过程中的笔记和感悟
九层指针
单片机与嵌入式。
如果你交给某人一个程序,你将折磨他一整天;如果你教某人如何编写程序,你将折磨他一辈子。
展开
-
FreeRTOS内存管理算法选择方法
即可选择 FreeRTOS 的内存管理算法。无需宏定义切换,但需注意不同算法的适用场景和额外配置要求。在 FreeRTOS 中,内存管理算法的选择并非通过宏定义直接切换,而是通过。FreeRTOS 提供了 5 种内存管理实现(文件加入工程,并配置。原创 2025-03-27 18:01:07 · 505 阅读 · 0 评论 -
基于队列(Queue)机制改进或构建而来的通信方法介绍
通过这种层级化的设计,FreeRTOS在保持队列核心机制的同时,为不同场景提供了最优的通信抽象。原创 2025-03-27 17:52:47 · 894 阅读 · 0 评论 -
FreeRTOS的Tickless低功耗模式的实现原理
值得庆幸的是:FreeRTOS 的低功耗 Tickless 模式机制已经处理好了这些难点。可以在本该空闲任务执行的期间,让MCU进入相应的低功耗模式;当其他任务准备运行的时候,唤醒MCU退出低功耗模式。2、任何中断均可唤醒MCU,若滴答定时器频繁中断则会影响低功耗的效果,可以关掉滴答定时器中断吗?解决方案:将滴答定时器的中断周期修改为低功耗运行时间,这样不就两全其美了!1、进入低功耗之后,多久唤醒?为了可以降低功耗,又不影响系统运行,该如何做?退出低功耗后,需补上系统时钟节拍数。一、低功耗机制的核心原理。原创 2025-03-27 17:40:32 · 727 阅读 · 0 评论 -
Tickless 低功耗模式,可以通过关闭外设更加省电
如果要进入其他模式,更加节能,需要修改底层代码,这个是可能存在冲突的,不要瞎改。如果想要更加节能,可以在下面两个函数中关闭更多没用到的外设,这样更安全。FreeRTOS 的 Tickless 低功耗模式与 STM32 硬件低功耗模式的结合需要谨慎处理,直接修改底层代码进入更深层次的低功耗模式(如停止模式)可能存在风险,而通过 configPRE_SLEEP_PROCESSING。停止模式会关闭主时钟(如 HSE/HSI),唤醒后需手动切换回 PLL,若未正确初始化时钟,可能导致系统崩溃。原创 2025-03-27 17:23:05 · 943 阅读 · 0 评论 -
Tickless 低功耗模式相关函数
是一种在系统空闲时暂停定时器中断(SysTick)的技术,允许微控制器(MCU)进入深度睡眠状态以降低功耗,直到下一个任务就绪或外部事件唤醒。所有唤醒中断(如 GPIO、RTC)必须配置为在低功耗模式下有效,并确保中断标志在唤醒后清除。使用万用表或功耗分析仪测量 MCU 在空闲时的电流,确认进入低功耗状态后电流显著下降。在睡眠前关闭或配置外设为低功耗模式,唤醒后需重新初始化(如 UART、SPI)。硬件定时器的精度影响系统时间修正,需校准时钟源(如 RTC 的时钟偏差)。)确认任务唤醒后调度正常。原创 2025-03-27 16:51:38 · 919 阅读 · 0 评论 -
软件定时器 API 函数详解
允许在指定时间间隔或单次触发后执行回调函数,由守护任务(Timer Task)统一管理。适用于周期性任务调度或延时操作,无需占用硬件定时器资源。以下是软件定时器相关 API 的全面讲解,涵盖动态/静态创建、启停控制及中断安全操作。通过合理使用软件定时器,可实现精准的周期性任务调度,优化系统资源分配。务必遵循回调函数的设计规范,确保系统的实时性和稳定性。FreeRTOS 的。原创 2025-03-27 11:40:11 · 287 阅读 · 0 评论 -
匈牙利命名法
ux: 无符号BaseType_t: 表示资源使用峰值xQueue: 队列句柄(类型为QueueHandle_t): void指针类型参数: TickType_t类型的等待时间。原创 2025-03-27 11:27:27 · 390 阅读 · 0 评论 -
软件定时器(Software Timer):概念、设计意义与应用实例
是 FreeRTOS 中一种基于系统节拍(Tick)的任务调度机制,允许开发者创建。中执行,其行为受以下配置影响(在。软件定时器的回调函数在独立的。,通过回调函数处理具体逻辑。原创 2025-03-27 11:01:14 · 498 阅读 · 0 评论 -
任务通知相关的 API 函数详解
是一种轻量级的高效通信机制,允许任务之间或中断直接向特定任务发送事件或数据。相比队列、信号量等传统机制,任务通知具有。通过合理使用任务通知,可以在资源受限或性能敏感的场景中显著提升效率,但需注意其适用边界,避免滥用导致代码可维护性下降。(无需额外创建对象),但功能相对受限(如仅支持单向通信)。以下是任务通知相关的 API 函数详解及使用指南。每个通知只能由一个任务接收,无法像队列一样广播给多个任务。需确保发送方持有正确的目标任务句柄(可通过。)不能在中断服务程序(ISR)中调用。任务通知的接收函数(如。原创 2025-03-26 17:11:19 · 752 阅读 · 0 评论 -
任务通知(Task Notification):概念、设计意义与应用实例
通过直接操作任务的内部状态实现同步和数据传递。是 FreeRTOS 中一种。原创 2025-03-26 16:46:21 · 402 阅读 · 0 评论 -
事件标志组相关的核心 API 函数
在 FreeRTOS 中,是一种用于任务间同步和事件管理的机制,允许任务等待多个事件的不同位组合(bitwise combinations)。原创 2025-03-26 16:26:25 · 738 阅读 · 0 评论 -
事件标志组(Event Group):概念、设计意义与应用实例
的形式管理多个事件状态。每个事件对应一个二进制位(bit),任务可以设置、等待或清除这些位,实现灵活的事件触发与响应。传统信号量或队列机制需为每个事件创建独立对象,导致。若仅需向单个任务发送事件标志,可优先使用。,其性能更高(无需创建事件组对象)。是 FreeRTOS 中用于。时,退出时会自动清除。原创 2025-03-26 16:20:02 · 838 阅读 · 0 评论 -
队列集相关的 API 函数详解
队列集是 FreeRTOS 中管理多事件的高效工具,通过集中监听多个队列或信号量,简化了复杂事件处理逻辑。合理使用队列集可以提升代码可维护性,但需注意事件容量和性能开销。原创 2025-03-26 11:46:53 · 525 阅读 · 0 评论 -
队列集xQueueSelectFromSet(), 如果同时,有两个队列触发,怎么办?先处理哪一个?
如果需明确区分事件优先级或记录多事件状态,可以使用。在 FreeRTOS 中,当使用。监听多个队列或信号量时,如果。在任务中处理完一个成员后,假设队列集包含两个队列。原创 2025-03-26 11:40:48 · 249 阅读 · 0 评论 -
队列集(Queue Set):概念、设计意义与应用实例
它允许任务同时监视多个通信对象(队列、二值信号量、计数信号量等),并在。一个监控任务需实时处理所有传感器数据、响应控制命令,并在报警时立即执行紧急操作。,任务阻塞在队列集上,任一对象触发时读取并处理对应事件。立即唤醒任务,从而简化多路事件处理的逻辑。若直接使用传统的多队列阻塞方式(如依次调用。是 FreeRTOS 中用于。原创 2025-03-26 11:24:32 · 534 阅读 · 0 评论 -
优先级继承并不能完全的消除优先级翻转的问题
优先级继承通过动态调整优先级,显著降低了单层资源竞争引发的优先级反转影响,但它并非“银弹”。在复杂的多资源竞争、嵌套锁、中断环境等场景下,仍需结合其他机制(如优先级天花板)和良好的系统设计,才能最大限度保障实时性。理解其局限性,是构建可靠嵌入式系统的关键。确实,优先级继承(Priority Inheritance)虽然能有效。的场景,而无法解决所有潜在的复杂情况。其核心原因在于,优先级继承仅能优化。优先级继承无法解决由。原创 2025-03-26 11:06:33 · 498 阅读 · 0 评论 -
FreeRTOS优先级翻转问题及解决方法
在 FreeRTOS 中,优先级翻转的典型诱因是低优先级任务占用资源时被中优先级任务抢占。通过使用互斥量(内置优先级继承)或设计时遵循实时系统原则(如优先级天花板、缩短临界区),可有效避免此问题。原创 2025-03-26 09:39:22 · 408 阅读 · 0 评论 -
递归互斥信号量相关的 API 函数详解
递归互斥量与普通互斥量共享优先级继承逻辑,当高优先级任务等待时,持有互斥量的任务(即使处于递归获取状态)会临时提升优先级。(获取多少次,就必须释放多少次)。以下是递归互斥信号量相关的 API 函数详解,包括动态和静态创建两种方式。若任务在递归获取后因逻辑错误未完全释放,会导致资源永久锁死。通过合理使用递归互斥量,可以简化嵌套资源访问的代码逻辑,避免因重复获取同一资源导致的死锁问题。FreeRTOS 中的递归互斥信号量(Recursive Mutex)是一种允许。的互斥量,专为解决任务需要。原创 2025-03-25 20:39:42 · 747 阅读 · 0 评论 -
互斥信号量相关的 API 函数详解
(Priority Inheritance),当高优先级任务因等待低优先级任务持有的互斥量而阻塞时,低优先级任务会临时继承高优先级任务的优先级。以下是互斥信号量相关的 API 函数详解,包括动态和静态创建两种方式。通过合理使用互斥信号量,可确保共享资源的安全访问,避免数据竞争和优先级反转问题。FreeRTOS 中的互斥信号量(Mutex Semaphore)是一种特殊的。,专为解决资源互斥访问和。原创 2025-03-25 20:36:37 · 513 阅读 · 0 评论 -
计数信号量相关的 API 函数详解
FreeRTOS 中的计数信号量(Counting Semaphore)用于管理多个资源的访问或事件计数,允许信号量的值在 0 到设定的最大值之间变化。以下是计数信号量相关的 API 函数详解,包括动态和静态创建两种方式。通过合理使用计数信号量,可以实现资源池管理、事件批量处理、流量控制等功能。原创 2025-03-25 20:32:18 · 528 阅读 · 0 评论 -
FreeRTOS信号量API函数介绍--专用和共用API函数
FreeRTOS中的四种信号量类型(二值信号量、计数信号量、互斥信号量、递归互斥信号量)各自具有专用和共用的API函数。通过合理选择信号量类型及对应的API,可高效实现任务同步、资源管理及临界区保护。:任务同步、简单互斥(非优先级继承)。初始化时信号量为空(不可用),需调用。需预先定义句柄,初始状态为可用。:资源互斥访问,支持优先级继承。:同一任务重复获取同一互斥量。:管理多资源池、事件计数。原创 2025-03-25 20:21:16 · 426 阅读 · 0 评论 -
二值信号量相关的 API 函数详解
FreeRTOS 中的二值信号量(Binary Semaphore)是一种用于任务间同步的核心机制,常用于任务与任务之间或任务与中断之间的简单事件通知。以下是二值信号量相关的 API 函数详解,包括动态创建和静态创建两种方式。通过灵活组合这些 API,可以实现任务同步、资源锁、中断与任务通信等功能。原创 2025-03-25 18:17:39 · 280 阅读 · 0 评论 -
FreeRTOS中信号量的三种用途给出的具体例子
假设有一个打印机资源,多个任务可能需要打印文档。为了防止多个任务同时访问打印机导致打印混乱,我们可以使用一个互斥信号量(Mutex)。这些例子展示了在FreeRTOS中如何使用信号量来处理不同的同步和互斥问题。通过信号量,可以有效地管理资源,确保任务的协调执行。假设有一个缓冲区可以存储最多10个数据包。我们可以使用一个计数信号量来跟踪当前缓冲区中可用空间的数量。假设有一个任务负责从网络接收数据,另一个任务负责处理这些数据。接收任务在接收到数据后需要通知处理任务。原创 2025-03-25 15:36:14 · 185 阅读 · 0 评论 -
FreeRTOS 中导致优先级翻转的机制及解决方案
在 FreeRTOS 中,共享资源由二值信号量。原创 2025-03-25 14:31:48 · 684 阅读 · 0 评论 -
二值信号量(Binary Semaphore):概念、设计意义与应用实例
二值信号量的核心价值轻量级的事件通知机制,实现中断与任务的高效解耦,适用于高频、单向事件触发场景。典型应用场景中断通知任务处理数据(如 UART 接收完成)。任务间简单事件同步(如启动阶段性操作)。替代裸机编程中的全局标志位,增强可维护性。设计选择若需传递数据或多次事件计数 → 使用队列(Queue)或计数信号量。若仅需通知事件发生 → 优先选择任务通知(性能更优)。原创 2025-03-25 12:18:49 · 703 阅读 · 0 评论 -
互斥信号量(Mutex):概念、设计意义与应用实例
互斥信号量(Mutex) 是 FreeRTOS 中用于保护共享资源的同步机制。其核心特性如下:在多任务系统中,多个任务可能同时操作共享资源(如 UART 发送数据、修改全局变量)。若不加保护,会导致 数据竞争(Data Race),引发不可预测的错误。早期的 FreeRTOS 使用二值信号量实现资源互斥,但存在致命问题:为解决优先级反转,FreeRTOS 引入互斥量:多个任务需通过 SPI 总线与不同外设通信(如读取传感器、写入显示屏)。冲突风险:若任务 A 正在操作 SPI,任务 B 抢占并发送数据,会原创 2025-03-25 11:54:56 · 710 阅读 · 0 评论 -
FreeRTOS 中的信号量:概念、类型与用法详解
二值信号量:单次事件通知(如中断触发)。计数信号量:多资源池管理(如内存块、连接池)。互斥量:保护临界资源(如硬件外设)。递归互斥量:允许同一任务多次获取同一锁。正确选择信号量类型可显著提升系统可靠性与效率,开发者需根据具体场景权衡设计。原创 2025-03-25 11:38:38 · 393 阅读 · 0 评论 -
队列创建-动态和静态方法
通过合理选择队列创建方式,可以在资源受限的嵌入式系统中实现高效、可靠的任务间通信。在FreeRTOS中,队列是实现任务间通信的核心机制。原创 2025-03-25 11:11:40 · 410 阅读 · 0 评论 -
在 FreeRTOS 中,队列可以传递值或指针
在 FreeRTOS 中,队列可以传递值或指针,具体取决于数据大小和场景需求。根据场景选择合适的方式,确保数据安全和效率!原创 2025-03-25 10:59:54 · 401 阅读 · 0 评论 -
vTaskDelay() 的参数是 系统节拍数(ticks),而非毫秒。
1000U:将毫秒转换为 ticks,适配 FreeRTOS 时间函数。:参数必须为 ticks,需通过宏转换毫秒值。系统配置:合理选择以平衡实时性和性能。原创 2025-03-25 10:38:41 · 611 阅读 · 0 评论 -
FreeRTOS队列API函数详解
FreeRTOS 中的队列(Queue)是一种重要的任务间通信机制,支持任务与任务、任务与中断服务程序(ISR)之间的数据传输。通过合理使用队列,可以显著提高 FreeRTOS 系统的稳定性和模块化程度。建议结合具体需求选择阻塞模式和数据传递方式。的数据缓冲方式,并提供线程安全的操作接口。原创 2025-03-25 09:34:03 · 823 阅读 · 0 评论 -
从队列中接收数据API函数
【代码】从队列中接收数据API函数。原创 2025-03-24 20:26:55 · 848 阅读 · 0 评论 -
xQueueSend()函数和xQueueGenericSend()函数
是通过宏定义对其的简化调用。是一个通用函数,用于向队列发送数据,而。在 FreeRTOS 中,原创 2025-03-24 20:15:50 · 465 阅读 · 0 评论 -
FreeRTOS队列消息传递与任务接收保障
的通信机制,但消息的接收依赖于任务的调度逻辑。如果多个任务尝试从同一个队列接收消息,可能会导致消息被“错误”的任务接收。在 FreeRTOS 中,队列(Queue)是一种基于。原创 2025-03-24 20:04:08 · 658 阅读 · 0 评论 -
`portYIELD` 和 `portYIELD_FROM_ISR()`
是与任务调度密切相关的关键宏,其功能是触发任务切换。在 FreeRTOS 中,原创 2025-03-24 18:15:18 · 484 阅读 · 0 评论 -
FreeRTOS 中的队列
FreeRTOS 的消息队列通过环形缓冲区和任务阻塞列表实现高效的数据传递与同步。使用时需注意队列长度、数据项大小及中断安全操作。结合阻塞机制和优先级设计,队列可有效协调多任务协作,是复杂嵌入式系统的核心通信工具。FreeRTOS 的消息队列(Queue)是实现任务间或任务与中断间通信的核心机制,支持数据传递和同步。FreeRTOS 队列通过结构体。原创 2025-03-24 18:09:49 · 952 阅读 · 0 评论 -
FreeRTOS 中的延时函数
确保严格的周期性执行。理解其源码实现(如列表操作和 SysTick 处理)有助于优化任务调度和调试时间相关问题。实际开发中需注意时间单位转换、优先级设计和低功耗模式的影响。FreeRTOS 中的延时函数是任务调度的核心机制之一,用于控制任务的执行节奏,实现任务阻塞、周期性执行或等待特定时间。FreeRTOS 的延时函数通过系统节拍计数器和阻塞列表实现任务的时间管理。原创 2025-03-24 17:56:45 · 637 阅读 · 0 评论 -
FreeRTOS功能与特点详解
FreeRTOS 是一个轻量级、开源的实时操作系统(RTOS),专为嵌入式系统设计,尤其适用于资源受限的微控制器(MCU)。FreeRTOS 凭借其轻量(内核仅 6-12 KB ROM)、灵活和高度可配置性,成为嵌入式实时系统的热门选择,尤其适合对资源、实时性及功耗敏感的场景。原创 2025-03-24 16:36:36 · 647 阅读 · 0 评论 -
FreeRTOS的临界区内也可以被中断打断
这是由ARM Cortex-M的中断优先级机制和FreeRTOS的临界区实现方式决定的。(如数据竞争、内核崩溃),因为高优先级中断未受FreeRTOS管理。FreeRTOS通过设置 BASEPRI。在FreeRTOS中,当配置。原创 2025-03-22 16:56:54 · 873 阅读 · 0 评论 -
中断设置的相关解释
并将PendSV和SysTick中断设置为最低优先级,是为了确保FreeRTOS的任务调度不会阻塞硬件中断。在STM32F103(基于ARM Cortex-M3内核)中,配置。:您的理解完全正确。在STM32F103中,将。原创 2025-03-22 16:51:00 · 897 阅读 · 0 评论