LINUX实验报告Word文档下载推荐.docx

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

LINUX实验报告Word文档下载推荐.docx

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

LINUX实验报告Word文档下载推荐.docx

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

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

当前位置:首页 > 人文社科 > 文学研究

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

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