LinuxAD采样多线程_第1页
LinuxAD采样多线程_第2页
LinuxAD采样多线程_第3页
LinuxAD采样多线程_第4页
LinuxAD采样多线程_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、嵌入式系统原理及应用实验报告实验六 多线程实验和AD实验 院 (系) 专 业 小组成员 成 绩 指导教师 年 月一实验要求1. 参考实验指导书多线程实验和AD实验,分析源码。2. 编写AD采集多线程程序,实现以下功能:1) 线程1:在循环中对指定的AD通道进行转换和显示,显示格式为:ADx = *.*V 。其中x为通道号0-2,初始值为0。每循环一次延时300ms。2) 线程2:接受用户输入,当输入数值0-2时表示指定AD通道线程1的通道号要随指定值改变; 当输入字符S时显示暂停;输入ESC时程序终止退出。输入其他键值时维持原状。3. 扩展部分:将线程1分为2个线程,一个用来计算,一个用来显示

2、。2.1 实验步骤1 将编成完的程序打包放入虚拟机192.168.0.10/arm2410s;2 将arm2410s挂载到开发板中新建的host文件夹里3 进入到虚拟机的文件夹里make,生成.o文件4 进入串口连接开发板中运行三实验程序/*by threewater<threewaterup->*/#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys/ioctl.h>#include <

3、;pthread.h>#include <fcntl.h>#include "s3c2410-adc.h"#define ADC_DEV"/dev/adc/0raw"static int adc_fd = -1;static int init_ADdevice(void)if(adc_fd=open(ADC_DEV, O_RDWR)<0)printf("Error opening %s adc devicen", ADC_DEV);return -1;static int GetADresult(int cha

4、nnel)int PRESCALE=0XFF;int data=ADC_WRITE(channel, PRESCALE);write(adc_fd, &data, sizeof(data);read(adc_fd, &data, sizeof(data);return data;static int stop=0;int adc_num;int ch; /*esc退出*/static void* comMonitor(void* data)while(1)if (ch = 27)stop=1;exit(1);break;return NULL;/*采样02路A/D值*/int

5、adn;int pausenum=0;void *show(void* data)float d;while( adn=0|adn=1|adn=2 )/采样02路A/D值while(stop=0)while(pausenum=0)d=(float)GetADresult(adn)*3.3)/1024.0;printf("CH%d=%8.4fvt",adn,d);usleep(1);printf("r");break;/*a,b,c显示02路*/void *input(void* data)char chr;pthread_t th_show;while(

6、1)scanf("%c",&chr);chr = getchar();if (chr = 48|chr=49|chr=50)/a,b,c-02路adc_num=chr;adn=adc_num-48;/*if (chr = 48|chr=49|chr=50)adc_num=chr;adn=adc_num-48;/*/*if (chr=43)adc_num=chr;adn=0;if (chr=38)adc_num=chr;adn=1;if (chr=77)adc_num=chr;adn=2;*/else if(chr=115)/s停止pausenum=1;else if

7、(chr=27)/esc退出ch=chr;stop=1;else if(chr!=115)/任意键继续pausenum=0;/break;/*/int main(void)int i;float d;pthread_t th_com,th_show,th_input;void * retval;/set s3c44b0 AD register and start ADif(init_ADdevice()<0)return -1;/* Create the threads */pthread_create(&th_com, NULL, comMonitor, 0);pthread_

8、create(&th_input, NULL, input, 0);printf("nget the key inputn");pthread_create(&th_show, NULL, show, 0);/* Wait until producer and consumer finish. */pthread_join(th_input, &retval);pthread_join(th_show, &retval);pthread_join(th_com, &retval);printf("n");retur

9、n 0;三实验结果四实验总结4.1实验完成效果v 可以实现多线程AD采样效果;v 当输入数值1、2、3时表示指定AD通道线程1的通道号要随指定值改变; 当输入字符s时显示暂停;当输入任意字符时重新开始;输入ESC时程序终止退出。输入其他键值时维持原状;v 可以实现暂停、重新开始、退出功能;v 分为3个线程,一个用来获取键值,一个用来显示,一个用来退出。4.2实验总结在本次实验过程中,遇到了许多问题,开始时,不能实现键入数字来指定AD通道线程的通道号,只能实现通过字母h、j、k来指定AD通道线程的通道号,原因是获取键值的字符串,开始时设置为整型,后面将其改为字符char来获取键值后,就可以通过键入数字来指定AD通道线程的通道号。通过本次实验,提高了我使用软件编程(C语言)的能力,使我的逻辑思维更加清晰,也让我体会到了编程的乐趣; 设计之前要构思好大致方向,设计中出现错误要反复调试,可以设计一小部分,然后调试一小部分,可以使问题简单化; 在课堂上学习

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论