【软件系统架构】系列四:嵌入式 SDK 框架设计指南

 目录

一、SDK 定义与目标

SDK 设计目标

二、推荐目录结构

三、模块化设计分层结构

四、平台适配机制设计

平台接口封装(以 GPIO 为例)

平台实现文件(以 STM32 为例)

五、标准接口规范(API 风格)

命名规则

六、构建系统设计(CMake/Makefile)

CMake 结构示例

七、RTOS 与裸机兼容设计

裸机兼容处理技巧

RTOS 多任务封装

八、配置裁剪机制设计

九、示例项目入口模板

十、日志与调试模块建议

十一、版本管理与发布规范

十二、实际部署建议

十三、附加工具建议

SDK 示例结构生成工具(脚本)

结语:嵌入式 SDK 成功标准


一、SDK 定义与目标

嵌入式 SDK(Software Development Kit) 是面向特定硬件平台、应用场景或产品形态的一整套软件开发工具包,包含驱动层、中间件、协议栈、工具链配置和参考应用代码。

SDK 设计目标

  • 可移植:支持多芯片平台、OS或裸机切换

  • 可裁剪:按需启用功能模块,减少体积与功耗

  • 可复用:抽象封装通用模块,支持多项目复用

  • 可维护:接口统一,分层清晰,便于版本迭代

  • 可开发:为用户或客户提供标准化应用接口


二、推荐目录结构

sdk/
├── drivers/              # 底层驱动(GPIO/UART/SPI/I2C/RTC 等)
│   └── stm32/
├── os/                   # 操作系统适配层(FreeRTOS/RT-Thread)
├── middleware/           # MQTT/OTA/JSON/TLS 等中间件
├── protocol_stack/       # TCP/IP、BLE、LoRaWAN 等协议栈
├── platform/             # 平台适配(HAL/BSP/启动文件)
├── utils/                # 通用工具(CRC、RingBuffer、Log)
├── app/                  # 示例应用(Demo、Test、产品参考)
├── tools/                # 编译工具、脚本、烧录配置
├── include/              # 统一 API 头文件暴露目录
├── build/                # 编译产物与构建配置
└── CMakeLists.txt / Makefile

三、模块化设计分层结构

┌─────────────┐
│ 应用层       │← 用户主逻辑、功能调用、UI调度
├─────────────┤
│ 中间件层     │← MQTT、OTA、TLS、JSON、FS、GUI
├─────────────┤
│ 协议栈层     │← TCP/IP、BLE、CAN、Modbus、LoRa
├─────────────┤
│ 驱动适配层   │← HAL / BSP / RTOS Wrapper
├─────────────┤
│ 硬件抽象层   │← GPIO、SPI、Flash、Timer 等
└─────────────┘

四、平台适配机制设计

平台接口封装(以 GPIO 为例)

// gpio_hal.h
typedef enum { GPIO_LOW = 0, GPIO_HIGH = 1 } gpio_state_t;
void hal_gpio_write(int pin, gpio_state_t state);
gpio_state_t hal_gpio_read(int pin);

平台实现文件(以 STM32 为例)

// hal_gpio_stm32.c
void hal_gpio_write(int pin, gpio_state_t state) {
    HAL_GPIO_WritePin(GPIOx, GPIO_Pin, state == GPIO_HIGH ? GPIO_PIN_SET : GPIO_PIN_RESET);
}

五、标准接口规范(API 风格)

命名规则

  • 模块前缀命名(如 mqtt_client_* / ota_* / fs_*

  • 所有中间件统一包含如下接口:

bool module_init(void);
bool module_start(void);
void module_poll(void);      // 非阻塞轮询
void module_deinit(void);

六、构建系统设计(CMake/Makefile)

CMake 结构示例

project(embedded_sdk)
add_subdirectory(drivers)
add_subdirectory(middleware)
add_subdirectory(app)

target_include_directories(sdk PUBLIC include/)

 若使用 Makefile,可在 tools/ 中提供多平台构建脚本 build_stm32.sh, build_esp32.sh


七、RTOS 与裸机兼容设计

裸机兼容处理技巧

  • 使用 middleware_poll() 实现主循环事件驱动;

  • 所有 delay/lock/timer 用平台适配层封装;

RTOS 多任务封装

void mqtt_task(void *param) {
    while (1) {
        mqtt_client_poll();
        vTaskDelay(1000 / portTICK_PERIOD_MS);
    }
}

八、配置裁剪机制设计

// sdk_config.h
#define ENABLE_MQTT       1
#define ENABLE_TLS        0
#define ENABLE_LOG        1
#define ENABLE_FILESYS    0

通过条件编译实现:

#if ENABLE_MQTT
#include "mqtt_client.h"
#endif

九、示例项目入口模板

// app/main.c
int main(void) {
    platform_init();     // 初始化系统时钟、中断、外设
    os_start();          // 启动 RTOS 或调度轮询

#if ENABLE_MQTT
    mqtt_client_init();
    mqtt_client_connect("broker.hivemq.com", 1883);
#endif

    while (1) {
#if ENABLE_MQTT
        mqtt_client_poll();
#endif
        platform_delay_ms(10);
    }
}

十、日志与调试模块建议

// log.h
#define LOG_INFO(fmt, ...)     printf("[INFO] " fmt "\n", ##__VA_ARGS__)
#define LOG_ERROR(fmt, ...)    printf("[ERROR] " fmt "\n", ##__VA_ARGS__)

建议支持:

  • 日志等级控制(ERROR/WARN/INFO/DEBUG)

  • 日志重定向到串口、文件、网络

  • 可选内存监控输出(heap、stack usage)


十一、版本管理与发布规范

类型内容
SDK 版本号sdk_version.h → #define SDK_VERSION "v1.0.2"
发布包.zip / GitHub Release / Package Registry
文档README.md + QuickStart + API Reference
示例app/demo_mqtt、app/demo_ota、app/demo_baremetal

十二、实际部署建议

平台SDK适配示例
STM32 + FreeRTOSHAL库封装 + CubeMX工程导入
ESP32 + IDFCMake模板项目,兼容 ESP-IDF 组件构建
RISC-V + 裸机使用 Linker 文件定义堆栈,自带调度框架
Linux Host 模拟提供模拟平台,用于开发验证(如 Socket/文件模拟层)

十三、附加工具建议

工具用途
Python OTA Server提供 HTTP 固件升级服务
Bin合并工具将Bootloader + App合并烧录镜像
Flash工具脚本提供一键烧录/擦除接口

SDK 示例结构生成工具(脚本)

python tools/generate_sdk.py --module mqtt --os freertos --platform stm32

生成如下:

middleware/mqtt_client/
├── mqtt_client.c
├── mqtt_client.h
├── mqtt_port_freertos.c

结语:嵌入式 SDK 成功标准

成功指标说明
30分钟跑通用户下载SDK后,30分钟内可跑起示例
目录清晰模块分明、接口一致、可裁剪
兼容平台多FreeRTOS、裸机、ThreadX、RT-Thread 均支持
社区/文档支持GitHub + Markdown API 文档 + Wiki

扩展阅读:

【软件系统架构】系列四:嵌入式技术【软件系统架构】系列四:嵌入式技术
【软件系统架构】系列四:嵌入式软件开发流程全解析(包含示例)【软件系统架构】系列四:嵌入式软件开发流程全解析(包含示例)
【软件系统架构】系列四:嵌入式软件-DO-178B 安全认证标准【软件系统架构】系列四:嵌入式软件-DO-178B 安全认证标准
【软件系统架构】系列四:嵌入式软件-CMMI 安全认证标准及认证所需资源模板【软件系统架构】系列四:嵌入式软件-CMMI 安全认证标准及认证所需资源模板
【软件系统架构】系列四:嵌入式软件-M2M(Machine to Machine)系统详解及开发模板【软件系统架构】系列四:嵌入式软件-M2M(Machine to Machine)系统详解及开发模板
【软件系统架构】系列四:嵌入式软件-NPU(神经网络处理器)系统及模板【软件系统架构】系列四:嵌入式软件-NPU(神经网络处理器)系统及模板
【软件系统架构】系列四:嵌入式软件-M2M 与 NPU 技术对比及协同设计方案【软件系统架构】系列四:嵌入式软件-M2M 与 NPU 技术对比及协同设计方案
【软件系统架构】系列四:嵌入式微处理器(MPU)【软件系统架构】系列四:嵌入式微处理器(MPU)
【软件系统架构】系列四:嵌入式微控制器(MCU)【软件系统架构】系列四:嵌入式微控制器(MCU)
【软件系统架构】系列四:数字信号处理器(DSP)【软件系统架构】系列四:数字信号处理器(DSP)
【软件系统架构】系列四:SoC(System on Chip,片上系统)【软件系统架构】系列四:SoC(System on Chip,片上系统)
【软件系统架构】系列四:MPU vs MCU vs DSP vs SoC 嵌入式处理器选型终极指南【软件系统架构】系列四:MPU vs MCU vs DSP vs SoC 嵌入式处理器选型终极指南
【软件系统架构】系列四:嵌入式微处理器【软件系统架构】系列四:嵌入式微处理器
【软件系统架构】系列四:多核处理器架构与调度(Deep Dive)【软件系统架构】系列四:多核处理器架构与调度(Deep Dive)
【软件系统架构】系列四:嵌入式软件与操作系统【软件系统架构】系列四:嵌入式软件与操作系统
【软件系统架构】系列四:嵌入式软件与操作系统【软件系统架构】系列四:嵌入式软件与操作系统
【软件系统架构】系列四:嵌入式协议栈架构详解【软件系统架构】系列四:嵌入式协议栈架构详解
【软件系统架构】系列四:嵌入式中间件设计全景解析【软件系统架构】系列四:嵌入式中间件设计全景解析
【软件系统架构】系列四:嵌入式 SDK 框架设计指南【软件系统架构】系列四:嵌入式 SDK 框架设计指南
【软件系统架构】系列四:AI 模型在嵌入式设备部署指南【软件系统架构】系列四:AI 模型在嵌入式设备部署指南
【软件系统架构】系列四:嵌入式操作系统【软件系统架构】系列四:嵌入式操作系统
【软件系统架构】系列四:嵌入式实时操作系统(RTOS)【软件系统架构】系列四:嵌入式实时操作系统(RTOS)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

34号树洞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值