工具类–开源循环缓冲区

循环缓冲区是嵌入式软件工程师工具箱中至关重要的组件。多年来,有很多不同的循环缓冲区的实现和示例,这些问题已经遍及Internet。一世’我特别喜欢可以在以下位置找到的开源CBUF.h模块 //github.com/barraq/BRBrain/blob/master/firmware/CBUF.h

CBUF.h模块使用宏实现循环缓冲区。现在,一般而言,我不喜欢以这种方式使用宏,但是事实证明该实现可以快速,高效且相对良好地工作,这很难争论。循环缓冲区很容易设置。首先,需要定义循环缓冲区的大小。这是通过定义宏myQ_SIZE来完成的,同时要记住缓冲区大小必须为2的幂。

然后,通过创建类型为myQ的变量来声明循环缓冲区。例如,如果将myQ_SIZE定义为64字节,则可以定义UART的发送和接收缓冲区,如下图1所示。

myQdefine图1 –定义循环缓冲区

在此示例中,myQ被定义为静态的,以限制缓冲区的范围,并声明为易失性的,因为在中断内部对其进行了修改。不过,定义循环缓冲区只是第一步。为了分配缓冲区,必须将这些变量传递到CBUF_INIT宏,如下图2所示。

CBUFINIT图2 –缓冲区初始化

 除了此初始设置之外,该缓冲区还相当简单并且易于使用。例如,可以使用CBUF_PUSH将通过串行接口接收UART接收的字符推入循环缓冲区,如图3所示。

接收缓冲区

图3 –推入缓冲区

 开发人员不仅希望将数据推送到循环缓冲区中,而且还要弹出或从缓冲区中获取数据。一个简单的例子就是需要一个字符并通过UART传输的串行发送器。示例传输功能如图4所示。

TxBuffer

图4 –从缓冲区弹出数据

 在可靠的应用中,还应检查循环缓冲区的长度和溢出状态。 CBUF模块确实提供了宏,以便能够检查这些重要指标。要记住的一个重要问题是,如果需要对CBUF本身进行任何调试,则不可能。无法为宏设置断点,因此如果出现问题,则需要对模块进行功能处理以逐步调试。多年来使用此模块,尽管我没有发现这是一个问题。

循环缓冲区是与嵌入式系统内的串行设备通信的重要方面。循环缓冲区也很容易理解,应该创建循环缓冲区,以便可以对其进行模块化并从一个应用程序重复使用到下一个应用程序。到目前为止,CBUF模块已被证明是这样的模块,我鼓励开发人员下载并自己尝试。

发表评论

您的电子邮件地址不会被公开。 必需的地方已做标记 *

该网站使用Akismet减少垃圾邮件。 了解如何处理您的评论数据.