原创 C编程之——循环缓冲区的操作

2008-8-13 17:39 8091 12 15 分类: MCU/ 嵌入式

        在实际工作中很多时候要收发数据,于是便要用到循环缓存,下面就我常常用的通用的循环缓存做个总结,有不妥之处还请高手指点。


(1)    定义循环缓存:



#define   MAX_BUFF_LEN     1024    // 定义缓存大小


typedef struct    // 定义数据结构


{


    uint    data;


}DATA_BUFF_T;


typedef struct    // 定义缓存结构


{


    uint    readPos;


    uint    writePos;


    DATA_BUFF_T    DATA[MAX_BUFF_LEN];


}DATAS_BUFF_T;


static DATAS_BUFF_T   Buff0;    // 定义缓存


(2)初始化循环缓存:



Buff0.readPos = 0;


Buff0.writePos = 0;


(3)判断缓存中是否有数据:



BOOL HaveData_Buff(void)


{


    if (Buff0.readPos != Buff0.write.Pos)


    {


        return 1;


    }


    else


    {


        return 0;


    }


}


(4)向缓存中写数据:



BOOL WriteData(uint data)


{


    uint    nextPos;


    nextPos = (Buff0.writePos + 1) % MAX_BUFF_LEN;


    if (nectPos != Buff0.readPos)    // 判断缓存是否满


    {


        Buff0.DATA[writePos].data = data;


        Buff0.writePos = nextPos;

        return 1;


    }


    else

    {

        return 0;

    }


}


(5)从缓存中读数据:



uint ReadData(void)


{


    uint dataTemp;


    if (HaveData_Buff() == 1)


    {


        dataTemp = Buff0.DATA[ReadPos].data;


        ReadPos = (ReadPos + 1) % MAX_BUFF_LEN;


    }


    return  dataTemp;



}








这是我学习工作过程中的记录和整理,如有错误和不托之处还请大师留言指点,学生在此先行谢过了!!!

PARTNER CONTENT

文章评论3条评论)

登录后参与讨论

用户156616 2008-8-18 12:53

谢谢frenkie兄的指点,对于“读数据最好用指針引用”能否说的再详细一点,我也刚刚入行,在学习中。。。

Cybershu 2008-8-17 00:14

好,菜鸟学习了

用户1095637 2008-8-15 10:19

向缓存中写数据應增加返回值BOOL(判断缓存是否满),从缓存中读数据最好用指針引用,同樣要增加返回值BOOL(判断缓存是否空)
相关推荐阅读
用户156616 2008-07-30 18:25
C 编程之——寄存器赋值操作
    通过这段时间的工作和学习,我感觉在嵌入式硬件编程中,大多数情况下都是对相应硬件的功能寄存器进行设置和操作。一, 寄存器的设置和操作特性1,一个寄存器的每个位有其不同的意义,进行不同的设置会使硬...
用户156616 2008-07-30 14:16
GPIO基本操作之——ARM7:NXP_LPC2103
注:本文的所有操作都是基于NXP公司的ARM7TDMI-S系列芯片LPC2103,关于寄存器的定义请见我上传的附件的“LPC2103.h”头文件一、相关主要寄存器1,PINSEL0和PINSEL1 (...
EE直播间
更多
我要评论
3
12
关闭 站长推荐上一条 /3 下一条