freertos 4+1视图

01-逻辑视图-Logical-View.md
逻辑视图从设计者的角度描述系统的关键抽象、模块划分与模块间的依赖关系("是什么")。

1. 视图概览

FreeRTOS LTS 是一个面向 安全互联嵌入式设备(IoT 设备)的实时操作系统 + 组件库发行版。
其逻辑架构自上而下可划分为四个层次:

graph TD subgraph APP["应用层(用户产品代码)"] APPCODE["应用任务 / main()"] end subgraph SERVICES["服务层(AWS IoT / 云服务 SDK)"] AWS["AWS IoT SDK"] AWS2["AWS IoT MQTT File Streams(OTA 文件流)"] end subgraph LIBS["库层(IoT 协议组件)"] MQTT["coreMQTT"] HTTP["coreHTTP"] JSON["coreJSON"] PKCS11["corePKCS11"] SNTP["coreSNTP"] BOFF["backoffAlgorithm"] CELL["Cellular Interface"] end subgraph TCP["网络协议栈层"] TCPSTACK["FreeRTOS-Plus-TCP"] NIF["Network Interface(驱动抽象)"] end subgraph KERNEL["内核层"] KERN["FreeRTOS Kernel V11.1.0"] PORT["可移植层(portable)"] HW["硬件(MCU / 外设)"] end APPCODE --> SERVICES APPCODE --> LIBS SERVICES --> LIBS LIBS --> TCPSTACK TCPSTACK --> NIF NIF --> KERN TCPSTACK --> KERN KERN --> PORT PORT --> HW

说明:所有层最终都构建在 FreeRTOS Kernel 之上;内核通过可移植层与具体硬件(MCU 架构、编译器)解耦。


2. 顶层模块划分

整个发行版由以下仓库(子组件)组成,每个子组件对应一个独立的 Git 仓库与版本:

模块 版本 目录 职责
FreeRTOS Kernel V11.1.0 FreeRTOS/FreeRTOS-Kernel 实时内核:任务调度、队列、信号量、事件组、流缓冲、软件定时器、内存分配
FreeRTOS-Plus-TCP V4.2.5 FreeRTOS/FreeRTOS-Plus-TCP TCP/IP 协议栈(IPv4/IPv6 双栈)、BSD 套接字 API、网络接口抽象
coreMQTT v2.3.1 FreeRTOS/coreMQTT MQTT 3.1.1 客户端(QoS 0/1/2,会话状态管理)
coreHTTP v3.1.1 FreeRTOS/coreHTTP 嵌入式 HTTP/1.1 客户端(含 llhttp 第三方解析器)
coreJSON v3.3.0 FreeRTOS/coreJSON 轻量 JSON 解析/查询库
corePKCS11 v3.6.3 FreeRTOS/corePKCS11 PKCS #11 加密接口(TLS 密钥/证书管理,支持 mbedTLS 后端)
coreSNTP v1.3.1 FreeRTOS/coreSNTP SNTP 客户端(时间同步)
backoffAlgorithm v1.4.1 FreeRTOS/backoffAlgorithm 指数退避重试算法(网络错误重试)
Cellular Interface v1.4.0 FreeRTOS/FreeRTOS-Cellular-Interface 蜂窝调制解调器(2G/3G/4G/5G)AT 命令接口抽象
SigV4 v1.3.0 aws/sigv4-for-aws-iot-embedded-sdk AWS Signature V4 签名计算
AWS IoT Device Shadow v1.4.1 aws/device-shadow-for-aws-iot-embedded-sdk AWS IoT 设备影子客户端
AWS IoT Device Defender v1.4.0 aws/device-defender-for-aws-iot-embedded-sdk AWS IoT Device Defender(安全指标上报)
AWS IoT Jobs v1.5.1 aws/jobs-for-aws-iot-embedded-sdk AWS IoT Jobs(远程任务下发)
AWS IoT Fleet Provisioning v1.2.1 aws/fleet-provisioning-for-aws-iot-embedded-sdk AWS IoT 批量设备注册
AWS IoT MQTT File Streams v1.1.0 aws/aws-iot-core-mqtt-file-streams-embedded-c 基于 MQTT 的 OTA 文件流下载

3. 内核层(FreeRTOS Kernel)模块分解

内核是系统的"心脏",由以下功能模块构成:

graph LR subgraph KERNEL["FreeRTOS Kernel"] TASK["任务管理<br/>tasks.c / task.h"] SCHED["调度器<br/>vTaskSwitchContext / Tick"] QUEUE["队列/信号量/互斥量<br/>queue.c / semphr.h"] EVGRP["事件组<br/>event_groups.c"] STREAM["流缓冲/消息缓冲<br/>stream_buffer.c"] TIMER["软件定时器<br/>timers.c(守护任务)"] LIST["侵入式链表<br/>list.c"] ATOMIC["原子操作<br/>atomic.h"] MEM["内存管理<br/>portable/MemMang/heap_1~5"] end SCHED --> LIST TASK --> SCHED QUEUE --> LIST EVGRP --> LIST STREAM --> LIST TIMER --> QUEUE TIMER --> TASK MEM --> TASK

3.1 各模块职责

模块 关键文件 核心数据结构 核心 API 职责
任务管理 tasks.c, task.h TCB_t(任务控制块) xTaskCreate, vTaskStartScheduler, xTaskNotify 任务创建/删除/挂起/恢复、通知机制、就绪/延迟/挂起链表管理
调度器 tasks.c pxReadyTasksLists[] vTaskSwitchContext, xTaskIncrementTick 基于优先级的抢占式调度 + 时间片轮转,Tick 中断推进
队列/信号量 queue.c, semphr.h Queue_t xQueueSend/Receive, xQueueSemaphoreTake 任务间通信、二值/计数信号量、互斥量(含优先级继承)
事件组 event_groups.c EventGroup_t xEventGroupSetBits/WaitBits 位掩码事件同步(v11.1 新增 configUSE_EVENT_GROUPS 裁剪开关)
流/消息缓冲 stream_buffer.c, message_buffer.h 环形字节缓冲 xStreamBufferSend/Receive 字节流与定长消息传递,支持 ISR 安全(v11.1 新增 reset-from-ISR、批量缓冲)
软件定时器 timers.c Timer_t, 双活动链表 xTimerCreate, xTimerGenericCommand 通过定时器守护任务(Tmr Svc)串行执行回调
列表 list.c ListItem_t, List_t vListInsert, vListInsertEnd 调度器专用的侵入式双向链表(O(1) 插入)
原子操作 atomic.h — Atomic_* 跨架构原子读写宏(SMP 支持基础)
内存管理 portable/MemMang/ — pvPortMalloc, vPortFree 5 种堆策略,见下表

3.2 内存管理策略(heap_1 ~ heap_5)

实现 支持释放 合并空闲块 多段内存 适用场景
heap_1 否 — 否 永不删除任务/对象的最简场景
heap_2 是 否 否 简单动态分配,无碎片敏感
heap_3 是(包装编译器 malloc/free) 由 libc 决定 — 需要线程安全 malloc 时
heap_4 是 是 否 推荐默认,通用场景
heap_5 是 是 是(vPortDefineHeapRegions) 多段 RAM 的非连续内存场景

内核构建时通过 CMake 选项 FREERTOS_HEAP(1~5)选择,无硬编码默认。

3.3 调度与并发机制

graph TD HW_TICK["硬件 Tick 定时器中断"] -->|xPortSysTickHandler| INCTICK["xTaskIncrementTick<br/>xTickCount++"] INCTICK -->|到期任务| READY["就绪链表<br/>pxReadyTasksLists[prio]"] INCTICK -->|需要切换| SWITCH["vTaskSwitchContext<br/>取最高优先级任务"] SWITCH -->|portYIELD / PendSV| CTX["上下文切换<br/>(portable 层)"] MUTEX["互斥量持有者被高优任务阻塞"] -->|优先级继承| BOOST["uxBasePriority 提升优先级"] MUTEX -->|释放| RESTORE["恢复原优先级"] style HW_TICK fill:#ffe0b2 style MUTEX fill:#ffe0b2

关键点:

  • 抢占式优先级调度:就绪态按优先级分链,vTaskSwitchContext 总是切换到最高优先级非空链表头的任务。
  • 时间片轮转:同优先级任务在 Tick 中断内轮流执行(configUSE_TIME_SLICING)。
  • 优先级反转控制:互斥量基于队列实现,通过 TCB.uxBasePriority 记录原始优先级,实现优先级继承。
  • tickless idle:可选省电模式(configUSE_TICKLESS_IDLE),通过 Idle 任务钩子 vApplicationSleep 关闭 Tick。

4. 网络协议栈层(FreeRTOS-Plus-TCP)

协议栈采用 "通用核心 + IPv4/IPv6 专属子层" 的分层设计:

graph TD subgraph TCPSTACK["FreeRTOS-Plus-TCP V4.2.5"] SOCK["套接字 API 层<br/>FreeRTOS_IPv4_Sockets.c / IPv6 / Sockets.c<br/>BSD 风格 socket()/connect()/send()"] CORE["核心 IP 任务<br/>FreeRTOS_IP.c(prvIPTask)<br/>事件队列驱动"] TCPV["TCP 传输层<br/>TCP_State_Handling / Reception /<br/>Transmission / WIN(拥塞控制)"] UDPV["UDP 层<br/>FreeRTOS_UDP_IP.c"] IPV["IPv4 / IPv6 子层<br/>FreeRTOS_IPv4.c / FreeRTOS_IPv6.c"] PROTO["ARP / DHCP(v4/v6) / DNS / ICMP / ND / RA"] ROUTE["路由<br/>FreeRTOS_Routing.c"] BUF["网络缓冲区管理<br/>BufferAllocation_1/2.c"] end NIF["NetworkInterface.h<br/>(xNetworkInterfaceInit / xNetworkInterfaceOutput)"] DRV["底层 MAC/PHY 驱动<br/>portable/NetworkInterface/(STM32、NXP、LPC 等)"] ETH["以太网 / 蜂窝 / WiFi 硬件"] SOCK --> CORE SOCK --> TCPV SOCK --> UDPV CORE --> TCPV CORE --> UDPV TCPV --> IPV UDPV --> IPV IPV --> PROTO IPV --> ROUTE CORE --> BUF BUF --> NIF NIF --> DRV DRV --> ETH

4.1 各层职责

层 关键文件 职责
套接字 API FreeRTOS_IPv4_Sockets.c, FreeRTOS_IPv6_Sockets.c, FreeRTOS_Sockets.c 提供类似 BSD 的 FreeRTOS_socket()/FreeRTOS_bind()/FreeRTOS_send()/FreeRTOS_recv() 接口,供应用与上层库(MQTT/HTTP/SNTP)使用
核心 IP 任务 FreeRTOS_IP.c 协议栈主事件循环(prvIPTask),通过 xNetworkEventQueue 队列与中断/其他任务通信,处理网络事件(数据到达、链路上下线、定时事件)
TCP 传输 FreeRTOS_TCP_State_Handling.c, FreeRTOS_TCP_Reception.c, FreeRTOS_TCP_Transmission.c, FreeRTOS_TCP_WIN.c TCP 状态机、接收/发送窗口、拥塞控制(慢启动/快速重传)
UDP 传输 FreeRTOS_UDP_IP.c UDP 报文收发
IPv4/IPv6 子层 FreeRTOS_IPv4.c, FreeRTOS_IPv6.c 及各自 Utils/Private 分片重组、校验和、选项处理、地址管理
辅助协议 ARP、DHCP(v4/v6)、DNS、ICMP、ND(邻居发现)、RA(路由通告) 地址解析、地址获取、域名解析、连通性探测、IPv6 邻居管理
缓冲区管理 BufferAllocation_1.c(静态)、BufferAllocation_2.c(动态) NetworkBufferDescriptor_t 的分配/释放策略
网络接口抽象 NetworkInterface.h 协议栈与底层驱动的契约:xNetworkInterfaceInitialise、xNetworkInterfaceOutput、xGetPhyLinkStatus
驱动实现 portable/NetworkInterface/(STM32Fxx/Hxx、NXP1060、LPC17xx、esp32、linux、WinPCap 等) 各平台 MAC 驱动移植

4.2 配置机制

协议栈采用 "默认配置 + 用户覆盖" 双层配置模式:

graph LR DEFAULTS["FreeRTOSIPConfigDefaults.h<br/>(库内默认值)"] --> MERGE USERCFG["FreeRTOSIPConfig.h<br/>(用户/项目定义)"] --> MERGE["编译期合并<br/>#ifndef 保护"] MERGE --> TCPSTACK["协议栈实现"]

5. 库层(IoT 协议组件)

组件 关键文件 职责 主要依赖
coreMQTT core_mqtt.c, core_mqtt_serializer.c, core_mqtt_state.c MQTT 客户端:报文序列化/反序列化、会话状态管理、QoS0/1/2 流控 传输层接口(MQTTTransportInterface_t)、backoffAlgorithm、coreJSON(可裁剪)
coreHTTP core_http_client.c HTTP/1.1 客户端:请求构造、响应解析、块传输 传输层接口(HTTPTransportInterface_t)、llhttp(3rdparty)、corePKCS11(TLS)
coreJSON core_json.c JSON 解析与查询(JSON_Search) 无
corePKCS11 core_pkcs11.c, core_pki_utils.c PKCS#11 API:密钥生成/导入、签名/验证、证书管理 mbedTLS(3rdparty,TLS 后端)、core_pkcs11_pal.h(平台移植)
coreSNTP core_sntp_client.c, core_sntp_serializer.c SNTP 客户端:时间请求/响应解析 传输层接口
backoffAlgorithm backoff_algorithm.c 指数退避 + 抖动重试计算 无
Cellular Interface cellular_common.c, cellular_at_core.c, cellular_pktio.c, cellular_pkthandler.c, cellular_3gpp_api.c 蜂窝通信抽象:AT 命令核心、分组数据通道(PktIO)、数据包处理、3GPP API 与 URC 处理 AT 命令层(cellular_at_core)、平台移植接口(cellular_common_portable.h)

5.1 库间依赖关系

graph LR subgraph AWS["AWS IoT SDK(aws/)"] SHADOW["Device Shadow"] DEFENDER["Device Defender"] JOBS["IoT Jobs"] PROV["Fleet Provisioning"] STREAMS["MQTT File Streams (OTA)"] end subgraph CORE["core 库"] MQTT["coreMQTT"] HTTP["coreHTTP"] JSON["coreJSON"] PKCS11["corePKCS11"] SNTP["coreSNTP"] BOFF["backoffAlgorithm"] end subgraph BASE["基础"] SIGV4["SigV4"] CELL["Cellular Interface"] TCP["FreeRTOS-Plus-TCP"] KERN["FreeRTOS Kernel"] end SHADOW --> MQTT SHADOW --> JSON DEFENDER --> MQTT DEFENDER --> JSON JOBS --> MQTT JOBS --> JSON PROV --> MQTT PROV --> JSON STREAMS --> MQTT STREAMS --> JSON MQTT --> BOFF MQTT --> TCP HTTP --> TCP HTTP --> PKCS11 SNTP --> TCP SIGV4 --> PKCS11 CELL --> TCP TCP --> KERN MQTT --> KERN HTTP --> KERN

说明:coreMQTT 与 coreHTTP 通过传输层接口(MQTTTransportInterface_t / HTTPTransportInterface_t)与具体传输实现解耦——传输可以是 FreeRTOS-Plus-TCP 套接字,也可以是蜂窝(Cellular)的 PktIO 通道,或用户自定义实现。这是"可组合"设计的关键。


6. 服务层(AWS IoT SDK)

组件 关键文件 职责
SigV4 sigv4.c, sigv4_quicksort.c AWS Signature V4 请求签名(用于 AWS REST 接口鉴权)
Device Shadow shadow.c 设备影子:get/update/delete 影子文档、订阅影子主题、解析状态响应
Device Defender defender.c 周期上报设备安全指标(网络、内存等)到 AWS IoT
IoT Jobs jobs.c, otaJobParser/ 接收云端下发的任务(Job),解析并执行;OTA 任务解析
Fleet Provisioning fleet_provisioning.c 批量注册场景下设备通过 claim 证书获取设备证书
MQTT File Streams MQTTFileDownloader.c, MQTTFileDownloader_cbor.c, MQTTFileDownloader_base64.c 通过 MQTT 分块下载文件(用于 OTA 固件升级)

这些库全部构建在 coreMQTT + coreJSON + SigV4 之上,通过 MQTT 主题与 AWS IoT Core 云服务交互。


7. 关键架构决策(ADR 摘要)

决策 理由
内核与组件分离为独立仓库 独立版本化、独立发布节奏、按需裁剪;LTS 统一锁定版本
可移植层(portable)抽象硬件 一套内核核心代码支持 40+ 编译器 × 30+ 架构组合
双栈 TCP(IPv4/IPv6 共用核心) 协议栈核心逻辑复用,仅地址相关逻辑分层
传输层接口解耦协议与传输 coreMQTT/coreHTTP 不绑定具体网络实现,可切换 TCP/蜂窝/TLS 传输
守护任务实现软件定时器 定时器回调在单一任务上下文串行执行,避免并发问题
heap_4 为推荐内存策略 支持释放 + 空闲块合并,平衡碎片与性能
MPU 封装(mpu_wrappers) 在支持 MPU 的 Cortex-M 上实现任务特权级隔离
PKCS#11 统一加密接口 上层库不直接依赖 mbedTLS,密钥/证书管理可移植

02-进程视图-Process-View.md
进程视图从运行时的角度描述系统中的并发单元(任务/线程)、它们之间的交互、时序与并发约束("如何运行")。
说明:FreeRTOS 中的"进程/线程"对应任务(Task);无 MMU 场景下所有任务共享地址空间,通过调度器分时执行。


1. 运行时线程模型

graph TD subgraph ISR["中断上下文(硬件优先级)"] SYS_TICK["SysTick / Tick 定时器 ISR"] NET_ISR["以太网/网络中断 ISR<br/>(网卡驱动注册)"] TIMER_ISR["硬件定时器 ISR"] end subgraph TASKS["任务上下文(软件优先级)"] T_APP1["应用任务 A<br/>(用户定义,最高优先级)"] T_APP2["应用任务 B"] T_IP["IP-Task<br/>(协议栈事件循环)"] T_TMR["Tmr Svc<br/>(定时器守护任务)"] T_IDLE["IDLE<br/>(空闲任务,最低优先级)"] end subgraph KERNEL["内核服务"] SCHED["调度器<br/>vTaskSwitchContext"] QUEUES["队列 / 信号量 / 事件组 / 流缓冲"] MUTEX["互斥量(优先级继承)"] NOTIFY["任务通知"] end SYS_TICK -->|xPortSysTickHandler| SCHED NET_ISR -->|xNetworkEventQueue 发送事件| T_IP T_IP -->|阻塞等待| QUEUES T_APP1 -->|xQueueSend / xSemaphoreTake| QUEUES T_APP2 -->|xQueueSend / xSemaphoreTake| QUEUES T_APP1 -->|xTimerCommand| T_TMR T_APP2 -->|xTimerCommand| T_TMR T_TMR -->|阻塞等待命令| QUEUES T_IDLE -->|vApplicationIdleHook / 内存回收| SCHED T_APP1 --> MUTEX T_APP2 --> MUTEX T_APP1 -->|xTaskNotify| NOTIFY T_APP2 -->|xTaskNotify| NOTIFY

中断上下文优先级高于任何任务;任务间通过内核同步原语(队列/信号量/事件组/通知/流缓冲)通信。优先级越高,数值越大(tskIDLE_PRIORITY=0 最低)。


2. 系统典型任务清单

以下为一个典型的 FreeRTOS LTS IoT 应用运行时布局(实际取决于用户设计):

任务 默认/常见优先级 职责 创建者
应用任务 A/B/... 由用户定义(通常 3~7) 业务逻辑:传感器采集、协议处理、状态上报 用户 main()
IP-Task 由 FreeRTOSIPConfig 配置(通常最高) 协议栈事件循环:处理收包、发包、ARP/DHCP/DNS/TCP/UDP 定时事件 FreeRTOS-Plus-TCP(vTaskStartScheduler 前创建)
Tmr Svc configTIMER_TASK_PRIORITY(较高) 执行所有软件定时器回调 内核 vTaskStartScheduler
IDLE 0(最低) 空闲钩子、删除任务后内存回收 内核 vTaskStartScheduler

IP-Task 是协议栈的核心线程(FreeRTOS_IP.c 中 prvIPTask),通过 xNetworkEventQueue(队列)接收来自网络 ISR 与协议栈内部的事件,串行处理所有网络协议逻辑。


3. 关键运行时场景

3.1 系统启动时序

sequenceDiagram participant M as main() participant K as FreeRTOS Kernel participant TCP as FreeRTOS-Plus-TCP participant T as 应用任务 M->>M: 初始化硬件/时钟/外设 M->>TCP: FreeRTOS_IPInit()(若用网络) TCP->>TCP: 创建 xNetworkEventQueue、初始化 ARP/DHCP/DNS M->>K: xTaskCreate(应用任务) M->>K: vTaskStartScheduler() K->>K: 创建 IDLE 任务 K->>K: 创建 Tmr Svc 任务(xTimerCreateTimerTask) K->>K: 启动首个任务(portSTART_SCHEDULER) Note over T: 调度开始,任务按优先级抢占运行 TCP->>TCP: IP-Task 运行:连接网络、DHCP 获取地址 T-->>K: 应用任务通过队列/通知与协议栈交互

3.2 网络数据包接收时序(中断 + 任务协作)

sequenceDiagram participant PHY as 网卡/PHY participant ISR as 网络 ISR<br/>(驱动) participant IP as IP-Task<br/>(prvIPTask) participant APP as 应用任务<br/>(MQTT/HTTP 等) PHY->>ISR: 数据包到达中断 ISR->>ISR: 拷贝帧到 NetworkBuffer<br/>(BufferAllocation) ISR->>IP: xSendEventToIPTask( eNetworkRxEvent )<br/>(FromISR 入队 xNetworkEventQueue) IP->>IP: 队列取事件,处理协议栈<br/>(TCP/UDP/IP/ARP 解包) IP->>APP: 写入套接字接收队列<br/>(FreeRTOS_send 唤醒) APP->>APP: FreeRTOS_recv() 返回数据

3.3 数据发送时序

sequenceDiagram participant APP as 应用任务 participant IP as IP-Task participant NIF as NetworkInterface participant PHY as 网卡 APP->>APP: FreeRTOS_send()/xSendToBuffer APP->>IP: 数据入协议栈发送队列/事件 IP->>IP: TCP 分段/重传控制/IP 封装 IP->>NIF: xNetworkInterfaceOutput( 帧 ) NIF->>PHY: 写 DMA/寄存器 发送 PHY-->>IP: 发送完成回调(可选)

3.4 定时器任务交互

sequenceDiagram participant APP as 应用任务 participant Q as xTimerQueue participant TMR as Tmr Svc 任务 participant CB as 定时器回调 APP->>Q: xTimerStart/Stop/Reset<br/>(xTimerGenericCommand) Q->>TMR: 命令消息 TMR->>TMR: 维护 xActiveTimerList1/2<br/>(处理 Tick 回绕) TMR->>CB: 到期则调用回调 Note over CB: 回调在 Tmr Svc 上下文中运行,<br/>必须非阻塞,禁止长时间临界区

3.5 互斥量与优先级继承

sequenceDiagram participant LOW as 低优先级任务 L participant MID as 中优先级任务 M participant HIGH as 高优先级任务 H participant MUT as 互斥量 Note over LOW: t0: L 获得互斥量 LOW->>LOW: 临界区处理数据 H->>MUT: t1: H 请求互斥量(被阻塞) LOW->>MUT: t2: L 试图释放(被阻塞) LOW->>LOW: 优先级提升至 H 的级别<br/>(uxBasePriority 记录原优先级) LOW->>LOW: 继续执行临界区并释放 LOW->>MUT: 释放互斥量,优先级恢复 MUT->>H: 唤醒 H,H 获得互斥量 Note over H: t3: H 执行临界区

3.6 典型 IoT 云连接时序(coreMQTT + TCP)

sequenceDiagram participant APP as 应用任务 participant MQTT as coreMQTT participant TCP as FreeRTOS-Plus-TCP participant NET as 网络/服务器 APP->>MQTT: MQTT_Connect()<br/>(传输层回调) MQTT->>TCP: FreeRTOS_socket/FreeRTOS_connect<br/>(或 TLS 传输封装) TCP->>NET: TCP 三次握手 NET-->>TCP: SYN-ACK TCP-->>MQTT: 连接建立 MQTT->>NET: CONNECT 报文 NET-->>MQTT: CONNACK APP->>MQTT: MQTT_Subscribe()<br/>(订阅 topic) loop 运行期 APP->>MQTT: MQTT_Publish() 上报数据 MQTT->>TCP: 发送 PUBLISH NET-->>MQTT: 接收下行消息 MQTT->>APP: 回调/事件通知应用 end Note over MQTT: 网络失败时按 backoffAlgorithm<br/>指数退避重试

4. 并发特性与约束

并发机制 用途 说明
任务 并行业务逻辑 基于优先级的抢占式调度,时间片轮转
队列 任务间/中断到任务数据传递 阻塞等待,支持 ISR 安全变体(xQueueSendFromISR)
信号量 资源同步/互斥 二值/计数信号量基于队列实现
互斥量 临界资源保护 带优先级继承,防优先级反转
事件组 多事件等待/唤醒 位掩码方式,一次等待多个事件
流/消息缓冲 字节流/定长消息 适合 ISR 到任务的数据流
任务通知 轻量同步 直接对 TCB 操作,比队列快(节省内存)
软件定时器 周期/延时逻辑 回调在 Tmr Svc 任务串行执行
临界区 短暂互斥 portENTER_CRITICAL 关中断实现

4.1 并发设计注意事项(针对本架构)

  1. 定时器回调禁止阻塞:回调运行在 Tmr Svc 任务上下文,若阻塞会卡住所有定时器;长操作应通过队列转发给业务任务。
  2. 协议栈线程模型:所有网络数据在 IP-Task 串行处理,应用任务不要直接访问协议栈内部数据结构;通过套接字 API 交互。
  3. ISR 中只能调用 FromISR 后缀 API:否则破坏临界区与调度一致性。
  4. 优先级反转:使用互斥量而非裸信号量保护临界资源;内核已内置优先级继承。
  5. 内存分配线程安全:heap_4/heap_5 内部通过临界区保护 pvPortMalloc,可在任意任务使用;heap_1/heap_2 不支持释放需谨慎。
  6. 共享地址空间:无 MPU 时任务间无内存隔离,指针越界是系统级事故;启用 mpu_wrappers 可获隔离。
  7. Tick 精度:任务延时基于软件 Tick,与硬件定时器精度相关;tickless idle 会降低唤醒粒度。

5. 生命周期与状态机

stateDiagram-v2 [*] --> 运行就绪: 任务创建 运行就绪 --> 运行中: 调度器选择<br/>(最高优先级) 运行中 --> 运行就绪: 被抢占/时间片耗尽 运行中 --> 阻塞: 等待队列/信号量/事件/延时 运行中 --> 挂起: vTaskSuspend 阻塞 --> 运行就绪: 事件满足/超时/被唤醒 挂起 --> 运行就绪: vTaskResume 运行中 --> 终止: vTaskDelete<br/>(由 IDLE 回收栈/TCB) 阻塞 --> 终止: 从阻塞中删除

6. 并发质量属性

  • 确定性:固定优先级抢占调度,任务行为可预测,适合实时控制。
  • 低延迟:上下文切换为微秒级(Cortex-M 上由 PendSV 处理,切换成本低)。
  • 中断响应:中断优先于一切任务,ISR 内快速处理 + 延迟处理(FromISR 通知)模式。
  • 资源竞争:通过互斥量/队列/临界区显式管理,配合优先级继承避免反转。
  • 可裁剪:configUSE_* 开关可裁剪事件组、流缓冲、定时器、MPU 等特性以节省 RAM/ROM。

03-开发视图-Development-View.md
开发视图从开发者的角度描述系统的代码组织、构建方式、测试与版本管理("如何构建与扩展")。

1. 仓库与目录组织

FreeRTOS LTS 是一个 monorepo(聚合仓库),根目录 manifest.yml 声明了所有子组件的来源与版本:

graph TD ROOT["FreeRTOS-LTS(聚合仓库)<br/>manifest.yml 声明版本与来源"] ROOT --> K["FreeRTOS/<br/>FreeRTOS-Kernel"] ROOT --> T["FreeRTOS/<br/>FreeRTOS-Plus-TCP"] ROOT --> C["FreeRTOS/ core 库<br/>MQTT / HTTP / JSON /<br/>PKCS11 / SNTP / backoff / Cellular"] ROOT --> A["aws/ AWS IoT SDK<br/>Shadow / Defender / Jobs /<br/>FleetProv / SigV4 / MQTT-Streams"] K -->|构建| B["CMake 构建产物"] T -->|构建| B C -->|构建| B A -->|构建| B

1.1 标准库目录约定(core 库通用)

所有 core 库遵循相同的目录布局(以 coreMQTT 为例):

graph LR SRC["source/"] --> S["source/core_mqtt.c<br/>(实现)"] SRC --> I["source/include/<br/>(公共头文件)"] SRC --> IF["source/interface/<br/>(传输层/平台接口定义)"] TEST["test/"] --> TU["test/unit-test<br/>(Unity/CMock 单元测试)"] DOC["docs/doxygen/"] --> DX["doxygen 文档"] TOOL["tools/"] --> CBMC["CBMC 形式化验证 proofs"]
目录 内容
source/ 库实现(.c 文件)与公共/私有头文件
source/include/ 公共 API 头文件(core_*_config_defaults.h 为配置默认值)
source/interface/ 传输层接口(MQTT/HTTP Transport Interface)等平台抽象
test/ 单元测试(Unity/CMock)、集成测试、CBMC proofs
docs/ Doxygen 文档与架构说明
tools/ 格式化、覆盖率等工具脚本

2. FreeRTOS-Kernel 目录组织

graph TD K["FreeRTOS-Kernel/"] K --> INC["include/(内核公共头文件)<br/>task.h queue.h timers.h semphr.h<br/>event_groups.h stream_buffer.h list.h atomic.h"] K --> SRC["tasks.c / queue.c / timers.c<br/>event_groups.c / stream_buffer.c<br/>list.c / croutine.c"] K --> PORT["portable/(可移植层)"] PORT --> MEM["MemMang/<br/>heap_1.c ~ heap_5.c"] PORT --> CMP["编译器目录<br/>GCC / IAR / ARMClang / Keil /<br/>MSVC-MingW / Tasking ..."] PORT --> THIRD["ThirdParty/<br/>社区/合作伙伴移植(Posix、RISC-V、<br/>Xtensa_ESP32、RP2040、ARC ...)"] CMP --> ARCH["架构目录<br/>ARM_CM0/CM3/CM4F/CM33/CM55/CM85<br/>ARM_AARCH64、ARM_CA9、RISC-V、<br/>RX600、PPC、TriCore、AVR ..."] K --> EXAMPLES["examples/(cmake_example + 模板配置)"] K --> CMAKE["CMakeLists.txt(构建入口)"]

2.1 可移植层(portable)设计

可移植层是内核与硬件/编译器的唯一耦合点,通过编译器 × 架构两层目录组织:

抽象 宏/接口 说明
上下文切换 portYIELD, portYIELD_FROM_ISR 触发 PendSV/SWI 让出 CPU
临界区 portENTER_CRITICAL/EXIT_CRITICAL 关/开中断
中断控制 portDISABLE/ENABLE_INTERRUPTS 全局中断开关
栈方向 portSTACK_GROWTH 1=向下增长(ARM),-1=向上
硬件初始 portSTART_SCHEDULER, portTASK_FUNCTION 启动调度器与任务入口
Tick xPortSysTickHandler 系统节拍中断处理
内存 pvPortMalloc/vPortFree 由 MemMang 实现

新增硬件支持 = 提供对应 <compiler>/<arch>/port.c(汇编上下文切换)与 portmacro.h(宏定义),内核核心代码零改动。

2.2 内存管理实现选择

选项 实现
默认构建 需通过 CMake FREERTOS_HEAP=4 指定(推荐 heap_4)
静态分配 编译选项关闭动态分配(configSUPPORT_DYNAMIC_ALLOCATION=0),使用 Static_ 版本 API
自定义 提供自定义 heap 实现文件替换

3. 构建系统

所有子组件使用 CMake 构建,通过聚合仓库或各库独立构建:

graph LR CMAKE["CMakeLists.txt<br/>(各组件提供)"] CMAKE --> CONFIG["freertos_config 目标<br/>(INTERFACE 库,提供<br/>FreeRTOSConfig.h 等配置)"] CMAKE --> PORT_OPT["FREERTOS_PORT<br/>选择可移植层"] CMAKE --> HEAP_OPT["FREERTOS_HEAP=1~5<br/>选择堆实现"] CMAKE --> BUILD["构建可执行/库"] BUILD --> FLASH["固件烧录到 MCU"]
构建要素 说明
freertos_config 用户必须提供的 INTERFACE 目标,定义 FreeRTOSConfig.h 路径
FREERTOS_PORT 选择内核可移植层(如 GCC/ARM_CM4F)
FREERTOS_HEAP 选择 heap_1 ~ heap_5 或自定义堆
编译器工具链 通过 toolchain 文件或原生编译器指定(ARM GCC、IAR、Keil 等)
组件依赖 各 core 库的 CMakeLists 声明其依赖(如 coreMQTT 依赖 transport 接口)

3.1 典型构建示例(CMake 伪代码)

add_library( freertos_config INTERFACE )
target_include_directories( freertos_config
    INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/config )
# 假设 config/ 下有 FreeRTOSConfig.h 与 FreeRTOSIPConfig.h

set( FREERTOS_HEAP 4 CACHE STRING "Heap strategy" )
add_subdirectory( FreeRTOS-Kernel )          # 内核
add_subdirectory( FreeRTOS-Plus-TCP )        # 协议栈
add_subdirectory( coreMQTT )                 # MQTT 库
# ... 其余组件
target_link_libraries( app PRIVATE freertos_kernel freertos_plus_tcp coreMQTT )

4. 配置体系(编译期裁剪)

FreeRTOS 的配置体系贯穿全部组件,遵循 "默认值 + 用户覆盖" 模式:

graph TD KCFG["FreeRTOSConfig.h<br/>(用户,内核核心配置)"] IPCFG["FreeRTOSIPConfig.h<br/>(用户,协议栈配置)"] MCFG["core_mqtt_config.h<br/>(用户,MQTT 配置)"] DEFAULTS["各库 *_config_defaults.h<br/>(库内默认值)"] KCFG -->|覆盖| KERN["内核编译期行为"] IPCFG -->|覆盖| TCP["协议栈编译期行为"] MCFG -->|覆盖| MQTT["MQTT 编译期行为"] DEFAULTS --> KERN DEFAULTS --> TCP DEFAULTS --> MQTT
配置项示例 作用
configUSE_PREEMPTION / configUSE_TIME_SLICING 调度策略开关
configMAX_PRIORITIES 最大优先级数
configTICK_RATE_HZ Tick 频率
configUSE_EVENT_GROUPS / configUSE_STREAM_BUFFERS v11.1 特性裁剪开关
configUSE_MPU_WRAPPERS MPU 特权隔离
ipconfigENABLE_IPv4 / ipconfigENABLE_IPv6 TCP 栈双栈开关
ipconfigUSE_DHCP DHCP 使能

5. 测试与验证策略

各组件提供多层质量保障:

graph TD L1["静态分析<br/>MISRA C 2012 合规(各库 MISRA.md)"] L2["单元测试<br/>Unity + CMock(test/unit-test)"] L3["形式化验证<br/>CBMC proofs(tools/cbmc)"] L4["覆盖率<br/>lcov/gcov 报告(tools/coverage)"] L5["集成验证<br/>参考集成测试(test/integration-test)"] L1 --> L6["CI 门禁(GitHub Actions)"] L2 --> L6 L3 --> L6 L4 --> L6 L5 --> L6
验证层 工具 覆盖对象
静态分析 MISRA C 2012 规则集 所有内核与库源码
单元测试 Unity(断言)+ CMock(mock 依赖) 每个核心 .c 文件的函数级行为
形式化验证 CBMC(C Bounded Model Checker) 内存安全、边界条件证明
覆盖率 gcov/lcov 单元测试分支/行覆盖
集成 平台集成测试 内核+协议栈+库的组合行为

6. 版本管理与发布

graph LR LTS["FreeRTOS-LTS 聚合仓库<br/>202406.04(日期版本)"] LTS -->|manifest.yml 锁定| K["FreeRTOS-Kernel V11.1.0"] LTS -->|manifest.yml 锁定| T["FreeRTOS-Plus-TCP V4.2.5"] LTS -->|manifest.yml 锁定| C["core 库各自版本"] LTS -->|manifest.yml 锁定| A["AWS IoT SDK 各自版本"] K -->|独立仓库| KGH["github.com/FreeRTOS/FreeRTOS-Kernel"] T -->|独立仓库| TGH["github.com/FreeRTOS/FreeRTOS-Plus-TCP"] C -->|独立仓库| CGH["github.com/FreeRTOS/core*"] A -->|独立仓库| AGH["github.com/aws/*"]
  • LTS 版本号:YYYYMM.xx(如 202406.04),语义为发布年月 + 补丁序号。
  • 子组件版本:各自仓库独立版本(如 Kernel V11.1.0、coreMQTT v2.3.1)。
  • LTS 支持周期:LTS 发布后两年安全/关键缺陷修复(至 2026-06-30),AWS EMP 可延长。
  • 升级策略:LTS 各版本向后兼容(202406 与 202210 兼容,TCP 除外有迁移说明)。

7. 开发者扩展指南

扩展场景 修改位置 示例
新 MCU 平台 内核 portable/ + TCP NetworkInterface/ 新增 GCC/ARM_CM4F 移植或 STM32 网卡驱动
新蜂窝模块 FreeRTOS-Cellular-Interface/source/portable 新增 modem AT 命令实现
新传输层 coreMQTT/HTTP 的 interface/ 回调 TLS 传输或自定义协议封装
新加密后端 corePKCS11 portable/(PKCS11 PAL) mbedTLS 之外的软件/硬件加密
裁剪/特性开关 各 *_config.h 关闭不需要的组件/特性

开发原则:内核与库源码保持"零修改",所有平台差异通过可移植层与配置头文件隔离。


04-物理视图-Physical-View.md
物理视图从部署的角度描述系统在硬件/节点上的分布、硬件拓扑与资源约束("在哪里运行")。

1. 部署拓扑总览

graph TD subgraph DEVICE["IoT 设备(物理节点)"] MCU["MCU / SoC<br/>(ARM Cortex-M/A、RISC-V、Xtensa ...)"] MCU --> FLASH["Flash 固件<br/>FreeRTOS + 应用"] MCU --> RAM["RAM 堆与栈<br/>(heap_4 等)"] MCU --> NIF["网络接口<br/>以太网 MAC / WiFi / 蜂窝"] end subgraph NETWORK["网络基础设施"] GW["网关 / 基站 / AP"] ROUTER["互联网路由"] end subgraph CLOUD["云服务"] IOTCORE["AWS IoT Core<br/>(MQTT 端点)"] S3["AWS S3 / IoT Jobs<br/>(OTA 文件)"] TIME["NTP / SNTP 服务器"] end NIF -->|以太网/WiFi| GW NIF -->|蜂窝 (4G/5G)| GW GW --> ROUTER ROUTER --> IOTCORE ROUTER --> S3 ROUTER --> TIME IOTCORE --> ROUTER

典型拓扑:FreeRTOS 运行在单个 MCU 节点(单处理器、共享内存、无 MMU 通常),通过有线/无线网络连接 AWS IoT Core 云端服务。


2. 运行节点(Runtime Nodes)

2.1 节点 1:IoT 设备端(FreeRTOS)

属性 说明
硬件 MCU(如 Cortex-M4F/M33、RISC-V、ESP32)、Flash、RAM、外设
操作系统 FreeRTOS Kernel(单核,共享地址空间)
部署组件 内核 + TCP 栈 + 协议库 + AWS SDK + 应用固件(单一镜像)
网络 以太网 MAC / WiFi 模组 / 蜂窝模组(Cellular Interface)
存储 Flash(固件、证书)、RAM(任务栈/堆)
时间源 SNTP(coreSNTP)

2.2 节点 2:AWS 云服务

服务 用途
AWS IoT Core MQTT 消息端点、设备影子、Job 下发、设备证书认证(TLS 双向认证)
AWS S3 OTA 固件文件存储(通过 MQTT File Streams 分块下载)
AWS IoT Device Defender 接收设备安全指标
NTP 服务器 时间同步(coreSNTP 客户端)

3. 设备端资源布局

3.1 内存布局(典型 Cortex-M 单镜像)

graph LR subgraph FLASH["Flash"] VEC["向量表"] CODE["固件代码(.text)<br/>内核 + 组件 + 应用"] RO["只读数据(.rodata)<br/>证书/常量/字符串"] end subgraph RAM["RAM"] DATA["数据段(.data / .bss)<br/>全局变量"] STACK["任务栈区<br/>(各任务 TCB + 栈)"] HEAP["堆区<br/>(pvPortMalloc,heap_4 等)"] NETBUF["网络缓冲区<br/>(协议栈)"] end FLASH --> RAM
资源 分配方式 说明
任务 TCB + 栈 pvPortMalloc(动态)或静态数组(Static API) 每个任务独立栈,大小由 xTaskCreate 参数指定
协议栈缓冲区 ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS 网络帧缓冲
队列/信号量/事件组 pvPortMalloc 或静态 内核对象
证书/密钥 Flash(只读)或安全元素 通过 corePKCS11 管理
堆策略 heap_1~5 见逻辑视图 §3.2

3.2 网络接口映射(物理部署)

物理介质 FreeRTOS 组件 说明
以太网 FreeRTOS-Plus-TCP NetworkInterface/(STM32、NXP1060、LPC 等) 直接驱动 MAC+PHY
WiFi 第三方 NetworkInterface(如 esp32) 桥接 WiFi 模组
蜂窝 2G/3G/4G/5G FreeRTOS-Cellular-Interface AT 命令控制 modem + PktIO 数据通道
模拟(开发) WinPCap / libslirp / loopback PC 上仿真运行

4. 部署变体(Variant)

graph TD V0["基础部署(最小)<br/>内核 + 应用任务<br/>无网络"] V1["网络部署(常见)<br/>内核 + Plus-TCP + coreMQTT<br/>以太网/WiFi"] V2["蜂窝部署<br/>内核 + Cellular Interface +<br/>coreMQTT(通过蜂窝网络)"] V3["云集成部署(完整)<br/>内核 + TCP + 全部 core 库<br/>+ AWS IoT SDK 全套"] V4["安全/OTA 部署<br/>+ corePKCS11 (TLS)<br/>+ MQTT File Streams (OTA)<br/>+ MPU 隔离(可选)"] V0 --> V1 --> V3 V0 --> V2 --> V3 V3 --> V4
变体 组件 典型场景
基础 Kernel 简单嵌入式控制(电机、传感器)
网络 Kernel + Plus-TCP + coreMQTT 智能家居、网关
蜂窝 Kernel + Cellular + coreMQTT 资产追踪、远程计量
云集成 Kernel + TCP + core* + AWS SDK AWS IoT 设备完整方案
安全/OTA 上述 + PKCS11 + File Streams + MPU 需要远程升级与安全隔离的生产设备

5. 部署相关的质量属性

属性 物理视图体现
性能 内存占用可控(RAM 常以 KB 计);任务切换微秒级;网络吞吐受 MCU 主频限制
可靠性 单镜像部署简单;看门狗 + tickless idle 省电;协议栈事件循环串行化避免竞态
安全 TLS 双向认证(corePKCS11 + mbedTLS);密钥存安全存储;可选 MPU 任务隔离
可移植性 可移植层隔离硬件,同一源码可部署到数十种 MCU
可维护性 OTA 通过 MQTT File Streams 远程升级固件;LTS 提供两年安全补丁
能耗 tickless idle、低功耗 NetworkInterface 支持电池供电设备

6. 硬件约束与容量规划(部署决策参考)

约束项 典型范围 影响
Flash 256KB ~ 2MB 决定可包含的组件数量(内核 ~10-20KB,TCP 栈 ~30-50KB,TLS 栈较大)
RAM 64KB ~ 1MB 决定任务栈大小、网络缓冲区数量、堆空间
主频 48MHz ~ 600MHz 影响网络吞吐与 TLS 握手耗时
外设 以太网 MAC / UART / SPI 决定网络接口方案
安全硬件 安全元素 / TrustZone 决定密钥存储与 TFM 支持(ThirdParty/ARM_TFM)

规划建议:先选定 MCU 与网络介质 → 选择部署变体(§4)→ 依据 RAM/Flash 预算裁剪组件(配置体系见开发视图 §4)。


05-场景视图-Scenario-View.md
场景视图通过典型用例(Use Cases)将前四个视图串联起来,验证架构是否满足业务需求("用来干什么")。

1. 场景总览

graph TD UC1["用例 1:系统启动与任务创建"] UC2["用例 2:数据采集与本地处理"] UC3["用例 3:设备联网与时间同步"] UC4["用例 4:MQTT 上云与遥测上报"] UC5["用例 5:设备影子状态同步"] UC6["用例 6:远程任务下发(IoT Jobs)"] UC7["用例 7:OTA 固件升级(File Streams)"] UC8["用例 8:网络故障恢复与重试"] UC1 --> UC2 --> UC3 --> UC4 UC4 --> UC5 UC4 --> UC6 UC4 --> UC7 UC4 --> UC8

场景编号:S1 ~ S8。每个场景标注涉及的视图模块与关键组件。


2. 场景 S1:系统启动与任务创建

目标:设备上电,完成内核与各子系统初始化,进入稳定运行态。

sequenceDiagram participant HW as 硬件复位 participant M as main() participant K as FreeRTOS Kernel participant TCP as Plus-TCP participant APP as 应用任务 HW->>M: 上电/复位,执行启动代码 M->>M: 初始化时钟、内存、外设驱动 M->>TCP: FreeRTOS_IPInit()(初始化协议栈) M->>K: xTaskCreate() 创建业务任务 M->>K: vTaskStartScheduler() K->>K: 创建 IDLE + Tmr Svc 任务 K->>K: 启动调度器,切到最高优先级任务 APP->>TCP: 等待网络就绪(DHCP 完成) Note over APP: 系统进入就绪状态,各任务按优先级并发运行
涉及视图 模块
逻辑视图 内核层、TCP 层
进程视图 §3.1 启动时序
开发视图 构建、配置

3. 场景 S2:数据采集与任务间通信

目标:传感器任务采集数据,通过内核同步原语传递给处理任务。

sequenceDiagram participant SEN as 传感器任务 participant Q as 队列/流缓冲 participant PROC as 处理任务 participant TMR as 软件定时器 TMR-->>SEN: 周期触发(定时器回调发通知) SEN->>Q: xQueueSend( 采集数据 ) PROC->>Q: xQueueReceive()(阻塞等待) Q-->>PROC: 数据出队 PROC->>PROC: 处理/过滤/聚合 Note over SEN,PROC: 生产者-消费者模式,队列解耦实时性与处理耗时
涉及视图 模块
逻辑视图 内核队列/信号量/定时器
进程视图 §4 并发机制、§3.4 定时器交互

4. 场景 S3:设备联网与时间同步(DHCP + DNS + SNTP)

目标:设备获取 IP 地址、解析域名、同步系统时间。

sequenceDiagram participant APP as 应用任务 participant IP as IP-Task participant NET as 网络/DHCP 服务器 participant SNTP as coreSNTP APP->>IP: 触发网络连接(FreeRTOS_IPInit 后自动) IP->>NET: DHCP Discover/Request NET-->>IP: DHCP Offer/Ack(获得 IP、网关、DNS) APP->>SNTP: Sntp_Init / 请求时间 SNTP->>NET: SNTP 请求(UDP) NET-->>SNTP: SNTP 响应(时间戳) SNTP->>APP: 更新系统时间 APP->>IP: DNS 解析(GetHostByName,若需) IP->>NET: DNS 查询 NET-->>IP: 域名 -> IP
涉及视图 模块
逻辑视图 TCP 栈 DHCP/DNS、coreSNTP
物理视图 NTP 服务器节点

5. 场景 S4:MQTT 遥测上报(核心业务场景)

目标:设备周期上报遥测数据到 AWS IoT Core。

sequenceDiagram participant APP as 应用任务 participant MQTT as coreMQTT participant TLS as TLS 传输<br/>(corePKCS11 + mbedTLS) participant TCP as Plus-TCP participant CLOUD as AWS IoT Core APP->>MQTT: MQTT_Init( 传输层回调 ) APP->>MQTT: MQTT_Connect( 证书认证 ) MQTT->>TLS: 建立 TLS 连接(双向认证) TLS->>TCP: TCP 三次握手 + TLS 握手 CLOUD-->>MQTT: CONNACK loop 遥测循环 APP->>MQTT: MQTT_Publish( topic, payload ) MQTT->>CLOUD: PUBLISH 报文(QoS1) CLOUD-->>MQTT: PUBACK end APP->>MQTT: MQTT_Disconnect()
涉及视图 模块
逻辑视图 coreMQTT、corePKCS11、TCP 栈
进程视图 §3.6 云连接时序
物理视图 AWS IoT Core 节点

6. 场景 S5:设备影子状态同步

目标:设备与云端同步影子状态(设备端与云端的"状态视图")。

sequenceDiagram participant APP as 应用任务 participant SHADOW as Device Shadow 库 participant MQTT as coreMQTT participant CLOUD as AWS IoT Core APP->>SHADOW: Shadow_Init SHADOW->>MQTT: 订阅影子主题<br/>($aws/things/X/shadow/update/accepted) APP->>SHADOW: Shadow_Update( 本地状态 JSON ) SHADOW->>MQTT: MQTT_Publish( 更新影子文档 ) CLOUD-->>MQTT: 影子更新接受(accepted) MQTT->>SHADOW: 解析响应(coreJSON) SHADOW->>APP: 通知应用状态已同步 Note over APP,CLOUD: 云端也可推送 delta 变更,设备响应更新本地状态
涉及视图 模块
逻辑视图 Device Shadow、coreMQTT、coreJSON
物理视图 AWS IoT Core

7. 场景 S6:远程任务下发(AWS IoT Jobs)

目标:云端向设备下发指令/任务(如配置更新),设备执行并回报结果。

sequenceDiagram participant APP as 应用任务 participant JOBS as IoT Jobs 库 participant MQTT as coreMQTT participant CLOUD as AWS IoT Core APP->>JOBS: Jobs_Init( 订阅任务主题 ) CLOUD->>MQTT: 发布新 Job($aws/things/X/jobs/notify-new) MQTT->>JOBS: 收到通知 JOBS->>MQTT: Jobs_SendNextJobRequest CLOUD-->>JOBS: Job 文档(含执行指令) JOBS->>APP: 解析并执行 Job(如更新配置) APP->>JOBS: Jobs_SendUpdate( 完成/失败 ) JOBS->>MQTT: 发布 Job 执行结果 CLOUD-->>MQTT: 确认接收
涉及视图 模块
逻辑视图 IoT Jobs、coreMQTT、coreJSON
物理视图 AWS IoT Core

8. 场景 S7:OTA 固件升级(MQTT File Streams)

目标:通过 MQTT 分块下载新固件并升级,替代传统 OTA 库。

sequenceDiagram participant APP as 应用任务 participant STREAM as MQTT File Streams participant MQTT as coreMQTT participant CLOUD as AWS IoT Core / S3 participant FLASH as Flash 存储 APP->>STREAM: 发起固件下载(指定 stream id) STREAM->>MQTT: 订阅文件流数据主题 CLOUD->>MQTT: 分块推送固件数据(QoS1) STREAM->>FLASH: 校验并写入固件块(含 base64/cbor 解码) loop 直到完成 STREAM->>MQTT: 请求下一块 / 确认接收 CLOUD->>STREAM: 数据块 end STREAM->>APP: 下载完成,校验哈希 APP->>FLASH: 切换到新固件分区并复位
涉及视图 模块
逻辑视图 MQTT File Streams、coreMQTT、coreJSON
物理视图 S3 文件存储节点
进程视图 大文件流与协议栈并发

9. 场景 S8:网络故障恢复与重试

目标:网络中断时系统自动重连并恢复业务,避免雪崩重试。

sequenceDiagram participant APP as 应用任务 participant MQTT as coreMQTT participant BOFF as backoffAlgorithm participant TCP as Plus-TCP participant NET as 网络 NET--xTCP: 连接断开(链路丢失/超时) TCP-->>APP: 网络状态事件(ipEVENT) APP->>BOFF: 计算下一次重连延迟<br/>(指数退避 + 抖动) BOFF-->>APP: 等待 n 秒 APP->>MQTT: MQTT_Disconnect(清理状态) APP->>TCP: 重新连接网络(DHCP 等) loop 重试循环 APP->>MQTT: MQTT_Connect alt 成功 MQTT-->>APP: 恢复业务(重新订阅主题) else 失败 APP->>BOFF: 计算更长的退避时间 Note over APP: 退避时间递增直到上限 end end
涉及视图 模块
逻辑视图 backoffAlgorithm、coreMQTT、TCP 事件
进程视图 §3.5 优先级继承(避免重连任务饿死)

10. 场景与视图追溯矩阵

场景 逻辑视图 进程视图 开发视图 物理视图
S1 系统启动 内核/TCP 层 §3.1 启动时序 构建配置 设备节点
S2 数据采集 队列/定时器 §3.4 定时器 — —
S3 联网同步 TCP/DNS/SNTP IP-Task 模型 配置 NTP 节点
S4 MQTT 遥测 MQTT/PKCS11/TCP §3.6 云连接 — AWS IoT Core
S5 影子同步 Shadow/MQTT/JSON 消息收发 — AWS IoT Core
S6 任务下发 Jobs/MQTT/JSON 消息收发 — AWS IoT Core
S7 OTA 升级 File Streams 大流处理 OTA 配置 S3
S8 故障重试 backoffAlgorithm 优先级继承 — 网络

场景视图作为"粘合剂":每个场景可沿矩阵找到其在各视图中的对应实现,验证架构的一致性与完整性。


11. 场景覆盖总结

关注点 覆盖场景 关键质量属性
实时性 S1, S2 低延迟、确定性调度
连接性 S3, S4, S8 可靠性、自动恢复
云集成 S4, S5, S6 标准协议(MQTT)、安全认证
可维护性 S7 OTA 远程升级
安全性 S4, S7 TLS 双向认证、固件校验
健壮性 S8 指数退避、防雪崩

posted @ 2026-10-10 16:52  nuanshu  阅读(9)  评论(0)    收藏  举报