版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、通信与信息工程学院嵌入式开发技术课程设计报告班级:姓名:学号:指导教师:设计时间:2016 年 1 月 11 日2016 年 1 月 14 日成绩:评语:通信与信息工程学院二一六年嵌入式开发技术课程设计报告目录嵌入式课程设计11 设计要求11.1 基本题型11.2 综合题型22 开发环境、开发工具23 设计过程及结果53.1 实现交叉编译环境53.2 第几小组成员步骤53.3 实现 Linux 系统下的简易聊天室74 设计总结19参考文献22II嵌入式开发技术课程设计报告嵌入式课程设计1 设计要求1.1 基本题型(1)嵌入式开发环境配置采用 vmware+linux 配置开发主机系统 ,要求构
2、建 linux 系统,配置 nfs,samba;掌握 minicom 、samba及 NFS 使用,能利用其实现windows、linux 开发主机与嵌入式实验系统间的通信;利用 NFS 服务实现主机与实验系统间文件共享;利用提供的工具构建交叉编译环境;要求:在下图时间上面一行显示小组成员姓名Armv4l-unknown-linux-gcc是 否 在/opt/host/armv4l/bin/,如果不是这个路径,请使用vi修改 /root/.bash_profile文件中。ATH变 量 为 PATH=$PATH:$HOME/bin:/opt/host/armv4l/bin/,存 盘 后 执 行
3、: source /root/.bash_profile( 2)熟悉 VI 、GCC、GDB 及 MAKE 文件使用;(3)在开发系统中编写一个程序,实现打印“通信工程13级第 3小1嵌入式开发技术课程设计报告组嵌入式开发技术课程设计基础内容”功能,编写makefile 文件,并通过 NFS 下载到实验箱中,验证交叉编译环境配置。1.2 综合题型基于 socket 编程的简单聊天室程序设计:( 1)掌握 linux 下 socket 编程方法;( 2)基于 C 语言设计一个简单的聊天室程序, PC 运行客户端程序,嵌入式系统运行服务器端程序, 服务器随时侦听客户端请求并将其接入,要求至少实现
4、2 个客户端接入服务器并进行通信的功能;( 3)编写 Makefile 文件;( 4)利用 NFS 将程序下载到实验箱中,编译执行。( 5)课程设计报告中应包含服务器端 socket 创建、绑定、监听、允许接入及接收数据等关键代码及其说明, 客户端请求及数据发送等关键代码及说明;2 开发环境、开发工具( 1)安装 VWware 软件开始安装加载文件.双击该文件的图标,进入加载安装文件的界面。设置安装类型。 安装文件加载完毕后进入开始安装界面。单击 next 按钮后,进入安装类型选择界面,选择tyical 选项。执行软件包的安装选项, 依据所做的选择, 把对应的软件组2嵌入式开发技术课程设计报告
5、件安装到系统中,输入正确的序列号。(2)配置 VMware打开桌面上 VMware 图形,双击打开再打开原来的文件夹,把汉化包打开执行软件的安装选项,依据所做的选择,确认安装。确认完后,即配置完成。点击打开虚拟机,选择标准,下一步,执行软件的安装选项。接下是密钥,填写老师所给的密码。安装完成。(3)安装驱动点击安装包,根据软件的安装选项,点击next 按钮,即可安装完成。注:在电脑上安装好虚拟机之后配置相关参数配置 NFS:点击菜单运行系统设置-点击服务器设置 -NFS 服务器,点击增加,在目录中选择共享目录的路径,在主机(host)中填入主机 IP 地址(192.168.1.12),并选择客
6、户对共享目录的操作位读写(Read/write);在常规选项中选择允许来自高于 1024 的端口的连接,点击确定后即可配置好 NFS。配置完成后,可以简单测试一下 NFS是否配置好了:在虚拟机上自己mount 自己,看是否成功就可以判断 NFS是否配好了。mount 192.168.1.12:/arm2410cl /host之后 ls 命令查看 arm2410cl 之下的文件目录,如果文件目录在,那么说明 NFS配置成功。3嵌入式开发技术课程设计报告端口配置用串口线连接好笔记本电脑和2410 经典版平台。计算机,属性,设备管理器,端口高级设置下端口号COM1进入虚拟机设置,串行端口4嵌入式开发
7、技术课程设计报告3 设计过程及结果3.1 实现交叉编译环境结果:3.2 第几小组成员步骤(1)创建工作目录【 rootvm-dev】# mkdir winter【 rootvm-dev winter】# cd winter( 2)编写 winter.c 文件【 rootvm-dev】# vi winter.c( 3)编写 Makefile 文件CC =armv4l-unknown-linux-gcc EXEC=client server OBJS=client.o server.o5嵌入式开发技术课程设计报告CFLAGS+=LDFLAGS+=-staticall:$(EXEC)$(EXEC):
8、$(OBJS)$(CC) $(LDFLAGS) o $ $(OBJS)clean:-rm f*.elf*.gdb *.o其中,CC 指明编译器EXEC表示编译后生成的执行文件名称OBJS 目标文件列表CFLAGS编译参数LDFLAGS连接参数all:编译主入口clean : 清除编译结果( 4)运行 make编译程序【 rootvm-dev】# make clean【 rootvm-dev winter】# make( 5)源程序#include int main(void)6嵌入式开发技术课程设计报告printf( “通信工程 13 级第三小组嵌入式开发技术课程设计基础内容“);6)结果由于
9、电脑与开发板不匹配,结果没有办法出来3.3 实现 Linux系统下的简易聊天室(1)程序流程图开始创建套接字socket初始化结构体server_addr是否连接上返回 -1服务器 connect()返回 0输入文字numbytes0numbytes0numbytes1关闭 socket结束7嵌入式开发技术课程设计报告开始=-1定义套接字类型创建子进程 ppid结构体初始化=0=-1=-1绑定端口 bind()创建子进程 pid!=-1=0=-1监听端口 listen()=-1Pid 接收信息,大!=-1小为 recvbyes定义线程 ppid pid=0=-1睡眠 usleep(10000)
10、接收信息 accept()!=-1将信息发回给客户 send()接收成功,发送send()结束( 2)程序工作过程服务端处于监听状态,客户端发送请求,连接成功并通信。首先服务端调用socket()函数创建一个套接字,然后把协议,端口号,ip 信息通过 bind()进行绑定。以上操作完后服务端就开始监听客户端的请求,并设置监听的最大数目。当客户端发送链接请求时,服务端就调用accept()函数接受客户端的请求。然后对于客户端来说,也是要先调用 socket()函数创建客户端的套接字, 这里是用的 TCP 协议,所以可以不用 bind() 函数。接着调用 connect()函数与服务端建立连接。8
11、嵌入式开发技术课程设计报告当服务端和客户端建立连接时, 可以通过彼此之间的套接字描述符来进行数据传输。其中一方通过send 函数把数据写入数据缓冲区,另一方通过 recv()函数从缓冲区内读出数据,这样就完成了服务端与客户端之间的数据传输。 当双方数据传输完成后, 函数 close()关闭各自的 套接字 ,使客户端和服务端通信中断。( 3)socket 编程方案设计一个简单的聊天室程序,PC 运行客户端程序,嵌入式系统运行服务器端程序, 服务器随时侦听客户端请求并将其接入,要求至少实现 2 个客户端接入服务器并进行通信的功能; Makefile 文件NFS 将程序下载到实验箱中,编译执行。注:
12、程序里的函数解释( 1)Socket()作用: socket 函数为客户机或服务器创建一个 sokcet 格式:int socket(int family,int type,int protocol);参数说明:Family:表示地址族,可以去AF_UNLX和 AF_INT。其中,AF_UNLX只能够用于单一的UNIX系统进程间通信 ;AF_INT 是针对 Internet的,因而可以允许在远程主机之间通信,实验中使用AF_INT。Type:网络程序所采用的通信协议,可以取SOCK_STREAM或9嵌入式开发技术课程设计报告SOCK_DGRAM。其中, SOCK_STREAM表明使用的是 TC
13、P协议,这样提供按顺序的、可靠的、双向、面向连接的比特流;SOCKE_DGRAM表明使用的是 UDP协议,这样只会提供定长、不可靠、无连接的通信。( 2)bind( )格式:int bind(int sockfd,struct sockaddr *addr,int addrlen);参数说明:Sockfd :socket 的文件描述符号。Sockaddr :表示名字所用的一个数据结构,用来保存地址( 包括 IP地址和端口 )Addrlen:设置结构大小长度。( 3)listen()格式:int listen(int sockfd, int backlog);作用:监听连接信号,和accepte
14、d 函数合同。参数说明:Sockfd :表示 socket 调用返回的文件描述符。Backlog :表示接入队列允许的连接数目,大多数系统允许20 个,也可以子定义510 个。( 4)accept()格式:Int accept (int sockfd, void *addr, int *addrlen);10嵌入式开发技术课程设计报告作用:与 listen函数合用,监听信息、接收客户端请求。参数说明:Sockfd:表示 socket 的文件描述符。Addr:表示指向局部的数据结构struct sockaddr-in的指针。Addrlen:表示地址的长度。( 5)connect()格式:int
15、connect( int sockfd , struct sockaddr *serv_addr , int addrlen);作用:在面向连接的系统中客户及连接服务器时使用,connect 必须在 bind 后使用。参数作用:Sockfd :表示 socket 的文件描述符。Serv-addr :表示村访目的端口和ip 地址(套接字)的数据结构。( 6)send() 和 recv()格式 1:Int send (int sockfd, const vod *msg,int len, int flags);功能:发送信息。格式 2:Intrecv (intsockfd , void *buf,
16、intlen,usigned intflags);作用:用于流式socket 、数据报 socket 内部之间的通信。( 7)close( ) 和 shutdown ( )11嵌入式开发技术课程设计报告格式:Close( int sockfd)或Int shutdown(int sockfd , int f);参数说明:f 的值为下面一种:0-不允许继续接收;1-不允许继续发送;2-不允许继续发送和接收。( 8)有关线程的系统调用函数 pthread_create()、pthread_join()实验过程说明(使用TCP/IP)(1) 监听连接利用 socket 、bind 、listen建立
17、连接,步骤是:1)先用 socket 函数初始化 socket ,创建新的 sockfd 。Sockfd = socket(AF_INT,SOCK_STREAM,0)2) 此步骤涉及到 IP 地址及其处理过程。参数说明:inet_addr函数 INADDR_ANY该函数把由小数点分开的十进制IP 地址转为 unsinged long类型,而在实验中所使用的为INADDR_ANY,使用利用自已的 IP 地址自动填充。a) 利用 bind 函数绑定端口和IP 地址。12嵌入式开发技术课程设计报告My_addr.sin_family=AF_INET;/*将地址族类型设定好*/My_addr.sin_
18、port=htons(MYPORT;/*将端口给其赋值 */My_addr.sin_addr.s_addr=INADDR_ANY;/* 用连接地 址自 动填 充ip*/Bind(sockfd,(stuctsockaddr*)&my_addr,sizeof(stuctsockaddr);/*sockfd是分配的 socket 名字,my-addr 则便是分配好的端口与IP ,用 bind 绑定 */b) 利用 listen 监听请求(2) 发送请求1) 利用 gethostbyname 获取主机信息。2) 初始化 socket 端口。3) 利用 connect 函数将自己的 IP 地址等信息发送
19、到主机, 等待主机调用 accept 函数来接受请求。(3) 主机接收请求,进行数据通信1) 主机利用 accept 接收请求。2) 创建子进程,显示欢迎信息;3) 接收返回信息,显示连接成功,并推出连接;4) 关闭客户端口 socket ;5) 关闭服务端 socket ,结束子线程。13嵌入式开发技术课程设计报告( 4)实现步骤建立工作目录【 rootvm-dev】# mkdir server【 rootvm-dev server】# cd server【 rootvm-dev server】# vi server.c【 rootvm-dev】# mkdir client【 rootvm-
20、dev client】# cd client【 rootvm-dev client】# vi client.c编写程序源代码程序附后编译实现过程 . 在编写完 TCP服务端程序 server.c 后,用 armv4l-unknown-linux-gcclpthreado server.c server生成程序 server 。 . 在编写完 TCP客户端程序 client.c 后,用armv4l-unknown-linux-gcco client.c client生成程序 client. 在嵌入式系统上运行server 。在主机上打开一个窗口,运行client,输入服务器的IP 地址,并检查器
21、结果的正确性。. 输入:# ./server14嵌入式开发技术课程设计报告# ./client 192.168.1.12(192.168.1.12为本机的 ip 地址). 输出:#server:got connection from 192.168.1.12. 客户端发送信息服务器端接收信息。客户端通过键盘输入消息内容平回车,以发送消息给服务器端; . 结果:服务端:客户端:15嵌入式开发技术课程设计报告注 :源程序client.c 程序:#include#include#include#include#include#include#include#include#include#defin
22、e EHCO_PORT 8888/端口号#define MAX_COMMAND 5/ 最大发送消息的次数int main()intsock_fd;struct sockaddr_in s_addr;char buff100;/ 缓冲区的大小char tmp_buf100;int n,i;sock_fd=socket(AF_INET,SOCK_STREAM,0); / 创建socket 套接字 , 协议为IPV4 协议 ,并且为字节流套接字if(sock_fd=-1)perror(create socket fail!);return 0;elseprintf(create socket %dn
23、,sock_fd);/* 设置 server 地址结构 */bzero(&s_addr,sizeof(s_addr);/初始化结构占用的内存s_addr.sin_family=AF_INET;/IPV4 协议s_addr.sin_port=htons(EHCO_PORT); /设置监听的端口 s_addr.sin_addr.s_addr=inet_addr(192.168.0.121); 设/置服务器的地址 bzero(&(s_addr.sin_zero),8);if(-1=connect(sock_fd,(struct sockaddr*)&s_addr,sizeof(s_addr)perr
24、or(connect() fail!n);close(sock_fd);return 0;printf(connect to server ok !n);16嵌入式开发技术课程设计报告for(i=0;iMAX_COMMAND;i+)printf( 请输入要发送信息 :n);scanf(%s,buff);printf( 发送信息 :%sn,buff);send(sock_fd,buff,100,0);/ 发送数据给服务器n=recv(sock_fd,tmp_buf,100,0);/从服务器接收数据tmp_bufn=0; / 给字符串添加结束标志printf( 接收的数据 : %sn,tmp_bu
25、f);/打印接收的字符串if(0=strncmp(tmp_buf,quit,4)/ 判断是否退出命令break;close(sock_fd);/ 关闭套接字return 0;Server.c:#include#include#include#include#include#include#include#include#include#define EHCO_PORT 8888/定义端口号#define MAX_CLIENT_NUM 5/ 最大监听客户端数int main()int sock_fd;struct sockaddr_in s_addr;int clientfd;struct so
26、ckaddr_in clientAdd;char buff101;/设置缓冲区的大小socklen_t len;int n;/* 创建 socket*/sock_fd=socket(AF_INET,SOCK_STREAM,0);/ 协议设置为 IPV4 协议 ,并设置为字节流套接字if(sock_fd=-1)perror(create socket fail!);return 0;else17嵌入式开发技术课程设计报告printf( create socket ok %dn,sock_fd);bzero(&s_addr,sizeof(s_addr);/ 初始化结构体占用的内存s_addr.si
27、n_family=AF_INET;/ 客户端协议为 IPV4s_addr.sin_port=htons(EHCO_PORT); /把 16 位值的端口号从主机字节转换为网络字节s_addr.sin_addr.s_addr=inet_addr(192.168.0.121); /设置服务器地址bzero(&(s_addr.sin_zero),8);/将内存块的前 8 个字节清零 if(bind(sock_fd,(struct sockaddr*)&s_addr,sizeof(s_addr)!=0)/ 将服务器地址和套接字绑定printf(bind fail! %dn,errno);close(so
28、ck_fd);return 0;elseprintf( bind ok!n);if(-1=listen(sock_fd,MAX_CLIENT_NUM) / 设置套接字监听 perror(listen fail!n); close(sock_fd);return 0;elseprintf(listen okn);len=sizeof(clientAdd);clientfd=accept(sock_fd,(struct sockaddr*)&clientAdd,&len); /创建新连接对应的套接字if(clientfd0)buffn=0; /给字符串加入结束符 printf(the data o
29、f receive: %sn,buff);/ 打印字符串的内容fflush(stdout);/ 清除文件缓冲区printf(put the data of send:n);18嵌入式开发技术课程设计报告scanf(%s,buff);send(clientfd,buff,n,0);/发送内容给客户端printf(the message of send:%sn,buff);if(strncmp(buff,quit,4)=0) /判断是否退出命令 break;close(clientfd);/关闭新建的连接close(sock_fd); /关闭服务端监听的 socket return 0;4 设计总
30、结在本学期的最后一周, 我们被要求完成嵌入式的设计总结, 虽然只有不到一周的时间,但是大家都感觉收获颇丰。把课堂上遗忘的、遗落的知识都捡了起来, 旧的知识新的知识都掌握了很多, 并且切实的体会到软件开发的困难与乐趣, 认识到了自己的不足, 并且慢慢摸索,不耻下问,在老师和小组成员的共同努力下, 结束了这次的实践。此次课程设计老师要求我们完成两道基础题目, 以及一道三选一的综合题目。前面的基础题目大家有在课堂上接触过, 并且通过查找资料,大家分工合作一个上午就有了很大的进展, 但是在下午的完善工作中还是被卡住了,一个小的程序调试不出来,不能出现要求的结果,最后在其他组一个同学的帮助下完成了基础题目。 第二天大家开始做综合题,经过商量选择了基于 socket 编程的简单聊天室程序设计 ,其实三道题目大家都没有把握能完成,对这道题比较有兴趣就敲定了。开始就是大量的查找资料, 因为大家在课堂上学习的知识都太浅,并且大都停留在理论上, 没有开发经验,所以大量工作都依靠互联网,不过因为我们组成员的 C 的能力都挺好,所以能够对代码程序理解19嵌入式开发技术课程设计报告并修改以及调试,最终还是尽我们最大努力完成了这次设计。下面整理一下这次课程设计中个人的总结。齐秀:搜集资料,写论文这次的实践中,我负责搜集资料以及论文编撰。在刚拿到题目的时候,因为大家都比
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025学年南阳市部分校高三语文上学期11月考试卷附答案解析
- 公司石脑油吸附分离装置操作工设备技术规程
- 安置房项目机电安装施工组织设计
- 个人承包工程挂靠公司协议书
- 2026年北师大版(2022)小学劳动技术六年级上册期末综合测试卷及答案(三套)
- 函数的概念及其表示(2考点+8大题型15种考向)-2026年新高考数学一轮复习(讲义+专练)原卷版
- 技术培训实施管理细则
- 河流地貌的发育(同步训练)-2026年高考地理一轮复习(解析版)
- 《边做边学-After Effects 2021影视后期合成案例教》课件 第5章 创建文字
- 动词的时态和语态(学生版)-高考英语高频考点复习
- 喷涂预处理工班组评比知识考核试卷含答案
- 2025新疆天泽工程管理有限公司及所属公司部分岗位社会招聘27笔试参考题库附答案
- 流动人口健康治理协同机制研究
- 湖南省长郡二十校联盟2025-2026学年高三上学期12月考试数学试卷
- 创伤急救模拟教学的数字孪生技术应用
- 2025年无人机驾驶员执照遥控器在敏感区域(机场、禁飞区)附近的安全操作规程专题试卷及解析
- 弘扬宪法精神凝聚法治力量
- 师德师风知识竞赛试题库及答案
- 计算机应用基础知识试题及答案完整题库
- 2025年初级会计资格考试题及答案
- 超长距离顶管非开挖施工方案
评论
0/150
提交评论