freertos 4+1视图
01-逻辑视图-Logical-View.md
逻辑视图从设计者的角度描述系统的关键抽象、模块划分与模块间的依赖关系("是什么")。
1. 视图概览
FreeRTOS LTS 是一个面向 安全互联嵌入式设备(IoT 设备)的实时操作系统 + 组件库发行版。
其逻辑架构自上而下可划分为四个层次:
说明:所有层最终都构建在 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)模块分解
内核是系统的"心脏",由以下功能模块构成:
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 调度与并发机制
关键点:
- 抢占式优先级调度:就绪态按优先级分链,vTaskSwitchContext 总是切换到最高优先级非空链表头的任务。
- 时间片轮转:同优先级任务在 Tick 中断内轮流执行(configUSE_TIME_SLICING)。
- 优先级反转控制:互斥量基于队列实现,通过 TCB.uxBasePriority 记录原始优先级,实现优先级继承。
- tickless idle:可选省电模式(configUSE_TICKLESS_IDLE),通过 Idle 任务钩子 vApplicationSleep 关闭 Tick。
4. 网络协议栈层(FreeRTOS-Plus-TCP)
协议栈采用 "通用核心 + IPv4/IPv6 专属子层" 的分层设计:
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 配置机制
协议栈采用 "默认配置 + 用户覆盖" 双层配置模式:
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 库间依赖关系
说明: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. 运行时线程模型
中断上下文优先级高于任何任务;任务间通过内核同步原语(队列/信号量/事件组/通知/流缓冲)通信。优先级越高,数值越大(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 系统启动时序
3.2 网络数据包接收时序(中断 + 任务协作)
3.3 数据发送时序
3.4 定时器任务交互
3.5 互斥量与优先级继承
3.6 典型 IoT 云连接时序(coreMQTT + TCP)
4. 并发特性与约束
| 并发机制 | 用途 | 说明 |
|---|---|---|
| 任务 | 并行业务逻辑 | 基于优先级的抢占式调度,时间片轮转 |
| 队列 | 任务间/中断到任务数据传递 | 阻塞等待,支持 ISR 安全变体(xQueueSendFromISR) |
| 信号量 | 资源同步/互斥 | 二值/计数信号量基于队列实现 |
| 互斥量 | 临界资源保护 | 带优先级继承,防优先级反转 |
| 事件组 | 多事件等待/唤醒 | 位掩码方式,一次等待多个事件 |
| 流/消息缓冲 | 字节流/定长消息 | 适合 ISR 到任务的数据流 |
| 任务通知 | 轻量同步 | 直接对 TCB 操作,比队列快(节省内存) |
| 软件定时器 | 周期/延时逻辑 | 回调在 Tmr Svc 任务串行执行 |
| 临界区 | 短暂互斥 | portENTER_CRITICAL 关中断实现 |
4.1 并发设计注意事项(针对本架构)
- 定时器回调禁止阻塞:回调运行在 Tmr Svc 任务上下文,若阻塞会卡住所有定时器;长操作应通过队列转发给业务任务。
- 协议栈线程模型:所有网络数据在 IP-Task 串行处理,应用任务不要直接访问协议栈内部数据结构;通过套接字 API 交互。
- ISR 中只能调用 FromISR 后缀 API:否则破坏临界区与调度一致性。
- 优先级反转:使用互斥量而非裸信号量保护临界资源;内核已内置优先级继承。
- 内存分配线程安全:heap_4/heap_5 内部通过临界区保护 pvPortMalloc,可在任意任务使用;heap_1/heap_2 不支持释放需谨慎。
- 共享地址空间:无 MPU 时任务间无内存隔离,指针越界是系统级事故;启用 mpu_wrappers 可获隔离。
- Tick 精度:任务延时基于软件 Tick,与硬件定时器精度相关;tickless idle 会降低唤醒粒度。
5. 生命周期与状态机
6. 并发质量属性
- 确定性:固定优先级抢占调度,任务行为可预测,适合实时控制。
- 低延迟:上下文切换为微秒级(Cortex-M 上由 PendSV 处理,切换成本低)。
- 中断响应:中断优先于一切任务,ISR 内快速处理 + 延迟处理(FromISR 通知)模式。
- 资源竞争:通过互斥量/队列/临界区显式管理,配合优先级继承避免反转。
- 可裁剪:configUSE_* 开关可裁剪事件组、流缓冲、定时器、MPU 等特性以节省 RAM/ROM。
03-开发视图-Development-View.md
开发视图从开发者的角度描述系统的代码组织、构建方式、测试与版本管理("如何构建与扩展")。
1. 仓库与目录组织
FreeRTOS LTS 是一个 monorepo(聚合仓库),根目录 manifest.yml 声明了所有子组件的来源与版本:
1.1 标准库目录约定(core 库通用)
所有 core 库遵循相同的目录布局(以 coreMQTT 为例):
| 目录 | 内容 |
|---|---|
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 目录组织
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 构建,通过聚合仓库或各库独立构建:
| 构建要素 | 说明 |
|---|---|
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 的配置体系贯穿全部组件,遵循 "默认值 + 用户覆盖" 模式:
| 配置项示例 | 作用 |
|---|---|
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. 测试与验证策略
各组件提供多层质量保障:
| 验证层 | 工具 | 覆盖对象 |
|---|---|---|
| 静态分析 | MISRA C 2012 规则集 | 所有内核与库源码 |
| 单元测试 | Unity(断言)+ CMock(mock 依赖) | 每个核心 .c 文件的函数级行为 |
| 形式化验证 | CBMC(C Bounded Model Checker) | 内存安全、边界条件证明 |
| 覆盖率 | gcov/lcov | 单元测试分支/行覆盖 |
| 集成 | 平台集成测试 | 内核+协议栈+库的组合行为 |
6. 版本管理与发布
- 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. 部署拓扑总览
典型拓扑: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 单镜像)
| 资源 | 分配方式 | 说明 |
|---|---|---|
| 任务 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)
| 变体 | 组件 | 典型场景 |
|---|---|---|
| 基础 | 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. 场景总览
场景编号:S1 ~ S8。每个场景标注涉及的视图模块与关键组件。
2. 场景 S1:系统启动与任务创建
目标:设备上电,完成内核与各子系统初始化,进入稳定运行态。
| 涉及视图 | 模块 |
|---|---|
| 逻辑视图 | 内核层、TCP 层 |
| 进程视图 | §3.1 启动时序 |
| 开发视图 | 构建、配置 |
3. 场景 S2:数据采集与任务间通信
目标:传感器任务采集数据,通过内核同步原语传递给处理任务。
| 涉及视图 | 模块 |
|---|---|
| 逻辑视图 | 内核队列/信号量/定时器 |
| 进程视图 | §4 并发机制、§3.4 定时器交互 |
4. 场景 S3:设备联网与时间同步(DHCP + DNS + SNTP)
目标:设备获取 IP 地址、解析域名、同步系统时间。
| 涉及视图 | 模块 |
|---|---|
| 逻辑视图 | TCP 栈 DHCP/DNS、coreSNTP |
| 物理视图 | NTP 服务器节点 |
5. 场景 S4:MQTT 遥测上报(核心业务场景)
目标:设备周期上报遥测数据到 AWS IoT Core。
| 涉及视图 | 模块 |
|---|---|
| 逻辑视图 | coreMQTT、corePKCS11、TCP 栈 |
| 进程视图 | §3.6 云连接时序 |
| 物理视图 | AWS IoT Core 节点 |
6. 场景 S5:设备影子状态同步
目标:设备与云端同步影子状态(设备端与云端的"状态视图")。
| 涉及视图 | 模块 |
|---|---|
| 逻辑视图 | Device Shadow、coreMQTT、coreJSON |
| 物理视图 | AWS IoT Core |
7. 场景 S6:远程任务下发(AWS IoT Jobs)
目标:云端向设备下发指令/任务(如配置更新),设备执行并回报结果。
| 涉及视图 | 模块 |
|---|---|
| 逻辑视图 | IoT Jobs、coreMQTT、coreJSON |
| 物理视图 | AWS IoT Core |
8. 场景 S7:OTA 固件升级(MQTT File Streams)
目标:通过 MQTT 分块下载新固件并升级,替代传统 OTA 库。
| 涉及视图 | 模块 |
|---|---|
| 逻辑视图 | MQTT File Streams、coreMQTT、coreJSON |
| 物理视图 | S3 文件存储节点 |
| 进程视图 | 大文件流与协议栈并发 |
9. 场景 S8:网络故障恢复与重试
目标:网络中断时系统自动重连并恢复业务,避免雪崩重试。
| 涉及视图 | 模块 |
|---|---|
| 逻辑视图 | 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 | 指数退避、防雪崩 |

浙公网安备 33010602011771号