# serial_project **Repository Path**: GIT-Tammy/serial_project ## Basic Information - **Project Name**: serial_project - **Description**: 基于Linux,采用多线程架构实现串口数据采集、环形缓冲区解耦、按行拆包、协议解析和日志记录。 - **Primary Language**: C - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2026-04-07 - **Last Updated**: 2026-04-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 串口数据采集与处理程序 ## 1. 项目简介 本项目基于 Embedded Linux 实现一个串口数据采集与处理程序。 程序采用多线程架构: - 一个线程读取串口数据 - 一个线程解析数据 - 一个线程预留给日志写入 ## 2. 当前完成内容 当前版本已经完成: - 工程目录结构 - Makefile - uart 模块 - ring buffer 模块 - 基本线程框架 - 按行拆包流程 ## 3. 目录结构 serial_project/ ├── Makefile ├── README.md ├── include/ │ ├── common.h │ ├── config.h │ ├── uart.h │ ├── ring_buffer.h │ ├── parser.h │ ├── log.h │ └── worker.h ├── src/ │ ├── main.c │ ├── uart.c │ ├── ring_buffer.c │ ├── parser.c │ ├── log.c │ └── worker.c ├── build/ └── logs/ ## 4. 模块说明 ### uart 模块 负责: - 打开串口 - 配置波特率和串口参数 - 读取串口原始数据 - 关闭串口 ### ring buffer 模块 负责: - 在线程之间传递数据 - 缓冲字节流数据 - 提供线程安全的读写接口 ### parser 模块 负责: - 从 ring buffer 中按字节读取数据 - 以 `\n` 作为一条消息的结束标志 - 为后续协议解析做准备 ### log 模块 负责: - 将解析结果写入日志文件 - 当前版本暂未真正接入 ### worker 模块 负责: - 线程入口函数 - 连接 uart、buffer、parser、log 的主流程 ## 5. 主流程 UART -> uart_thread -> raw ring buffer -> parse_thread -> 输出/日志 ## 6. 为什么使用多线程 - 串口读取具有实时性 - 解析操作可能耗时 - 文件写日志属于慢速 IO - 分线程后各模块互不阻塞 ## 7. 为什么使用环形缓冲区 - 适合串口字节流 - 内存固定 - 读写效率高 - 适合嵌入式 Linux 场景 ## 8. 编译运行 ```bash make clean make sudo ./serial_app