串行文件传输系统详细设计说明书.docx
《串行文件传输系统详细设计说明书.docx》由会员分享,可在线阅读,更多相关《串行文件传输系统详细设计说明书.docx(12页珍藏版)》请在冰点文库上搜索。
串行文件传输系统详细设计说明书
[串行文件传输系统]
详细设计说明书
拟制人:
阿呆林子
审核人______________________
批准人______________________
[2004-12-15]
详细设计说明书
1引言
1.1编写目的
目的有两个:
a.该文档是老师评分的依据之一。
b.加强对串行通信程序原理和整体结构的理解,提高个人的语言表达和编写技术文档的能力,为今后的工作打下基础。
1.2背景
a.系统名称:
由于对程序的认识有变,所以该系统的名称由原来的“串口FTP”改为
“串口文件传输系统”;
b.项目的主要任务:
两台PC通过主板自带的通用异步收发器(UARTINS8250)和串行通信协议,完成两台PC间的文件传输。
1.3参考资料
《C语言程序设计教程》谭浩强等编著高等教育出版社
《微型计算机接口技术原理及应用》刘乐善等编著华中理工大学出版社
《IBM-PC汇编语言程序设计》沈美明、温冬婵编著清华大学出版社
《Delphi与RS-232串行通信控制》范逸之等编著清华大学出版社
2程序系统的结构
为了降低程序开发的复杂程度,本程序将分为两部分来实现:
1.文件的发送端――FTP_SND.EXE(发送采用查询方式)
发送程序主要由以下函数组成:
voidInitCom(shortComNo);/*初始化串口*/
intOpenPort(shortComNo);/*打开串口*/
这里的OpenPort、ClosePort并不是API中的OpenComm和CloseComm,只是模仿其命名方式以便让程序的整体结构更明了。
voidClosePort(shortComNo);/*关闭串口*/
voidSendChar();/*向串口发送一个字节*/
voidSending()/*文件发送子程序*/
2.文件的接收端――FTP_REC.EXE(接收采用中断方式)
文件接收程序主要由以下函数构成:
voidInitCom(shortComNo);/*初始化串口*/
intOpenPort(shortComNo);/*打开串口*/
voidClosePort(shortComNo);/*关闭串口*/
voidinterruptfarReceiveInt();/*用于接收字节的中断服务程序*/
voidReceiving();/*文件接收程序*/
3程序设计说明
3.1程序描述
给出对该程序的简要描述,主要说明安排设计本程序的目的意义,并且,还要说明本程序的特点(如是常驻内存还是非常驻?
是否子程序?
是可重人的还是不可重人的?
有无覆盖要求?
是顺序处理还是并发处理等)。
本系统是由c语言完成的文件发送程序(FTP_SND.EXE)和文件接收程序(FTP_REC.EXE)共同组成,主要完成文件的发送、接收功能。
这两个程序都是控制台命令行程序,程序启动、运行界面如下:
图1发送程序的运行画面
图2接收程序的运行画面
3.2功能
IPO图
输入
处理
输出
要打开的串口号(1或2)
串口初始化
串口打开成功或失败
要传送的文件名
打开文件、传送文件
文件打开、传送是否成功
接收文件保存的路径、名称
接收文件
文件接收成功否
按键ESC
退出正在发送或接收的函数
文件发送或接收没有完成
Exit
退出程序
无
目前只能以只读二进制的方式打开任何系统中存在的文件(包括*.txt,*.exe,*.doc等等类型的文件),其他功能如dir,cd..,delete等暂时没有完成。
因为该程序的最主要任务是准确的发送每一个用户要求发送的文件。
3.3性能
发送程序的过程是将文件读入缓冲区,再将每个字节发送出去。
由于存在缓冲区,这个过程主要由设置的串口波特率决定。
如果将波特率设置的过高,会影响数据传输的准确性,所以本着学习的目的,这里将波特率设为9600bps。
从另一方面来考虑,发送程序的性能发挥的如何更大程度上由接收程序接收数据的能力决定,所以性能解决的重点是接收中断程序的处理。
3.4算法
程序没有用到复杂的算法,为了能够传送各种类型文件,需要让接收程序知道所要传送文件的大小,因此设计了一个联合体:
/*定义的联合体,用来记录所要传输的文件的大小用来通知接收端何时文件传输完*/
unionfsize
{
structflong
{
unsignedchara[4];
}flong;
unsignedlonglg;
}fsize1;
发送算法:
1.每次打开一个文件时,首先用函数fsize1.lg=filelength(fd1)读取文件的大小并存入无符号长整形中(32位,最大支持文件大小为4G)
2.在发送文件之前先发送记录文件大小的四个字节:
for(i=0;i<4;i++)
SendChar(fsize1.a[i]);/*以字节为单位传输文件的大小*/
3.读文件内容,并发送,直至文件发送完毕,退出发送处理,准备接收下一次发送命令。
接收算法:
1.因为接收到的头4个字节是记录文件大小的数据,所以除了声明上述联合体,再声明一个标志变量,用来判断是接收文件大小还是接收文件内容。
unsignedcharcount_flag=4;(头4个字节存入fsize2.a[i]中)
2.当头4个字节接收完毕就开始接收文件内容,因此每接收一个字节就要
fsize2.lg--;
3.当fsizer2.lg==0则置文件传送标志file_flag=0,通知接收程序,文件接收完毕,退出接收循环,等待用户输入下一接收命令
3.5流程逻辑
文件发送程序流程:
发送大小发送内容
否
空
否
是
文件接收程序工作流程:
否
是
是否
3.6程序设计要点
1.为保证程序的可靠性和高效性,发送程序和接收程序分别声明了缓冲区用来减少磁盘读写对程序运行效率的影响。
2.设置中断向量,保证CPU执行中断服务程序有一个正确的入口地址。
3.中断服务程序的结束CPU并不知道,所以必须通过outportb(0x20,0x20)通知8259中断控制器。
4.初始化中断系统时,应该关闭中断,初始化完成后再开中断。
5.把一个字节写入发送保持寄存器(THR)之前,必须查询线路状态寄存器(LSR)以保证THR为空。
以上程序如果存在什么问题希望各位网友能给予指正,我的邮箱是:
7777jl@,
希望大家多多交流!
谢谢!
阿呆林子
2005-1-16