一、API 基础定义
API 全称应用程序编程接口,是程序间标准化交互通道。嵌入式领域分为三大类:系统 API、库 API、Web API,覆盖单片机、Linux 嵌入式全开发场景。
二、嵌入式三类 API 总览对比表
| 系统 API | 操作系统内核系统调用 | open/read/write/ioctl(系统 IO) | 硬件设备节点、驱动、文件描述符 fd | 无用户态缓冲,每次读写直接陷入内核 |
| 库 API | 上层封装函数库 | 标准 IO (fopen/fread)、STM32 HAL、Modbus/MQTT 协议库 | FILE 文件指针、外设句柄、协议实例 | 自带用户态缓冲区,批量读写降内核开销 |
| Web API | 网络通信接口 | HTTP、MQTT、TCP/IP 接口 | 云端服务器、远程控制指令 | 协议栈内置收发缓冲 |
三、核心重点:系统 IO vs 标准 IO(面试必考)
| 操作句柄 | int fd 文件描述符 | FILE *fp 文件流指针 |
| 依赖头文件 | <unistd.h> <fcntl.h> | <stdio.h> |
| 缓冲机制 | 无用户缓冲,实时读写 | 全缓冲 / 行缓冲,数据暂存内存 |
| 实时性能 | 实时性强,数据无延迟 | 实时差,数据滞留缓冲区 |
| 适用场景 | 串口、ADC、GPIO 驱动、硬件设备节点 | 普通配置文件、日志读写 |
| 强制刷新 | 无需刷新,直接写入内核 | fflush (fp) 强制刷写缓冲区 |
记忆口诀
系统 IO 裸奔直连内核,硬件驱动优先选用;标准 IO 自带缓存,普通文件读写高效。
四、嵌入式软件分层调用结构(自上而下)
- 应用层:Web API(MQTT/HTTP 设备上云)
- 库函数层:标准 IO + HAL 外设库 + Modbus/CAN 等通信协议库
- 系统调用层:open/read/write/ioctl(Linux 系统 IO,系统 API)
- 内核驱动层:字符设备 / 块设备 / 网络设备驱动
- 硬件层:GPIO、UART、SPI、I2C、ADC 底层寄存器
规则:每层仅调用下一层 API,禁止跨层直接操作硬件寄存器。
五、三类 API 极简可运行代码示例
1. 系统 IO(Linux 操作串口设备)
#include <fcntl.h>
#include <unistd.h>
// 打开串口设备节点
int fd = open("/dev/ttyS1", O_RDWR);
write(fd, "AT\\r\\n", 4); // 无缓冲,立即下发串口
char buf[32] = {0};
read(fd, buf, sizeof(buf));// 实时读取硬件返回数据
close(fd);
2. 标准 IO(读写设备配置文件)
#include <stdio.h>
FILE *fp = fopen("dev_config.txt", "r");
char buff[64];
fgets(buff, sizeof(buff), fp); // 缓冲区批量读取
fflush(fp); // 强制刷新缓存写入文件
fclose(fp);
3. HAL 库 API(STM32 单片机外设操作)
HAL_UART_Transmit(&huart1, data, len, 100); // 串口发送
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); // 点亮LED
uint16_t adc_val = HAL_ADC_GetValue(&hadc1); // 采集ADC电压
六、嵌入式开发场景 API 选型速查表
| 串口、传感器硬件采集 | 系统 IO / HAL 库 | read/write、HAL_UART_Transmit |
| GPIO 引脚电平控制 | 系统 IO / HAL 库 | ioctl、HAL_GPIO_WritePin |
| 本地配置、日志文件读写 | 标准 IO | fopen、fread、fwrite |
| 物联网设备上云、远程控制 | Web API | MQTT publish/subscribe、HTTP POST |
| 多进程、进程间通信 | 系统 API | pipe、shm、socket |
| 定时器、PWM 输出 | 系统 API / HAL 库 | timer_create、HAL_TIM_Base_Start |
七、嵌入式 API 核心价值
八、全文总结
硬件底层驱动、Linux 设备文件使用系统 API(系统 IO);文件读写、芯片外设、通信协议调用库 API(标准 IO、HAL 库);物联网联网、云端数据交互依靠Web API。吃透三类 API 的定义、分层、场景与代码示例,即可掌握嵌入式开发全部 API 核心知识。




