嵌入式课程设计Word文档格式.doc
- 文档编号:13046013
- 上传时间:2022-10-03
- 格式:DOC
- 页数:30
- 大小:143KB
嵌入式课程设计Word文档格式.doc
《嵌入式课程设计Word文档格式.doc》由会员分享,可在线阅读,更多相关《嵌入式课程设计Word文档格式.doc(30页珍藏版)》请在冰豆网上搜索。
4.主要研究内容 1
第1章需求分析 3
1.1设计目的 3
1.2课题要求 3
1.3任务分析 3
第2章环境搭建 4
2.1Ubuntu系统安装 4
2.2开发环境搭建 7
2.2.1NFS环境介绍 7
2.2.2NFS安装 7
2.2.3挂载NFS文件系统 7
2.2.4交叉工具安装 8
第3章软件设计 9
3.1TCP/IP协议 9
3.1.1网络模型 9
3.1.2TCP连接 9
3.2多线程编程 10
3.3Socket网络编程模型 12
3.3.1TCPServer编程模型 12
3.3.2TCPClient编程模型 13
3.4程序设计 13
3.4.1主要内容 13
3.4.2服务器端程序设计 14
3.4.3客户端程序设计 16
第4章综合测试 18
4.1功能测试 18
第5章结论 20
参考文献 21
附录一服务器端程序 22
附录二客户端程序 32
I
成都学院(成都大学)课程设计
绪论
Linux经历了20多年的发展,已经成为了一个功能强大而稳定的操作系统,在嵌入式系统中也得到广泛的运用,伴随着物联网技术的普及,网络通信在嵌入式系统中扮演着举足轻重的作用。
1.课程背景
随着时代的发展,网络通信在我们的生活中愈来愈重要,在互联网技术基础上延伸和扩展来的物联网技术,正逐渐改变着我们的世界。
互联网在现实生活中的应用很广泛,互联网给我们的现实生活带来了很大的方便;
互联网是全球性的,这也就意味着我们能够打破时空的界限,通过互联网接触到世界的每一个角落;
因为互联网的强大力量,这个时代的文明发展得到极大地提高。
2.选题的目的和意义
由于互联网超乎寻常的强大力量,改变了这个时代的交流方式,改变着人们的生活,未来,我们还将在互联网领域得到更多的进步,会影响生活中的方方面面。
3.国内外研究现状
互联网从诞生至今,让人类文明得到巨大的推动,伴随着互联网的发展,各种依托互联网的技术得到迅速发展,Linux操作系统依据其优良的性能和网络功能,在各个领域都得到极大的普及。
21世纪,是互联网发展的有一个阶段,我们国家已经将互联网的发展提升到了战略高度,明确表示要建成互联网强国,我国到目前为止,已经诞生了一大批优秀的互联网企业,全世界都将在互联网的推动下,进入一个全新的时代。
4.主要研究内容
设计TCP服务器程序,使用多线程实现”生产者-消费者“模型,建立TCP服务器,响应客户端请求,发送客户端指定的请求数据。
主要包括以下内容:
(1)创建线程持续产生数据,数据包含(学号,姓名(拼音),年龄,身高,体重,当前系统时间(纳秒数)使用gettimeofday(),可使用队列/多维数组存储数据;
(2)创建TCP服务器线程,响应多个客户端的连接,读取队列/数组,向客户端发送指定“学号”的数据。
设计TCP服务器程序;
(3)创建TCP客户端接收线程,连接服务器并请求指定“学号”的数据,接收数据并存储在文件中。
要求存储有意义的数据,由于TCP是基于字节流的特征,需要做组包处理;
第1章需求分析
1.1设计目的
通过对专业知识的熟练运用,理解Linux网络编程的流程,了解互联网的基本架构,熟悉多线程编程的思想。
同时,通过本课程设计,可以培养以下能力:
(1)独立工作能力与创造力;
(2)综合运用专业及基础知识的能力;
(3)解决实际工程技术问题的能力;
(4)查阅图书资料、产品手册和各种工具书的能力;
(5)书写技术报告和编制技术资料的能力。
1.2课题要求
使用多线程实现”生产者-消费者“模型,建立TCP服务器,响应客户端请求,发送客户端指定的请求数据。
1.3任务分析
创建线程持续产生数据,数据包含(学号,姓名(拼音),年龄,身高,体重,当前系统时间(纳秒数)使用gettimeofday),可使用队列/多维数组存储数据。
理解常用的数据结构,熟练掌握C编程语言。
创建TCP服务器线程,响应多个客户端的连接,读取队列/数组,向客户端发送指定“学号”的数据,设计TCP服务器程序,掌握网络编程中服务器端的编程流程。
创建TCP客户端接收线程,连接服务器并请求指定“学号”的数据,接收数据并存储在文件中。
要求存储有意义的数据,由于TCP是基于字节流的特征,需要做组包处理。
掌握网络编程中客户端的编程流程。
最终的目的是熟练掌握网络编程的编程方法,理解常用的数据结构的基本思想,掌握编程语言,理解多线程编程在实际工程中的应用。
第2章环境搭建
2.1Ubuntu系统安装
考虑到Windows系统的普及程度,本课程实际将利用虚拟机来进行开发,首先我们需要搭建虚拟机开发环境。
1.创建虚拟机
图2.1.1
2.选择操作系统
图2.1.2
3.配置处理器和内存
图2.1.3
图2.1.4
4.安装系统
图2.1.5
5.安装成功界面
图2.1.6
2.2开发环境搭建
2.2.1NFS环境介绍
NFS(NetworkFileSystem)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。
在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
2.2.2NFS安装
1.NFS是网络文件系统系统的缩写,可以用于Linux和Linux之间传递文件,实现数据共享。
安装命令如下:
apt-getinstallnfs-kernel-server
2.修改配置文件
打开/etc/exports文件,增加mount-tnfs/NFS(rw,sync,no_root_squash,no_subtree_check)
开发板和其他Linux主机可以通过网络访问/NFS目录。
3.启动NFS
sudoservicerpcbindstart
sudoservicenfs-kernel-serverstart
2.2.3挂载NFS文件系统
mount-tnfs-ointr,nolock,rsize=1024,wsize=1024192.168.1.86:
/opt//mnt
2.2.4交叉工具安装
1.在/usr/local/下建立交叉编译器的安装目录arm:
sudo
mkdir/usr/local/arm
2.将下载的交叉编译器包解压到/usr/local/arm目录下:
sudotarjxvfcross-4.2.2-eabi.tar.bz2-C/usr/local/arm/
3.解压成功后,修改PATH环境变量:
sudovim
/etc/profile
在文件为加入交叉编译器arm-linux-所在的路径:
exportPATH=$PATH:
/usr/local/arm/4.2.2-eabi/usr/bin
4.更新一下配置文件/etc/profile:
source/etc/profile
第3章软件设计
3.1TCP/IP协议
3.1.1网络模型
图3-1-1网络模型
如图3-1-1所示,在TCP/IP协议中,将互联网划分成为应用层、传输层、网络层、网络接口层,其中网络接口层的主要功能是提供二进制传输和介质访问的功能;
网络层负责IP寻址和路由,其中要考虑路由算法,拥塞控制等问题;
传输层负责应用程序之间的连接;
3.1.2TCP连接
TCPIP一般通过internet串行线路协议SLIP或点对点协议PPP在串行线上进行数据传送。
TCP/IP协议的基本传输单位是数据包(datagram)。
TCP协议负责把数据分成若干个数据包/段,并给每个数据包加上包头,IP协议在每个包头上再加上接收端主机地址,这样数据找到自己要去的地方。
如果传输过程中出现数据丢失、数据失真等情况,TCP协议会自动要求数据重新传输并重新组包。
TCP协议保证数据传输的质量,IP协议保证数据的传输。
数据在传输时每通过一层就要在数据上加个包头,其中数据供接收端同一层协议使用,而在接收端每经过一层要把用过的包头去掉,这样来保证传输数据的格式完全一致。
TCP/IP协议需要针对不同的网络进行不同的设置,且每个节点一般需要一个“IP地址”、一个“子网掩码”、一个“默认网关”。
不过可以通过动态主机配置协议(DHCP),给客户端自动分配一个IP地址,这样避免了出错也简化了TCP/IP协议的设置。
如图3-1-2所示,TCP是通过3次握手建立的:
1.客户端给服务器发送SYN(syn=j)包,进入SYN_SEND状态。
2.服务器接收到SYNC包,确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),把它俩都发送出去,服务器进入SYN_SEND状态。
3.客户端收到服务器的SYN+ACK包,向服务器发送ACK(ack=k+1),客户端和服务器都进入ESTABLISHED状态。
此时,连接已经建立完毕,可以相互发送发送消息。
图3-1-2三次握手示意图
3.2多线程编程
进程是系统中程序执行和资源分配的基本单位。
每个进程都拥有自己的数据段、代码段和堆栈段,这就造成了进程在进行切换等操作时都需要有比较复杂的上下文切换等动作。
为了进一步减少处理机的空转时间,支持多处理器以及减少上下文切换开销,进程在演化中出现了另一个概念——线程。
它是进程内独立的一条运行路线,处理器调度的最小单元,也可以称为轻量级进程。
线程可以对进程的内存空间和资源进行访问,并与同一进程中的其他线程共享。
因此,线程的上下文切换的开销比创建进程小很多。
同进程一样,线程也将相关的执行状态和存储变量放在线程控制表内。
一个进程可以有多个线程,也就是有多个线程控制表及堆栈寄存器,但却共享一个用户地址空间。
要注意的是,由于线程共享了进程的资源和地址空间,因此,任何线程对系统资源的操作都会给其他线程带来影响。
由此可知,多线程中的同步是非常重要的问题,以下是线程同步用到的一些方法:
1.互斥锁
互斥锁是用一种简单的加锁方法来控制对共享资源的原子操作。
这个互斥锁只有两种状态,也就是上锁和解锁,可以把互斥锁看作某种意义上的全局变量。
在同一时刻只能有一个线程掌握某个互斥锁,拥有上锁状态的线程能够对共享资源进行操作。
若其他线程希望上锁一个已经被上锁的互斥锁,则该线程就会挂起,直到上锁的线程释放掉互斥锁
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)