项目简介
环形缓冲区是一种固定大小的数据结构,利用单个、固定大小的缓冲区实现环形结构。其固定大小特性让内存使用高效,避免了动态内存分配带来的开销和内存碎片问题,非常适合资源受限的嵌入式系统。该数据结构广泛用于音频流、网络数据包处理、日志记录等需高效处理流式数据的场景。本项目是一个用C语言编写的高移植性环形缓冲区库,支持多种硬件平台,包括Linux平台和常见嵌入式平台。库内通过指针实现高效读写操作,无需复杂内存管理,且支持多种写入策略配置,能满足不同应用场景需求。
项目的主要特性和功能
- 跨平台支持:支持多种嵌入式硬件平台,如Linux内核、FreeRTOS、裸机等,适用于STM32、ESP32、ESP8266等平台。
- 写入策略可配置:支持覆盖旧数据和拒绝新数据两种策略,默认配置为拒绝新数据策略,可通过宏定义调整。
- 无锁和有锁模式:支持无锁和有锁两种工作模式,通过宏定义配置,适用于单生产者单消费者或多生产者多消费者场景。
- 线程安全:在多线程环境下,通过锁机制保证数据的一致性和线程安全。
- 高移植性:设计考虑了跨平台需求,可在不同硬件平台上无缝运行。
安装使用步骤
假设用户已经下载了本项目的源码文件,使用步骤如下:
1. 进入项目目录:
bash
cd circular_buffer/
2. 编译项目:
bash
make
3. 编译静态库:
bash
make lib
4. 运行测试:
bash
make run_tests && ./run_tests
5. 使用指定工具链编译:
bash
make lib CC=/path/to/riscv64-unknown-elf-gcc AR=/path/to/riscv64-unknown-elf-ar
6. 清理生成的文件:
bash
make clean
测试说明
- 编译单元测试用例:
bash make run_tests
- 运行单元测试程序:
bash cd ./bin && ./run_tests
-
查看测试结果:测试结果会显示每个测试用例是否通过,例如: ```bash test_case/test_circular_buffer.c:307:test_circular_buffer_init:PASS test_case/test_circular_buffer.c:308:test_circular_buffer_write_and_read:PASS test_case/test_circular_buffer.c:309:test_circular_buffer_full:PASS test_case/test_circular_buffer.c:310:test_circular_buffer_empty:PASS test_case/test_circular_buffer.c:311:test_circular_buffer_boundary:PASS test_case/test_circular_buffer.c:312:test_circular_buffer_random_operations:PASS test_case/test_circular_buffer.c:313:test_circular_buffer_stress_test:PASS test_case/test_circular_buffer.c:314:test_circular_buffer_concurrent:PASS
8 Tests 0 Failures 0 Ignored OK ```
注意事项
在写入数据策略配置成覆盖旧数据模式下,一定要通过锁进行线程安全保护(裸机除外,因为裸机平台没有多线程的概念,不需要通过锁进行保护)。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】