littlebot
Published on 2025-04-08 / 10 Visits
0

【源码】基于C语言的嵌入式循环队列库

项目简介

CirQu 是一个专为嵌入式系统设计的简单且轻量级的循环队列库,适用于实时应用场景,可在嵌入式系统中高效管理多个数据项。

项目的主要特性和功能

  • 循环队列管理:支持FIFO和LIFO操作,能管理多个数据项。
  • 类型安全:利用预处理器宏模拟C++模板,编译时可选择数据项类型,避免void*带来的类型安全问题。
  • 多实例支持:项目中可多次实例化库,每个实例能管理不同类型的数据项。
  • 无锁访问:单生产者和单消费者场景下,队列不溢出时支持无锁访问。
  • 低资源占用:低CPU和小内存占用,适合资源受限的微控制器,如AVR ATmega328P/Arduino Uno。
  • 高质量代码:符合MISRA C:2012标准,100%单元测试覆盖率,静态代码分析通过,无动态内存分配。

安装使用步骤

1. 部署库

CirQu 库可通过两种方式部署:

选项A - 使用包装模块

  1. 创建包装模块,统一管理库的多个实例。
  2. 在包装模块的实现文件中,包含库的实现文件,并为每个实例配置ID。
  3. 编译并链接包装模块。 示例代码: ```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 - 多次编译库

  1. 为每个实例配置ID,并分别编译库。
  2. 链接应用程序时,提供所有实例的目标文件。 示例代码: ```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】