ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:585.92KB ,
资源ID:23072204      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/23072204.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(嵌入式系统实验二.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

嵌入式系统实验二.docx

1、嵌入式系统实验二 实验二 嵌入式系统程序设计实验之linux串口和网络编程 一、实验目的: 1、强化本学期所学的相关的内容。 2、掌握串口相关设置。 3、强化基于TCP网络传输的三次握手。 4、自学Linux线程的使用。二、实验内容: 本试验基于server和client的透明传输来实现类似于QQ的聊天功能。三、实验过程: 1、linux开发环境的建立 2、嵌入式linux系统的搭建 1BootLoader的移植 2linux系统的裁剪与移植 Linux内核裁剪 ./make_image生成自己的uImage2638上电验证:3根文件系统的移植修改hostname为:whmtt./mkcram

2、fsdisk_new 生成rootfs_new.cramfs大小从老师给的40000到37b00(因为有的没有用到,大小变小了):上电验证: 3、客服端编程client.c 相关代码:#include #include #include #include #include #include #include #include #define SERVER_PORT 20000 /设置服务端口#define CLIENT_PORT (20001+rand()%65536) /设置客户端端口(随机) #define BUFFER_SIZE 256 #define LENGTH_OF_LISTEN_

3、QUEUE 10 /可窃听队列长为10#define WELCOME_MESSAGE welcome to connect the server. void usage(char* name) printf( usage: %s IpAddrn ,name); struct sockaddr_in servaddr,cliaddr;int servfd,clifd,length=0;struct sockaddr_in servaddr,cliaddr;socklen_t socklen=sizeof(servaddr);char bufBUFFER_SIZE,buf2BUFFER_SIZE;

4、pthread_t tidp,tidp2;int pth;int runflag=0;void *Thread1(void *arg) /*等待runflag为1,当为1时清空buf, 同时接收来自server的数据并输出。 但当没有清空,则break.*/ while(runflag) memset(buf,0,BUFFER_SIZE); length=recv(clifd,buf,BUFFER_SIZE,0); if(strstr(buf,$)0)runflag=0;printf(stop!n);break; if(length0) printf(from server:%s,buf);

5、void *Thread2(void *arg) /*等待发送数据给Server*/ printf(Please input your words to Server:-$ to stopn); while(runflag) memset(buf2,0,BUFFER_SIZE); scanf(%s,buf2); send(clifd,buf2,strlen(buf2),0); if(strstr(buf2,$)0)runflag=0;printf(stop!n);break; int main(int argc, char* argv) if(argc 2 ) usage(argv0); ex

6、it( 1 ); if(clifd = socket(AF_INET,SOCK_STREAM,0) 0 ) /用tcp定义socket printf( create socket error!n ); exit( 1 ); srand(time(NULL); / initialize random generator bzero( & cliaddr, sizeof (cliaddr); cliaddr.sin_family = AF_INET; cliaddr.sin_port = htons(CLIENT_PORT); cliaddr.sin_addr.s_addr = htons(INA

7、DDR_ANY); if(bind(clifd,(struct sockaddr* )&cliaddr,sizeof(cliaddr) 0 ) printf( bind to port %d failure!n ,CLIENT_PORT); exit( 1 ); /绑定的目的是让其端口是随机的,否则端口是自增1 /一般情况下client端不用绑定 bzero(&servaddr, sizeof(servaddr); servaddr.sin_family = AF_INET; inet_aton(argv1, &servaddr.sin_addr); servaddr.sin_port = h

8、tons(SERVER_PORT); if(connect(clifd,( struct sockaddr *)&servaddr, socklen) 0) printf( cant connect to %s!n, argv1); exit(1); runflag=1; pth=pthread_create(&tidp,NULL,Thread1,NULL); if(pth!=0)printf(error!);return -1; pth=pthread_create(&tidp2,NULL,Thread2,NULL); if(pth!=0)printf(error!);return -1;

9、pthread_detach(tidp); pthread_detach(tidp2); while(runflag); close(clifd); return 0; 4、服务端server.c编写 相关代码:#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define COM0 0#define BLOCK_MODE

10、 1#define NONBLK_MODE 0#define SERVER_PORT 20000#define LENGTH_OF_LISTEN_QUEUE 10#define QUEUE 20#define BUFFER_SIZE 256#define WELCOME_MESSAGE welcome to connect the server.static struct termios g_newtio,g_oldtio;static int speed_arr = B115200, B57600, B38400, B19200, B9600, B4800, B2400, B1200, B3

11、00, B115200, B57600, B38400, B19200, B9600, B4800, B2400, B1200, B300, ;static int name_arr = 115200, 57600, 38400, 19200, 9600, 4800, 2400, 1200, 300, 115200, 57600, 38400, 19200, 9600, 4800, 2400, 1200, 300, ;int Init_COM(int Comm,int Baudrate,int Parity,int Stopbit,int Flagblock) int ret,i; char

12、dev_buf16; if(Comm 3) printf(Com%d not existn,Comm); return -1; memset(dev_buf,0x00,sizeof(dev_buf); sprintf(dev_buf,/dev/ttyS%d,Comm); if(Flagblock) ret = open(dev_buf, O_RDWR | O_NOCTTY );/以默认阻塞方式打开 else ret = open(dev_buf, O_RDWR | O_NOCTTY | O_NONBLOCK); /以非阻塞方式打开 if(ret 0) printf(Open ttyS%d fa

13、iledn,Comm); return -1; if( tcgetattr(ret, &g_oldtio) 0 )/保存原先的端口 printf(Get Com Parameter Error.n); return -1; for ( i= 0; i =sizeof(speed_arr) / sizeof(int) printf(Unsupported Speed!n); return -1; switch (Parity) case n: case N: g_newtio.c_cflag &= PARODD; g_newtio.c_cflag &= PARENB; break; case o

14、: case O: g_newtio.c_cflag |= PARENB; g_newtio.c_cflag |= PARODD; /奇校验 break; case e: case E: g_newtio.c_cflag |= PARENB; /偶校验 g_newtio.c_cflag &= PARODD; break; default: printf(Unsupported Parityn); return -1; switch(Stopbit) /设置停止校验位是为2,否为1. case 1: g_newtio.c_cflag &= CSTOPB; break; case 2: g_new

15、tio.c_cflag |= CSTOPB; break; default: printf(Unsupported Stopbit!n); return -1; g_newtio.c_iflag = 0; g_newtio.c_oflag = 0; g_newtio.c_lflag = 0; g_newtio.c_ccVTIME = 1; /最大等待时间为1*100ms g_newtio.c_ccVMIN = 1; /最小读数为1 g_newtio.c_iflag &= INPCK; g_newtio.c_cflag &= CRTSCTS; g_newtio.c_cflag &= CSIZE;

16、/设置数据位 g_newtio.c_cflag |= CS8; / g_newtio.c_cflag |= CLOCAL; g_newtio.c_cflag |= CREAD; if( tcsetattr(ret, TCSANOW, &g_newtio) != 0 ) /激活设置 printf(Set Com Parameter Error!n); return -1; tcflush (ret, TCIOFLUSH); /刷新输入输出缓存 return ret;/以上为套接字的相关定义/一下类似与client一样设置数据接收和发送。void RestoreComConfiguration(i

17、nt fd,struct termios *ptios) if( tcsetattr(fd, TCSANOW, ptios) != 0 ) printf(Restore Com Parameter Error!n); int fd;char buf1024,buf21024;int servfd,clifd;struct sockaddr_in servaddr,cliaddr;int runflag=0;void *Thread1(void *arg) printf(Please input your words to Server:-$ to stopn); while(runflag)

18、memset(buf,0,BUFFER_SIZE); read(fd,buf,1024); send(clifd,buf,strlen(buf),0); if(strstr(buf,$)0)runflag=0;printf(stop!n);break; void *Thread2(void *arg) int length=0; while(runflag)char stdstr1024=from client:; memset(buf2,0,BUFFER_SIZE); length=recv(clifd,buf2,1024,0); if(length0) strcat(stdstr,buf2

19、);strcat(stdstr,n); if(strstr(buf2,$)0) runflag=0;printf(stop!n);break; write(fd,stdstr,strlen(stdstr); void socket_init(void) if(servfd=socket(AF_INET,SOCK_STREAM,0)0) printf(create socket error!n); exit(1); bzero(&servaddr,sizeof(servaddr); servaddr.sin_family=AF_INET; servaddr.sin_port=htons(SERV

20、ER_PORT); servaddr.sin_addr.s_addr=htons(INADDR_ANY); if(bind(servfd,(struct sockaddr*)&servaddr,sizeof(servaddr)0) printf(bind to port %d failure!n,SERVER_PORT); exit(1); if(listen(servfd,QUEUE)0) printf(call listen failure!n); exit(1); socklen_t length=sizeof(cliaddr); clifd=accept(servfd,(struct

21、sockaddr*)&cliaddr,&length); if(clifd= 0) RestoreComConfiguration(fd,&g_oldtio); runflag=1; pth=pthread_create(&tidp,NULL,Thread1,NULL); if(pth!=0)printf(error!);return -1; pth=pthread_create(&tidp2,NULL,Thread2,NULL); if(pth!=0)printf(error!);return -1; pthread_detach(tidp); pthread_detach(tidp2); while(runflag); close(clifd);close(fd);close(servfd);/全部关闭 return 0; 编译结果: 5、nfs挂载4、实验结果:5、心得体会:

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

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