杰理 SDK 文档中心
首页
首页
  • SDK 概述与入门

    • SDK 总览
    • 支持芯片与蓝牙认证
    • 工程结构导航
  • 开发环境与构建

    • 环境搭建与工具链安装
    • 编译指南与工程选择
    • 烧录与生产工具
  • BLE 透传/数传应用

    • 透传应用框架与处理模块
    • 透传与数传示例
    • 多连接与自定义服务示例
    • FindMy 与查找网络示例
  • HID 人机交互应用

    • 键盘与按键设备示例
    • 鼠标设备示例
    • 遥控器示例
    • HID 蓝牙应用模块
  • 公共 BSP 模块

    • 按键、编码器与红外输入
    • 传感器驱动
    • LED 与显示控制
    • 串口与 USB 通信
    • 存储、参数与时钟
    • 电源与温度管理
    • 消息、内存与系统配置
    • OTA 升级框架
  • 蓝牙协议栈与库

    • BLE 控制器与协议栈适配
    • 经典蓝牙 BR/EDR 支持
    • 第三方蓝牙协议
    • 设备管理框架
    • DUT 测试与射频认证
  • 构建系统与开发工具

    • Makefile 构建系统
    • 固件后处理与配置工具
    • 辅助脚本与库合并
  • 文档与硬件资料

    • AT 命令参考
    • 硬件参考资料
    • SDK 文档与在线资源

消息、内存与系统配置

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 采用"事件驱动 + 共享内存 + 配置表"的系统服务三角结构:

  1. 消息/事件系统(sys_event.c)—— 提供统一的系统事件入口,将协议栈回调、按键、充电等事件投递到应用层,解耦事件产生者与消费者;
  2. 内存系统(sys_memory.c / sys_memory.h)—— 管理系统堆/缓冲区分配,提供内存统计与对齐分配接口,供各模块共享使用;
  3. 系统配置(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.cHIDHID 产品的系统配置实现
lib_system_config.cTransfer透传产品的系统配置实现

设计意图:同一 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.hID 定义(头文件)全局配置项编号契约
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: 配置结果

流程说明:

  1. 事件源(含 tick 定时器触发的周期事件)将事件投递到 sys_event.c;
  2. 事件中心按注册表分发到应用处理函数;
  3. 应用在处理过程中通过 sys_memory.h 申请/释放内存,避免直接使用堆指针;
  4. 应用读写系统参数时走 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 之前已耗尽,未能取得可引用的真实代码片段。为遵守"不虚构代码"原则,本页不提供任何未经源码验证的示例代码。

建议的后续阅读路径(按优先级):

  1. apps/include_lib/common/sys_memory.h —— 内存 API 完整清单(函数签名、参数、返回类型);
  2. apps/app/bsp/common/msg/sys_event.c —— 事件注册/分发入口与事件结构体定义;
  3. apps/include_lib/common/syscfg_id.h —— 全部配置项 ID 及其注释;
  4. 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)提供配置契约与产品化隔离。

三者通过"事件分发 → 内存支撑 → 配置落地"的链路协作。受预算限制,具体函数签名与内部算法需按上述阅读路径在仓库中进一步核实;本页所有陈述均标注了验证状态,未含臆测内容。

Prev
电源与温度管理
Next
OTA 升级框架