LINUX实验报告.docx

上传人:b****6 文档编号:7723579 上传时间:2023-01-26 格式:DOCX 页数:18 大小:19.36KB
下载 相关 举报
LINUX实验报告.docx_第1页
第1页 / 共18页
LINUX实验报告.docx_第2页
第2页 / 共18页
LINUX实验报告.docx_第3页
第3页 / 共18页
LINUX实验报告.docx_第4页
第4页 / 共18页
LINUX实验报告.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

LINUX实验报告.docx

《LINUX实验报告.docx》由会员分享,可在线阅读,更多相关《LINUX实验报告.docx(18页珍藏版)》请在冰豆网上搜索。

LINUX实验报告.docx

LINUX实验报告

(此文档为word格式,下载后您可任意编辑修改!

 

本科生实验报告

实验课程多传感器信息融合技术

学院名称信息科学与技术学院

专业名称物联网工程

学生姓名何月明

学生学号

指导教师赖武刚

实验地点6B607

实验成绩

 

二〇14年11月二〇14年12月

 

题目1.按键控制蜂鸣器增减

一、实验要求。

(1)按键1:

启动停止蜂鸣器。

按键2:

增加频率10Hz按键3:

减小频率10Hz

按键8:

退出程序。

(2)程序初始化完成后,蜂鸣器的默认状态是停止。

2、实验流程图。

3、实验步骤。

首先明白实验的要求,从按键,数据采集去考虑程序的写法。

则程序可如下:

#include

exit

(1);

}

saveterminalsetting

if(tcgetattr(STDIN_FILENO,&oldt)<0){

perror("savetheterminalsetting");

exit

(1);}

setterminalasneed

newt=oldt;

newt.c_lflag&=~(ICANON|ECHO);

if(tcsetattr(STDIN_FILENO,TCSANOW,&newt)<0){

perror("setterminal");

exit

(1);}

ch=getchar();

open_buzzer();

restoretermialsetting

if(tcsetattr(STDIN_FILENO,TCSANOW,&oldt)<0){

perror("restorethetermialsetting");

exit

(1);}

returnch;

}

staticintfd=-1;

staticvoidclose_buzzer(void);

staticvoidopen_buzzer(void)

{

fd=open("devpwm",0);

if(fd<0){

perror("openpwm_buzzerdevice");

exit

(1);

}

anyfunctionexitcallwillstopthebuzzer

atexit(close_buzzer);

}

staticvoidclose_buzzer(void)

{

if(fd>=0){

ioctl(fd,PWM_IOCTL_STOP);

if(ioctl(fd,2)<0){

perror("ioctl2:

");

}

close(fd);

fd=-1;

}

}

staticvoidset_buzzer_freq(intfreq)

{

thisIOCTLcommandisthekeytosetfrequency

intret=ioctl(fd,PWM_IOCTL_SET_FREQ,freq);

if(ret<0){

perror("setthefrequencyofthebuzzer");

exit

(1);

}

}

staticvoidstop_buzzer(void)

{

intret=ioctl(fd,PWM_IOCTL_STOP);

if(ret<0){

perror("stopthebuzzer");

exit

(1);

}

if(ioctl(fd,2)<0){

perror("ioctl2:

");

}

}

intmain(intargc,char**argv)

{

intfreq=1000;

intbuttons_fd;

inti;

intkey;

charbutons[8]={'0','0','0','0','0','0','0','0'};

charcurrent_buttons[8];

intcount_of_changed_key;

buttons_fd=open("devbuttons",0);

if(buttons_fd<0)

{

printf("opendevicebuttons");

exit

(1);

}

fd=open("devpwm",0);

if(fd<0)

{

perror("openpwm_buzzerdevice");

exit

(1);

}

while

(1)

{

printf("\tFreq=%d\n",freq);

if(read(buttons_fd,current_buttons,sizeofcurrent_buttons)!

=sizofcurrent_buttons)

{

perror("readbutons:

");

exit

(1);

}

for(i=0;i<8;i++)

{

if(buttons[i]!

=current_buttons[i])

{

buttons[i]=current_buttons[i];

if(buttons[i]=='1')

key=i+1;

}

}

switch(key)

{

case1:

set_buzzer_freq(freq);

break;

case2:

if(freq<20000)

freq+=10;

set_buzzer_freq(freq);

break;

case3:

if(freq>11)

freq-=10;

set_buzzer_freq(freq);

break;

case8:

stop_buzzer();

exit(0);

default:

break;c}

}

}

题目2.模拟电压采集报警

一、实验要求。

功能:

(1)按键1:

启动停止ADC,按键8:

退出程序。

(2)程序初始化完成后,ADC的默认状态是停止。

(3)ADC工作时,每秒采样一次电压,采集的数据写入文件adcdata.dat文件保存。

(4)当ADC采样值超过1.5V的时候,蜂鸣器报警。

二、流程图。

三、实验步骤。

#include

{

fd=open("devpwm",0);

if(fd<0){

perror("openpwm_buzzerdevice");

exit

(1);

}

anyfunctionexitcallwillstopthebuzzer

atexit(close_buzzer);

}

staticvoidclose_buzzer(void)

{

if(fd>=0){

ioctl(fd,PWM_IOCTL_STOP);

if(ioctl(fd,2)<0){

perror("ioctl2:

");

}

close(fd);

fd=-1;

}

}

staticvoidset_buzzer_freq(intfreq)

{

thisIOCTLcommandisthekeytosetfrequency

intret=ioctl(fd,PWM_IOCTL_SET_FREQ,freq);

if(ret<0){

perror("setthefrequencyofthebuzzer");

exit

(1);

}

}

staticvoidstop_buzzer(void)

{

intret=ioctl(fd,PWM_IOCTL_STOP);

if(ret<0){

perror("stopthebuzzer");

exit

(1);

}

}

intmain(void)

{intkey=0;

intfreq=1000;

charbuttons[8]={'0','0','0','0','0','0','0','0'};

charcurrent_buttons[8];

intcount_of_changed_key;

inti;

intlen;

charbuffer[30];

intadc_wr;

intflag1;

intflag2;

unsignedcharbuff[BUFFER_SIZE];

fprintf(stderr,"pressCtrl-Ctostop\n");

intadc_fd=open("devadc",0);

if(adc_fd<0){

perror("openADCdevice:

");

return1;

}

intbuttons_fd=open("devbuttons",O_NONBLOCK);

if(buttons_fd<0)

{

printf("opendevicebuttons");

exit

(1);

}

intpwm_fd=open("devpwm",0);

if(pwm_fd<0)

{

perror("openpwm_buzzerdevice");

exit

(1);

}

while

(1)

{

printf("\tFreq=!

!

%d\n",key);

intlen=read(buttons_fd,current_buttons,sizeofcurrent_buttons);

printf("len:

%d",len);

for(flag2=0;flag2<10;flag2++)

{

for(i=0;i<8;i++)

{

if(buttons[i]!

=current_buttons[i])

{

buttons[i]=current_buttons[i];

if(buttons[i]=='1')

key=i+1;

}

usleep(10*1000);

}

}

switch(key)

{

case1:

if(flag1==0)

{

flag1=1;

}

else

{

flag1=0;

}

break;

case8:

close(adc_fd);

exit(0);

break;

}

key=0;

}

if(flag1==1)

{

printf("\tFreq=!

!

!

%d\n",key);

len=read(adc_fd,buffer,sizeofbuffer-1);

adc_wr=open(ADCWR_FILE_NAME,O_WRONLY|O_CREAT|O_APPEND,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);

if(len>0)

{

if(len>1500)

{

set_buzzer_freq(freq);

}

else

{

buffer[len]='\0';

intvalue=-1;

sscanf(buffer,"%d",&value);

printf("ADCValue:

%d\n",value);

write(adc_wr,buffer,len);

}

}

else

{

perror("readADCdevice:

");

return1;

}

}

}

题目3.串口数据保存

1、实验要求。

(1)PC(ubuntu)串口(COM2)定时(0.1s)通过发送字符串¡°COMData:

num\n”,其中num是指的是序号,每次发送序号加1,共计发送100次。

(2)ARM(实验板)串口COM2接收PC(ubuntu)发过来的数据,将数据写入到comdata.dat的文件保存。

2、实验流程图。

3、实验步骤。

Read可读文件:

#include

{

intfd;

intadc_wr;

charbuff[BUFFER_SIZE];

if((fd=open_port(TARGET_COM_PORT))<0){

perror("open_port");

return1;

}

if(set_com_config(fd,8,'N',1)<0)

{

perror("set_com_config");

return1;

}

do

{

memset(buff,0,BUFFER_SIZE);

if(read(fd,buff,BUFFER_SIZE)>0)

{

adc_wr=open(ADCWR_FILE_NAME,O_WRONLY|O_CREAT|O_APPEND,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH););

write(adc_wr,buff,sizeof(buff));

}

}while(strncmp(buff,"quit",4));

close(fd);

return0;

}

Write可写文件:

#include

{

intfd;

charbuff[BUFFER_SIZE];

chars[20];

inti;

if((fd=open_port(HOST_COM_PORT))<0)

{

perror("open_port");

return1;

}

if(set_com_config(fd,8,'N',1)<0)

{

perror("set_com_config");

return1;

}

for(i=0;i<100;i++)

{

memset(buff,0,BUFFER_SIZE);

memset(s,0,20);

sprintf(s,"%d",i);

*memcpy(buff,"COMData:

",BUFFER_SIZE);*

strcpy(buff,"COMData:

");

strcat(buff,s);

*if(fgets(buff,BUFFER_SIZE,stdin)==NULL)

{

perror("fgets");

break;

}*

write(fd,buff,strlen(buff));

usleep(100*1000);

}

memset(buff,0,BUFFER_SIZE);

strcpy(buff,"quit");

write(fd,buff,strlen(buff));

close(fd);

return0;

}

编程设计题:

ADC数据网络传输程序

1、实验要求。

(1)读取ADC频率为50次每秒.

(2)当读取了50次数据再通过TCP发送数据。

(3)PC和ARM程序需要做网络传输包的计数器。

(每次传输的数据(50字节)叫一个网络包。

(4)PC服务端需要将接收的网络包数和数据打印出来,并保存到文件名为adc_tcp文件中。

2、实验流程图。

3、实验步骤。

在pc建立tcpserver端,接收arm实验板发送的数据。

在arm实验板上采集adc数据,在通过tcp将adc采集的数据发送到pc。

则client端:

#include

{

intsockfd,sendbytes;

charbuf[BUFFER_SIZE];

chars1[300];

chars2[20];

structserv_addr;

charbuffer[30];

inti;

intk=0;

if(argc<3)

{

fprintf(stderr,"USAGE:

.clientHostname(oripaddress)Text\n");

exit

(1);

}

*地址解析函数*

if((结构体中相关参数*

serv_addr.sin_family=AF_INET;

serv_addr.sin_port=_addr=*((structin_addr*)_zero),8);

*调用connect函数主动发起对服务器端的连接*

if(connect(sockfd,(structsockaddr*)&serv_addr,sizeof(structsockaddr))==-1)

{

perror("connect");

exit

(1);

}

intadc_fd=open("devadc",0);

if(adc_fd<0){

perror("openADCdevice:

");

return1;

}

while

(1)

{

k++;

sprintf(s2,"thenumber%-2d",k);

strcat(buf,s2);

for(i=0;i<50;i++)

{

intlen=read(adc_fd,buffer,sizeofbuffer-1);

buffer[len]='\0';

intvalue=-1;

sscanf(buffer,"%d",&value);

printf("ADCValue:

%d\n",value);

sprintf(s1,"%4d",value);

strcat(buf,s1);

usleep(20*1000);

}

*发送消息给服务器端*

if((sendbytes=send(sockfd,buf,strlen(buf),0))==-1)

{

perror("send");

exit

(1);

}

memset(s1,0,300);

memset(buf,0,sizeof(buf));

}

close(sockfd);

exit(0);

}

Server端:

#include

{

structsockaddr_inserver_sockaddr,client_sockaddr;

intsin_size,recvbytes;

intsockfd,client_fd;

charbuf[BUFFER_SIZE];

intadc_wr;

*建立socket连接*

if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)

{

perror("socket");

exit

(1);

}

printf("Socketid=%d\n",sockfd);

*设置sockaddr_in结构体中相关参数*

server_sockaddr.sin_family=AF_INET;

server_sockaddr.sin_port=_addr.s_addr=INADDR_ANY;

bzero(&(server_sockaddr.sin_zero),8);

inti=1;*使得重复使用本地地址与套接字进行绑定*

setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&i,sizeof(i));

*绑定函数bind*

if(bind(sockfd,(structsockaddr*)&server_sockaddr,sizeof(structsockaddr))==-1)

{

perror("bind");

exit

(1);

}

printf("Bindsuccess!

\n");

*调用listen函数*

if(listen(sockfd,MAX_QUE_CONN_NM)==-1)

{

perror("listen");

exit

(1);

}

printf("Listening....\n");

*调用accept函数,等待客户端的连接*

if((client_fd=accept(sockfd,(structsockaddr*)&client_sockaddr,&sin_size))==-1)

{

perror("accept");

exit

(1);

}

printf("ClientSocketid=%d\n",client_fd);

while

(1)

{*调用recv函数接收客户端的请求*

memset(buf,0,sizeof(buf));

if((recvbytes=recv(client_fd,buf,BUFFER_SIZE,0))==-1)

{

perror("recv");

exit

(1);

}

printf("Receivedamessage:

%s\n",buf);

printf("!

!

!

%d\n",recvbytes);

adc_wr=open(ADCWR_FILE_NAME,O_WRONLY|O_CREAT|O_APPEND,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);

write(adc_wr,b

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1