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(); //清空已占用的缓冲区字节数 }
结果:
相关文章推荐
- iPhone摇一摇
- NoSQL
- eclipse中配置nodejs的插件nodeclipse
- 已经证实提高机器学习模型准确率的八大方法
- Unable to load configuration struts2-gxp-plugin-2.3.14.jar
- DevExpress ASP.NET 使用经验谈(9)- Dev控件客户端事件 ClientSideEvents
- iPhone磁力计传感器
- 火炬之光模型导出(Unity载入火炬之光的模型)
- python 多线程下载图片
- 论工匠与工具
- 算法导论15
- 【Android】6.4 DatePickerDialog和TimePickerDialog
- (object sender, EventArgs e)中的sender 和e有什么用呀?
- 吊扇项目总结(一)— 总汇
- android使用SharedPreferences来跳转不同页面
- 【Android】6.3 ProgressDialog
- 【pySpark教程】Introduction & 预备工作(一)
- 1003. Emergency (25)
- 总结一下安装linux系统经验-版本选择-安装ubuntu
- knockoutjs五 if的绑定