LINUX实验报告Word文档下载推荐.docx
《LINUX实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《LINUX实验报告Word文档下载推荐.docx(18页珍藏版)》请在冰豆网上搜索。
perror("
savetheterminalsetting"
exit
(1);
setterminalasneed
newt=oldt;
newt.c_lflag&
=~(ICANON|ECHO);
if(tcsetattr(STDIN_FILENO,TCSANOW,&
newt)<
setterminal"
}
ch=getchar();
open_buzzer();
restoretermialsetting
if(tcsetattr(STDIN_FILENO,TCSANOW,&
restorethetermialsetting"
returnch;
staticintfd=-1;
staticvoidclose_buzzer(void);
staticvoidopen_buzzer(void)
{
fd=open("
devpwm"
0);
if(fd<
openpwm_buzzerdevice"
anyfunctionexitcallwillstopthebuzzer
atexit(close_buzzer);
staticvoidclose_buzzer(void)
if(fd>
=0){
ioctl(fd,PWM_IOCTL_STOP);
if(ioctl(fd,2)<
perror("
ioctl2:
"
}
close(fd);
fd=-1;
staticvoidset_buzzer_freq(intfreq)
thisIOCTLcommandisthekeytosetfrequency
intret=ioctl(fd,PWM_IOCTL_SET_FREQ,freq);
if(ret<
setthefrequencyofthebuzzer"
staticvoidstop_buzzer(void)
intret=ioctl(fd,PWM_IOCTL_STOP);
stopthebuzzer"
if(ioctl(fd,2)<
intmain(intargc,char**argv)
intfreq=1000;
intbuttons_fd;
inti;
intkey;
charbutons[8]={'
0'
'
};
charcurrent_buttons[8];
intcount_of_changed_key;
buttons_fd=open("
devbuttons"
if(buttons_fd<
0)
{
printf("
opendevicebuttons"
0)
while
(1)
printf("
\tFreq=%d\n"
freq);
if(read(buttons_fd,current_buttons,sizeofcurrent_buttons)!
=sizofcurrent_buttons)
{
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);
case3:
if(freq>
11)
freq-=10;
break;
case8:
stop_buzzer();
exit(0);
default:
c}
题目2.模拟电压采集报警
功能:
(1)按键1:
启动停止ADC,按键8:
(2)程序初始化完成后,ADC的默认状态是停止。
(3)ADC工作时,每秒采样一次电压,采集的数据写入文件adcdata.dat文件保存。
(4)当ADC采样值超过1.5V的时候,蜂鸣器报警。
二、流程图。
三、实验步骤。
stdio._buzzer(void)
anyfunctionexitcallwillstopthebuzzer
intmain(void)
{intkey=0;
charbuttons[8]={'
intlen;
charbuffer[30];
intadc_wr;
intflag1;
intflag2;
unsignedcharbuff[BUFFER_SIZE];
fprintf(stderr,"
pressCtrl-Ctostop\n"
intadc_fd=open("
devadc"
if(adc_fd<
openADCdevice:
return1;
intbuttons_fd=open("
O_NONBLOCK);
intpwm_fd=open("
if(pwm_fd<
\tFreq=!
!
%d\n"
key);
intlen=read(buttons_fd,current_buttons,sizeofcurrent_buttons);
len:
%d"
len);
for(flag2=0;
flag2<
10;
flag2++)
for(i=0;
{
buttons[i]=current_buttons[i];
if(buttons[i]=='
key=i+1;
}
usleep(10*1000);
switch(key)
case1:
if(flag1==0)
flag1=1;
else
flag1=0;
case8:
close(adc_fd);
exit(0);
break;
key=0;
if(flag1==1)
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>
if(len>
1500)
set_buzzer_freq(freq);
buffer[len]='
\0'
;
intvalue=-1;
sscanf(buffer,"
&
value);
printf("
ADCValue:
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的文件保存。
Read可读文件:
stdio.(void)
intfd;
charbuff[BUFFER_SIZE];
if((fd=open_port(TARGET_COM_PORT))<
0){
open_port"
if(set_com_config(fd,8,'
N'
1)<
set_com_config"
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));
return0;
Write可写文件:
chars[20];
if((fd=open_port(HOST_COM_PORT))<
perror("
for(i=0;
100;
memset(s,0,20);
sprintf(s,"
i);
*memcpy(buff,"
BUFFER_SIZE);
*
strcpy(buff,"
strcat(buff,s);
*if(fgets(buff,BUFFER_SIZE,stdin)==NULL)
fgets"
}*
write(fd,buff,strlen(buff));
usleep(100*1000);
memset(buff,0,BUFFER_SIZE);
strcpy(buff,"
write(fd,buff,strlen(buff));
close(fd);
编程设计题:
ADC数据网络传输程序
(1)读取ADC频率为50次每秒.
(2)当读取了50次数据再通过TCP发送数据。
(3)PC和ARM程序需要做网络传输包的计数器。
(每次传输的数据(50字节)叫一个网络包。
(4)PC服务端需要将接收的网络包数和数据打印出来,并保存到文件名为adc_tcp文件中。
在pc建立tcpserver端,接收arm实验板发送的数据。
在arm实验板上采集adc数据,在通过tcp将adc采集的数据发送到pc。
则client端:
systypes..(intargc,char*argv[])
intsockfd,sendbytes;
charbuf[BUFFER_SIZE];
chars1[300];
chars2[20];
structserv_addr;
intk=0;
if(argc<
3)
fprintf(stderr,"
USAGE:
.clientHostname(oripaddress)Text\n"
*地址解析函数*
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)
connect"
while
(1)
k++;
sprintf(s2,"
thenumber%-2d"
k);
strcat(buf,s2);
for(i=0;
50;
intlen=read(adc_fd,buffer,sizeofbuffer-1);
buffer[len]='
intvalue=-1;
sscanf(buffer,"
printf("
sprintf(s1,"
%4d"
strcat(buf,s1);
usleep(20*1000);
*发送消息给服务器端*
if((sendbytes=send(sockfd,buf,strlen(buf),0))==-1)
send"
memset(s1,0,300);
memset(buf,0,sizeof(buf));
close(sockfd);
exit(0);
Server端:
systypes..()
structsockaddr_inserver_sockaddr,client_sockaddr;
intsin_size,recvbytes;
intsockfd,client_fd;
*建立socket连接*
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
socket"
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)
bind"
Bindsuccess!
\n"
*调用listen函数*
if(listen(sockfd,MAX_QUE_CONN_NM)==-1)
listen"
Listening....\n"
*调用accept函数,等待客户端的连接*
if((client_fd=accept(sockfd,(structsockaddr*)&
client_sockaddr,&
sin_size))==-1)
accept"
ClientSocketid=%d\n"
client_fd);
{*调用recv函数接收客户端的请求*
memset(buf,0,sizeof(buf));
if((recvbytes=recv(client_fd,buf,BUFFER_SIZE,0))==-1)
recv"
Receivedamessage:
%s\n"
buf);
recvbytes);
adc_wr=open(ADCWR_FILE_NAME,O_WRONLY|O_CREAT|O_APPEND,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
write(adc_wr,buf,rec