您的位置:首页 > 其它

vxWorks的环形缓冲示例

2016-02-08 20:23 330 查看
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();                //清空已占用的缓冲区字节数

}


结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: