目录
一、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 + FreeRTOS | HAL库封装 + CubeMX工程导入 |
ESP32 + IDF | CMake模板项目,兼容 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) |