vxWorks的环形缓冲示例

vxWorks环形缓冲是多任务交流方式中共享内存方式之一,适用于单字节操作,优势是不需要复制数据,下面是示例代码:

#include "vxworks.h"
#include "rngLib.h"
#include "stdLib.h"
#include "stdio.h"

static RING_ID getRingNum = NULL;       // 环形buffer结构数组定义的名称

//
// 用于构建一个环形buffer的队列
//
int inital()
{
    // 如果队列为空的话,则创建队列
    if (getRingNum==NULL)
    {
        // 为环形buffer分配254个字节
        getRingNum=rngCreate(254);
        
        if (getRingNum==NULL)                     
        {
            // 如果分配不成功
            printf("the ring buffer create failed!\n");
            return 0;
        }
    }
    return 1;
}


//向已定义的环形buffer里传入数据
void put()                                  
{
    int i=0;
    int temp=0;
    char putbuffer[256] = {0};
    
    for (; i<128; i++)
    {
        putbuffer[i]=i;
    }

    //确定传入的环形字节数目
    temp=rngBufPut(getRingNum, putbuffer, 256);
    printf("the buffer you send is %d \n",temp);
    
    for (i=0; i<128; i++)
    {
        //输出结构数组里得到的数据
        printf(" %d ",getRingNum->buf[i]);
    }
    printf("\n");
}

//从环形buffer 里得到数据,maxbytes为环形buffer所能得到的最大数据数目
void get(int maxbytes)                                    
{
    int receive=0;
    int i=0;
    char getbuffer[256] = {0};

    //用于确定得到了多少个字节数据
    receive=rngBufGet(getRingNum, getbuffer, maxbytes);          
    printf("the receive buffer size is  %d \n",receive);
    for (i=0; i<128; i++)
    {
        printf(" %d ",getbuffer[i]) ;
    }
    printf("\n");
}

//对占用的空间进行清空的操作
void clear()                                    
{
    rngFlush(getRingNum);
}


void TestRngBuffer()
{
    int start=0;
    start=inital();         //创建环形buffer
    if (start==0)
    {
        printf("you did not create the ring buf!\n");
    }

    put();                  //向环形buffer进行传递数据
    get(1024);              //获得环形bufffer的数据
    printf("success the end!\n");
    clear();                //清空已占用的缓冲区字节数

}


结果:

vxWorks的环形缓冲示例_第1张图片






你可能感兴趣的:(vxWorks的环形缓冲示例)