欢迎来到天天文库
浏览记录
ID:12362906
大小:270.50 KB
页数:17页
时间:2018-07-16
《嵌入式系统课程设计--多线程实现环形缓冲区数据的输入输出控制》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、常熟理工学院课程设计报告物理与电子工程学院《嵌入式系统与应用》课程设计报告题目多线程实现环形缓冲区数据的输入输出控制系别物理与电子工程学院年级专业班级学号学生姓名指导教师职称设计时间2015.6.4~2015.6.2816常熟理工学院课程设计报告目录第一章绪论21.1课题目的和重点问题21.1.1目的和意义21.1.2重点解决的问题21.1.3系统实现的具体功能2第二章正文32.1功能需求分析32.1.1功能需求分析32.1.2功能实现环境分析32.2系统设计42.2.1功能框图42.2.2模块的功能42
2、.3技术实现102.3.1模块的实现102.3.2问题的解决112.4总结15参考文献1516常熟理工学院课程设计报告第一章绪论1.1课题目的和重点问题1.1.1目的和意义通过使用Linux环境下的C语言编程,完成环形缓冲区数据的输入输出控制。来加深对Linux多线程编程实现的认识和操作。1.1.2重点解决的问题在解决环形缓冲区数据的输入输出控制的实验中,一是要解决实现多线程的同步工作问题,二是如何使用串口发送数据。1.1.3系统实现的具体功能利用ARM9的开发平台在Linux操作系统中,程序设计一个环形
3、缓冲区,A线程不断填充缓冲区数据(按串口收到的初始值开始,每次减一填入;串口发来的初始化数据更改能及时更新缓冲区),B线程每隔1ms从缓冲区读出数据(若此时缓冲区空,则打印一个警告信息),缓冲区每读到一个特定数据则控制Led灯点亮一次(3个灯不同的特定数据控制),点亮灯由C线程控制,串口的输入响应由D线程实现。当串口输入一个非数字则整个程序退出。16常熟理工学院课程设计报告第二章正文2.1功能需求分析2.1.1功能需求分析在这个课题中,需要创建一个环形缓冲区,往这个环形缓冲区中填写和读取数据。多线程的编程
4、对于Linux系统开发是必须了解和掌握的。因为在实现这个课程目标时,需要几个功能模块同步协调完成。发送数据和读取数据线程要协调进行,不能发生冲突,同时还需要从串口发送数据进程不断获取刷新数据,所以在进行多线程编程时要做好进程的协调。2.1.2功能实现环境分析硬件:up-Star认证考试实践板、PC机Pentium500以上,硬盘10G以上。软件:PC机操作系统REDHATLINUX9.0+MINICOM+ARM-LINUX+xshell开发环境16常熟理工学院课程设计报告2.2系统设计2.2.1功能框图图
5、2.2.1系统功能框图2.2.2模块的功能本次课题中共有三大功能模块:串口数据发送模块、缓冲区数据填充模块、读取缓冲区数据模块。基本程序框架:structprodcons/*设置一个整数的圆形缓冲区*/{intbuffer[BUFFER_SIZE];/*缓冲区数组*/pthread_mutex_tlock;/*互斥锁*/intreadpos,writepos;/*读写的位置*/pthread_cond_tnotempty;/*缓冲区非空信号*/pthread_cond_tnotfull;/*缓冲区非满信号
6、*/};16常熟理工学院课程设计报告/*--------------------------------------------------------*/voidwarn(structprodcons*b){if(b->writepos!=b->readpos){printf("warning:thebufferisempty");}}/*初始化缓冲区*/voidinit(structprodcons*b){pthread_mutex_init(&b->lock,NULL);pthread_cond
7、_init(&b->notempty,NULL);pthread_cond_init(&b->notfull,NULL);b->readpos=0;b->writepos=0;}/*--------------------------------------------------------*//*向缓冲区中写入一个整数*/voidput(structprodcons*b,intdata){pthread_mutex_lock(&b->lock);/*等待缓冲区非满*/while((b->writepo
8、s+1)%BUFFER_SIZE==b->readpos){printf("waitfornotfull");pthread_cond_wait(&b->notfull,&b->lock);}/*写数据并且指针前移*/b->buffer[b->writepos]=data;b->writepos++;16常熟理工学院课程设计报告if(b->writepos>=BUFFER_SIZE)b->writepos=0;/*设置缓冲
此文档下载收益归作者所有