HRTOS / ARCHITECTURE

通信流程 Inter-Task Communication Flow

从通信对象的状态变化出发,理解任务如何交换数据、等待资源、接收通知,以及 IPC 操作如何与任务调度协同工作。 本页关注系统执行路径与模块职责,不替代具体通信 API 的使用说明。

IPC Architecture Task Synchronization Scheduling Interaction
01

IPC 在系统中的位置

Inter-process communication · 数据交换与执行协调

在 HRTOS 中,任务通过通信与同步机制协作。通信对象保存数据或同步状态;任务则根据对象当前状态,继续执行、读取数据,或进入等待状态。

因此,IPC 不只是一次函数调用。某些操作只改变对象状态,另一些操作可能影响等待任务的状态,并进一步影响调度结果。实际行为取决于具体对象、调用接口及当前系统状态。

LAYER 01

通信对象

保存消息、事件状态、计数值或资源占用状态。

Data / State
LAYER 02

等待与唤醒

当操作无法立即满足时,相关任务可能等待;条件满足后再按内核规则恢复。

Task State
LAYER 03

调度决策

任务状态变化可能影响就绪任务集合与后续执行顺序。

Scheduler
LAYER 04

应用任务

发送方和接收方围绕业务数据与同步条件继续运行。

Application
核心关系: 通信对象状态决定操作是否能够满足;等待与唤醒影响任务状态;调度器再根据当前可运行任务及调度规则决定后续执行。
02

一次 IPC 操作如何执行

从调用接口到可能发生的任务切换

IPC 操作的执行路径并不完全相同。发送操作可能成功写入数据,也可能因资源状态或参数条件而失败;等待操作可能立即返回,也可能使调用任务阻塞。 不能把所有 IPC 接口都视为同一条固定的内核调用链。

STEP 01

发起操作

任务调用相应的事件、邮箱、消息队列、信号量或互斥锁接口。

STEP 02

检查对象状态

内核根据操作类型、资源状态及调用条件判断是否可以完成操作。

STEP 03

完成或等待

操作可能直接完成;如果条件不满足且接口允许等待,调用任务可能进入等待状态。

STEP 04

更新执行状态

对象状态变化可能满足其他任务的等待条件,从而引发任务状态更新。

当就绪任务集合发生变化时,调度器可能需要重新评估运行任务。是否立即切换、何时切换,以及调用返回后的具体执行顺序,应以 HRTOS 的调度策略和实际内核实现为准。

注意区分: “资源状态已改变”“等待任务已变为就绪”和“CPU 已切换到该任务”是三个不同的阶段,不能简单视为同时发生。
03

通信对象与适用场景

不同对象解决不同类型的协作问题

选择 IPC 机制时,应先明确需要传递的是数据、状态通知、计数资源,还是对共享资源的独占访问。对象语义不同,不能只根据接口名称或调用成本互相替代。

机制 主要用途 设计时关注点
事件 Event 表示某个条件或事件状态,供任务查询或等待。 事件状态的置位、清除与重复通知语义。
邮箱 Mailbox 在任务之间传递邮箱所定义的数据单元。 数据宽度、覆盖规则及收发时机。
消息队列 MsgQ 按队列机制传递多条消息或数据项。 缓冲区容量、消息格式、满队列时的处理方式。
信号量 Semaphore 通过计数或令牌协调任务之间的执行条件。 初始计数、获取与释放规则、超时处理。
互斥锁 Mutex 协调任务对共享资源的互斥访问。 所有权、持有与释放规则,以及优先级反转风险。
语义边界: 事件通知不等于消息传递;信号量不等于互斥锁;消息队列的缓冲语义也不等同于单值邮箱。具体能力与限制应以 HRTOS 4.0 对应模块文档和实现为准。
04

阻塞、唤醒与调度

IPC 与任务状态机之间的联系

阻塞通常出现在任务暂时无法满足某个操作条件时。例如,接收方等待尚未到达的消息,或者任务等待某个同步条件。若相应接口支持等待,内核可按其规则保存等待条件并调整任务状态。

当其他任务改变了通信对象的状态,内核可能检查等待该对象的任务,并按对应规则使符合条件的任务重新具备运行资格。此时,调度器才有可能在合适的调度点选择不同的任务执行。

// 概念模型:用于理解 IPC 与调度的关系,不是 HRTOS 源码 Task A -- send / signal / release --> IPC Object | v Object state changes | v Check relevant wait conditions | v Task B may become ready | v Scheduling decision | v Resume or switch task
A

任务一定会阻塞吗? 不一定。若操作条件已经满足,接口可能直接完成;是否阻塞还取决于具体 API 和等待参数。

B

唤醒就代表立即运行吗? 不代表。任务具备运行资格之后,仍需遵循系统调度策略和实际调度时机。

C

每次通信都会触发任务切换吗? 不会必然发生。若没有相关任务状态变化,或当前调度条件不要求切换,操作可以在不立即切换任务的情况下完成。

05

中断上下文与 IPC

区分中断通知和任务级通信操作

外设中断通常需要快速完成必要的状态读取、标志处理或数据采集。更复杂的业务处理可以由任务承担,但中断与任务上下文允许执行的操作并不一定相同。

不能假定所有 IPC 接口都能在 ISR 中调用,也不能仅凭接口名称推断某项操作具有中断安全性。调用前应核实 HRTOS 4.0 的接口声明、上下文约束和实现要求。

  • 核对接口是否允许在中断上下文调用。
  • 避免在 ISR 中执行可能阻塞当前执行流的操作。
  • 确认通信对象的并发访问规则,以及中断和任务是否可能同时访问。
  • 评估 ISR 的执行时间与数据缓冲容量,避免因处理不及时而丢失数据。
工程原则: 中断负责及时响应事件,任务负责适合在任务上下文中执行的后续工作。两者如何通过 HRTOS 的具体 IPC 接口衔接,应以已实现并明确支持的接口为准。
06

容量、超时与实时性设计

让通信行为能够被分析和验证

IPC 对实时性的影响不仅来自接口本身的执行开销,也来自任务等待时间、消息积压、共享资源竞争以及由状态变化引发的调度行为。

  • 容量设计:根据消息产生速率、任务处理能力和允许的积压时间估算缓冲区需求,并为突发流量留出合理余量。
  • 超时策略:明确等待超时后任务应采取的恢复、重试或错误处理路径。
  • 资源所有权:明确共享数据由谁修改、何时读取,以及多任务访问时采用何种同步规则。
  • 优先级关系:分析生产者、消费者与共享资源使用者的优先级组合,关注长期等待和优先级反转问题。
  • 失败处理:明确队列满、无可用资源、参数错误或等待超时等情况的返回值和业务处理方式。
  • 可验证性:通过压力测试、边界条件测试和时间测量验证容量、等待时间与调度行为,而不是只依据平均运行表现。
实时性判断: 平均通信耗时只能描述常见情况,不能单独证明最坏情况下的响应能力。对于有截止时间要求的路径,还应分析等待、排队和调度带来的最坏情况影响。
07

本页小结

从对象语义到任务执行结果

理解 HRTOS 的 IPC,需要同时关注通信对象的语义、接口的调用约束、任务等待与唤醒规则,以及调度器对就绪任务的处理。

本页给出的是用于理解系统结构的概念模型。具体接口名称、参数、返回值、阻塞规则、中断上下文限制和内核执行路径,应以 HRTOS 4.0 的实际头文件、源码与对应模块文档为准。

NEXT / 01

理解 IPC 基础

学习事件、邮箱、消息队列和同步原语的语义差异。

IPC 基础概念 ↗
NEXT / 02

进入模块参考

结合具体接口学习初始化、发送、接收、等待和错误处理。

消息队列文档 ↗