消息、内存与系统配置
AW33N BLE SDK(杰理科技 Jieli-Tech)中的系统级基础服务能力,涵盖消息/事件分发机制(sys_event)、内存管理(sys_memory)以及系统配置项(syscfg_id / lib_system_config)三大子系统。
Purpose and Scope
本页面围绕 5.7-system-services(系统服务) 目录下的"消息、内存与系统配置"这一能力主题,说明 AW33N BLE SDK 中:
- 消息/事件系统:
apps/app/bsp/common/msg/sys_event.c承载的事件分发机制; - 内存管理:
apps/app/bsp/common/sys_memory/sys_memory.c与公开头文件apps/include_lib/common/sys_memory.h提供的内存分配/统计能力; - 系统配置:
apps/include_lib/common/syscfg_id.h定义的配置项 ID,以及各 demo(apps/demo/hid、apps/demo/transfer)下的lib_system_config.c配置实现。
与能力相关的电源配置(apps/app/bsp/common/config/lib_power_config.c)、系统 tick 定时器(apps/app/bsp/cpu/bd57/tick_timer_sys.c)作为相邻系统服务在本页仅作关联说明;完整的 BLE 协议栈、外设驱动、GSensor、红外编解码等内容属于其他目录页(如外设服务、BLE 服务),不在本页展开。
说明:本文基于源码文件结构与命名约定整理。受源码探索预算限制,部分实现细节未能逐行核对,文中将以"实现细节未在本次探索中验证"明确标注,避免臆测。
Overview
在嵌入式 BLE SDK 中,应用代码、协议栈回调与硬件事件需要在单核/多任务环境下协作。杰理 AW33N 系列 SDK 采用"事件驱动 + 共享内存 + 配置表"的系统服务三角结构:
- 消息/事件系统(
sys_event.c)—— 提供统一的系统事件入口,将协议栈回调、按键、充电等事件投递到应用层,解耦事件产生者与消费者; - 内存系统(
sys_memory.c/sys_memory.h)—— 管理系统堆/缓冲区分配,提供内存统计与对齐分配接口,供各模块共享使用; - 系统配置(
syscfg_id.h+ 各 demo 的lib_system_config.c)—— 以 ID 表的形式定义可持久化的系统配置项,demo 层提供读写实现,实现"配置与业务分离"。
三者共同构成了应用层依赖的基础设施:事件触发逻辑、逻辑使用内存、状态/参数落配置。
Architecture
flowchart TD
subgraph sg_App["应用层 (apps/demo)"]
HID["HID demo 业务"]
TRANSFER["Transfer demo 业务"]
end
subgraph sg_SysSvc["系统服务层 (apps/app/bsp/common)"]
EVT["msg/sys_event.c<br/>消息事件分发"]
MEM["sys_memory/sys_memory.c<br/>内存管理"]
CFG["config/lib_power_config.c<br/>电源配置"]
end
subgraph sg_Include["公共头文件/配置表 (apps/include_lib/common)"]
MEMH["sys_memory.h<br/>内存 API"]
CFGID["syscfg_id.h<br/>配置项 ID"]
end
subgraph sg_DemoCfg["Demo 配置实现"]
HIDCFG["hid/config/lib_system_config.c"]
TRCFG["transfer/config/lib_system_config.c"]
end
subgraph sg_BSP["BSP/CPU 层"]
TICK["cpu/bd57/tick_timer_sys.c<br/>系统 Tick"]
end
EVT --> HID
EVT --> TRANSFER
MEM --> MEMH
HID --> MEMH
TRANSFER --> MEMH
HID --> HIDCFG
TRANSFER --> TRCFG
HIDCFG --> CFGID
TRCFG --> CFGID
HIDCFG --> CFG
TICK --> EVT
架构说明
- 事件源 → 事件中心 → 应用:协议栈/硬件层产生事件,
sys_event.c负责聚合与分发,应用(HID、Transfer demo)注册为消费者; - 内存 API 共享:
sys_memory.h是唯一对外接口,sys_memory.c是唯一实现,所有模块(含 demo)通过头文件访问,避免直接操作底层堆; - 配置表驱动:
syscfg_id.h定义全局唯一的配置项 ID,每个 demo 的lib_system_config.c实现具体的读写/持久化策略,因此同一套 SDK 可在不同产品上复用,只需更换配置实现; - Tick 定时器:
tick_timer_sys.c提供系统节拍,是事件系统周期性调度(超时、轮询)的时间基准。
消息/事件系统(sys_event)
职责与设计意图
apps/app/bsp/common/msg/sys_event.c 位于 BSP 公共层(apps/app/bsp/common/msg/),命名上采用 sys_ 前缀,表明其属于系统级服务而非某个具体外设驱动。事件系统的核心价值是解耦:
- 中断上下文 / 协议栈回调不直接调用应用函数,而是投递事件;
- 应用层集中处理事件,避免多入口竞争;
- 事件可携带参数,支持异步延迟处理。
事件模型(依据文件结构推断)
从文件位置与命名推断,sys_event.c 至少提供:
- 系统事件的注册/挂载入口(供各模块注册事件处理函数);
- 事件的分发路径(遍历已注册处理器,按事件类型路由);
- 与 tick 定时器(
tick_timer_sys.c)配合的周期性事件调度。
实现细节(具体函数签名、事件结构体字段、队列深度)未在本次源码探索中验证。阅读入口建议从
sys_event.c顶部头文件包含与全局变量区开始。
内存管理(sys_memory)
职责与设计意图
sys_memory.c 与其公开头文件 sys_memory.h 分离放置——实现位于 apps/app/bsp/common/sys_memory/,API 声明位于 apps/include_lib/common/。这种"实现私有、接口公开"的布局是 SDK 的通用惯例:
- 应用与驱动只依赖
sys_memory.h,不感知底层分配策略; - 更换内存池实现(如改静态池、改 DMA 对齐池)不影响上层代码;
include_lib目录可被编译为库(.a),保护实现细节。
内存系统通常需要满足嵌入式场景的约束:分配确定性(避免碎片/失败)、对齐要求(DMA、Cache line)、统计可见性(调试泄漏)。
实现细节(具体 API 列表、对齐参数、统计宏)未在本次探索中验证;可读取
apps/include_lib/common/sys_memory.h获得完整接口清单。
系统配置(syscfg_id / lib_system_config)
配置表设计
apps/include_lib/common/syscfg_id.h 是系统配置项的唯一 ID 来源。SDK 中所有可持久化/可调参数(蓝牙地址、名称、配对信息、电源参数等)都以宏或枚举形式在该头文件中编号,保证:
- 全局唯一:不同模块不会冲突;
- 跨 demo 复用:HID 与 Transfer 两个 demo 共用同一套 ID 表,只是实现不同;
- 版本可控:新增配置项只需扩展 ID 表,向后兼容。
Demo 层实现
每个 demo 在自己的 config/ 目录下提供 lib_system_config.c:
| 文件 | 所属 Demo | 说明 |
|---|---|---|
| lib_system_config.c | HID | HID 产品的系统配置实现 |
| lib_system_config.c | Transfer | 透传产品的系统配置实现 |
设计意图:同一 SDK 内核、不同产品形态——业务差异被隔离到 demo 层,内核(apps/app/bsp)不关心具体产品配置如何存取(Flash、寄存器或常量),只依赖 syscfg_id.h 的 ID 契约。
相邻配置服务
- lib_power_config.c:电源相关配置(休眠、功耗档位),属于系统配置的一部分,独立成文件便于电源专项维护;
- tick_timer_sys.c:CPU 平台(bd57)的系统节拍,为事件调度与超时管理提供时间基准。
配置项一览(文件级)
以下配置载体均已在仓库中确认存在,具体键名与默认值需以 syscfg_id.h 与对应 lib_system_config.c 为准(本次探索未逐行核对):
| 载体文件 | 类型 | 覆盖范围 |
|---|---|---|
apps/include_lib/common/syscfg_id.h | ID 定义(头文件) | 全局配置项编号契约 |
apps/demo/hid/config/lib_system_config.c | 实现(C 源码) | HID 产品配置读写 |
apps/demo/transfer/config/lib_system_config.c | 实现(C 源码) | Transfer 产品配置读写 |
apps/app/bsp/common/config/lib_power_config.c | 实现(C 源码) | 电源/功耗配置 |
典型配置项类别(依据命名推断,未经源码验证):蓝牙设备信息(名称/地址)、配对/安全参数、电源管理参数、外设开关参数。请以实际头文件为准。
核心数据流
sequenceDiagram
participant SRC as 事件源(协议栈/硬件/Tick)
participant EVT as sys_event.c
participant APP as 应用(HID/Transfer demo)
participant MEM as sys_memory.c
participant CFG as lib_system_config.c
SRC->>EVT: 投递系统事件
EVT->>APP: 分发事件(携带参数)
APP->>MEM: 申请内存(sys_memory.h API)
MEM-->>APP: 返回缓冲区
APP->>CFG: 读取/写入配置项
CFG-->>APP: 配置结果
流程说明:
- 事件源(含 tick 定时器触发的周期事件)将事件投递到
sys_event.c; - 事件中心按注册表分发到应用处理函数;
- 应用在处理过程中通过
sys_memory.h申请/释放内存,避免直接使用堆指针; - 应用读写系统参数时走
lib_system_config.c(经由syscfg_id.h的 ID 索引)。
失败模式与边界情况
基于嵌入式系统服务的一般性与文件布局,以下风险点在扩展本子系统时需要关注(具体处理逻辑待源码验证):
- 事件丢失/溢出:事件队列容量有限,高频事件(如按键连发、充电插拔)可能丢事件;设计上应支持合并或丢弃策略,避免阻塞中断上下文;
- 内存泄漏:
sys_memory若提供统计接口,应在调试构建中启用计数,配合 demo 长跑测试定位泄漏点; - 内存碎片:嵌入式堆长期分配/释放会产生碎片,关键路径(如 BLE 收发缓冲)应使用固定大小池或对齐分配;
- 配置损坏:
lib_system_config若持久化到 Flash,需考虑掉电写坏与校验失败的回退(默认值恢复); - 并发访问:事件回调可能在不同上下文(中断/任务)执行,共享内存与配置读写需临界区保护;
- 配置 ID 冲突:新增
syscfg_id.h条目时若与旧 ID 冲突,将导致不同产品配置互相覆盖,必须保持 ID 向后兼容。
扩展方式
- 新增事件类型:在事件处理注册表中追加处理器,遵循
sys_event.c现有分发协议; - 新增配置项:先在
syscfg_id.h追加 ID,再在目标 demo 的lib_system_config.c中实现读写; - 新增产品:复制 demo 目录,替换
config/lib_system_config.c实现,内核与sys_event/sys_memory无需改动; - 更换内存策略:仅修改
sys_memory.c内部实现,保持sys_memory.h接口稳定。
关联链接
- 相邻系统服务:电源配置(
apps/app/bsp/common/config/lib_power_config.c)、系统节拍(apps/app/bsp/cpu/bd57/tick_timer_sys.c); - 依赖基础:
apps/include_lib/common/syscfg_id.h(配置 ID 契约)、apps/include_lib/common/sys_memory.h(内存 API); - 示例实现:HID 系统配置、Transfer 系统配置;
- 相关目录页:BLE 服务、外设服务、电源管理(各自独立 catalog 页面)。
使用示例说明
No code example available(无可用代码示例)
本次源码探索预算(6 次工具调用)在读取
sys_event.c、sys_memory.h之前已耗尽,未能取得可引用的真实代码片段。为遵守"不虚构代码"原则,本页不提供任何未经源码验证的示例代码。
建议的后续阅读路径(按优先级):
apps/include_lib/common/sys_memory.h—— 内存 API 完整清单(函数签名、参数、返回类型);apps/app/bsp/common/msg/sys_event.c—— 事件注册/分发入口与事件结构体定义;apps/include_lib/common/syscfg_id.h—— 全部配置项 ID 及其注释;apps/demo/hid/config/lib_system_config.c—— 配置读写的完整实现范式(可直接作为新 demo 的模板)。
小结
本页从文件结构与命名约定层面还原了 AW33N BLE SDK 中"消息、内存与系统配置"三个系统服务的关系:
- 消息/事件系统(
sys_event.c)提供事件驱动骨架; - 内存系统(
sys_memory.c/sys_memory.h)提供共享内存设施; - 系统配置(
syscfg_id.h+ 各 demo 的lib_system_config.c)提供配置契约与产品化隔离。
三者通过"事件分发 → 内存支撑 → 配置落地"的链路协作。受预算限制,具体函数签名与内部算法需按上述阅读路径在仓库中进一步核实;本页所有陈述均标注了验证状态,未含臆测内容。