项目简介
CirQu 是一个专为嵌入式系统设计的简单且轻量级的循环队列库,适用于实时应用场景,可在嵌入式系统中高效管理多个数据项。
项目的主要特性和功能
- 循环队列管理:支持FIFO和LIFO操作,能管理多个数据项。
- 类型安全:利用预处理器宏模拟C++模板,编译时可选择数据项类型,避免
void*
带来的类型安全问题。 - 多实例支持:项目中可多次实例化库,每个实例能管理不同类型的数据项。
- 无锁访问:单生产者和单消费者场景下,队列不溢出时支持无锁访问。
- 低资源占用:低CPU和小内存占用,适合资源受限的微控制器,如AVR ATmega328P/Arduino Uno。
- 高质量代码:符合MISRA C:2012标准,100%单元测试覆盖率,静态代码分析通过,无动态内存分配。
安装使用步骤
1. 部署库
CirQu 库可通过两种方式部署:
选项A - 使用包装模块
- 创建包装模块,统一管理库的多个实例。
- 在包装模块的实现文件中,包含库的实现文件,并为每个实例配置ID。
- 编译并链接包装模块。 示例代码: ```c
ifndef CQWRAP_H
define CQWRAP_H
define CQTEMPLSEUP_ID 0
include "CQqu.h"
undef CQTEMPLSEUP_ID
define CQTEMPLSEUP_ID 1
include "CQqu.h"
undef CQTEMPLSEUP_ID
endif / CQWRAP_H /
```
选项B - 多次编译库
- 为每个实例配置ID,并分别编译库。
- 链接应用程序时,提供所有实例的目标文件。 示例代码: ```c
ifndef CQQU_H0
define CQQU_H0
define CQTEMPLSEUP_ID 0
include "CQqu.h"
undef CQTEMPLSEUP_ID
endif / CQQU_H0 /
ifndef CQQU_H1
define CQQU_H1
define CQTEMPLSEUP_ID 1
include "CQqu.h"
undef CQTEMPLSEUP_ID
endif / CQQU_H1 /
```
2. 使用API
使用库的API时,需为每个实例的函数和变量添加ID后缀。例如,对于ID为0
的实例:
```c
CQqu_qu_t0 ...;
CQqu_init0(...); ```
项目架构
项目架构通过UML类图、包图和示例队列对象图描述,具体参考doc/arc/figures
目录下的相关文件。
代码规范
项目遵循MISRA C:2012标准,参考NASA/JPL的《The Power of Ten - Rules for Developing Safety Critical Code》,代码风格统一,注释详尽。
工作流程
项目采用简单的Git分支工作流程,主要分支为develop
(开发分支)和master
(发布分支)。新功能开发在独立主题分支进行,完成后合并到develop
分支,发布时将develop
分支合并到master
分支。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】