软件开发协议

2024-05-03

软件开发协议(精选8篇)

篇1:软件开发协议

计算机软件合作开发协议

甲方:_____________________ 乙方:黄石灵创科技有限公司鉴于,协议各方均为软件项目参与人员,并且,协议双方有意愿共同从事_大冶市公共资源交易监督管理局OA系统及网站的项目开发工作。为了规范各方的权利义务,在《中华人民共和国合同法》及其他相关法规政策的原则指导下,订立本协议书,各方共同遵守: 第一条 合作项目 大冶市公共资源交易监督管理局OA系统及网站 第二条合作期限 项目完结并收全尾款。第三条合作方式 1.乙方按照软件客户的需求正常分工进行编写,不得随意更改软件的重大功能需求和事项,以免对其余各方造成履约困难。2.甲方负责软件开发技术问题之外的相关事宜. 第四条知识产权 1.乙方编写的软件源代码、技术文档及汇编而成的程序本身,其著作权均乙方享有。

第五条利润分配及付款方式

1.经合作双方协商同意,甲方收益为该软件开发项目总金额的,乙方收益为项目总金额的2.在协议签定时,甲方一次付给乙方的项目订金 3.乙方全权负责该软件的售后服务,第一年提供免费服务,第二年开始每年收取项目总金额的的服务费.第六条纠纷的解决 合作各方之间如发生纠纷,应共同协商,本着有利于事业发展的原则予以解决。如协商不成,可以诉诸法院。第七条 本协议一式两份,如有未尽事宜,应由甲乙双方讨论补充或修改。补充和修改的内容与本协议具有同等效力。

甲方:乙方:黄石灵创科技有限公司 授权代表(签字):授权代表(签字):

电话:电话:

签约日期:年月日

篇2:软件开发协议

2、2G/3G/4G/5G等手机通信协议系统性能评估、分析和优化;

3、参与3GPP/CCSA等国际国内标准化组织活动;

4、支持运营商的入库测试和质量评测;

5、支持终端客户回报问题的分析与解决。

任职要求:

1、计算机、通讯、网络、电子相关专业硕士以上学历;

2、具有良好的C/C++语言编程能力;

3、工作认真细致,主动性强,能承受一定工作压力,具有良好的沟通能力;

4、英语六级,具有阅读及撰写英语技术资料的能力;

5、有以下经验者优先考虑:

1)具有计算机网络或无线通讯网络相关知识

2)了解手机通信协议标准,具有相关软件开发及维护经验,包含:

GSM/GPRS/EDGE/CDMA20xx/WCDMA/TD—SCDMA/LTE/NB—IOT/LTE—V/5G等

3)熟悉软硬件构架,嵌入式操作系统以及相应的开发及调试工具

篇3:软件开发协议

在计算机控制系统的开发中,RS232、RS422和RS485等串口通信实现简单,技术成熟,目前在工控领域有广泛应用[1]。在实际的应用中,针对不同的应用领域,可能会使用不同的通信协议或数制,比如GPS、电子罗盘等通信内容为ASCII码,具有帧头和校验和,多机通信中会有地址和数据之分。现在虽然有一些串口通信调试软件,但是有的软件仅仅具备简单的串口收发功能,数制转换和校验码计算等需要依靠手工完成,既繁琐又易错,有的软件是专门针对某种通信协议设计的,比如GPS串口调试工具等,功能过于单一,不具有通用性。在实践应用中缺少一种通用的可以灵活扩展通信协议的串口调试软件。

为此,使用pyGTK、glade和pyserial等开源开发工具,设计了一款适用于多种协议下的串口调试软件,不仅具备通用串口的收发功能,而且可以进一步解析或构造多种通信协议。在软件设计中将协议模块独立出来,当现有通信协议不能满足复杂应用时,可以方便地进行协议的扩展。

1 开发工具简介

1.1 python语言

python是一种底层基于C语言的脚本语言,它是一种面向对象的高级语言,但也可以很方便地进行面向过程的设计。python是开源语言,结构清晰,适合编写大型程序,可以在Linux、windows、Mac和VxWorks等多种平台上应用[2]。python语言不仅可以很方便的和各种语言混合编程,而且具有多种GUI界面接口,如Tk、GTK+、QT和wxWidgets等,使用python语言开发GUI界面往往比这些GUI界面的原生语言要简捷[3]。

1.2 GTK+、pygtk和glade

GTK+(GIMP Toolkit)是一套跨多种平台的图形工具包。虽然最初是为GIMP写的,但现在已经被用于很多软件项目。在Linux下广泛应用的GTK+也被移植到多种平台下,比如windows和Mac等。GTK+的原生语言是C语言,它具有多种语言的开发接口,比如C++、perl和python等,GTK+的python语言接口被称为pyGTK。

Glade能够使用GTK+图形构件生成图形界面,并将界面保存成xml格式的文件。新版的glade软件是遵循了界面和代码完全分离原则的典范,这种设计理念使得整个设计更加清晰可靠[3]。

1.3 pyserial

pyserial是python语言访问计算机硬件串口的扩展模块,适用于Linux、windows和BSD等多种平台,功能丰富强大,可以实现全功能的串口控制(通常仅使用三线串口)。可以用来开发串口终端,也可以实现各种串口协议,比如mspgcc就使用此模块设计了JTAG开发工具的上位机串口软件。

2软件结构与实现

2.1 软件整体结构

在整个软件结构中,由pyserial实现与硬件串口的通信控制,GTK+负责生成用户可视界面,实现与用户的交互操作。软件的整体结构如图1所示。

根据软件的整体结构,本软件需要设计3大模块。

·用户界面模块,为用户提供一个交互式的操作界面,渲染上位机接收的数据,接收用户指令和原始数据等。

·协议模块,根据用户指定的协议格式,构造用户发送的数据,解析上位机接收到的数据。

·串口控制模块,主要功能是实现串口设备号、波特率、校验位和停止位等硬件设置,以及串口的打开、关闭和收发。

2.2 用户界面的实现

用户界面中可视化图形部分的设计主要借助glade软件完成,整个操作是在glade软件的可视化环境中完成的。只需要选择合适的GTK+图形构件放在适当的位置。不同的图形构件要有不同的名字,图形构件的默认属性设置可以在glade中完成[4],也可以利用代码设置。利用glade设计的本软件界面如图2所示。

glade设计的图形界面以xml格式的文件保存,python语言需要对xml文件进行解析,获取GTK+图形构件的对象,设置对象属性,并将用户操作与具体程序“挂钩”。

对glade生成的xml文件的解析主要有两种方式,一种是libglade函数库方式[5],这是旧的解析方式,不支持控件的一些新特性;另一种是新的GtkBuilder函数库解析方式,此函数库已经集成到GTK+中,本文采用的是GtkBuilder方式。

使用GtkBuilder方式需要引入函数库gtk和gobject。在程序中使用

importgtk

importgobject

语句实现。

加载xml文件由如下的语句完成:

builder=gtk.Builder()

builder.add from file(″user.xml″)

其中user.xml是由glade生成文件的文件名。

获取某个特定控件的方法是

port=builder.get object(″label 1″)

其中port是python语言获得的GTK+图像控件对象的操作句柄,label 1是利用glade软件设计可视化图形界面时为控件起的名字。一旦获得控件对象的操作句柄,就可以针对不同的控件对象进行不同的操作,可以进行的操作方法是由具体图形控件的属性决定的。比如上面语句获得的是一个标签控件,那么就可以使用

port.set text(″string″)

语句将标签显示的内容设置为string。

在用户界面模块设计中,数据显示是最复杂的部分。这一部分是由GTK+开发库中的GtkTextView控件来实现的[6]。GtkTextView控件有丰富的表现能力,它不仅可以设置显示的字体和颜色等属性,还可以显示按钮、进度条等控件,是一个应用复杂、功能强大的图形控件。

在使用GtkTextView控件时需要设置一个数据缓冲区,用户可以设置缓冲区中数据的属性,GtkTextView根据不同属性,将显示的数据渲染为不同字体、大小或颜色。此软件设计中数据显示分为两步,第一步直接将串口模块接收的数据进行显示,此时显示的数据属性为默认属性,第二步根据用户选择的通信协议解析数据,根据解析的结果重新渲染数据。

显示数据的属性分为以下几种:

(1)原始数据

(2)帧头

(3)帧的内容

(4)校验位

(5)错误数据

将接收数据不同的部分以不同的字体或颜色显示,使用户获得通信状况最直观的方式,方便用户对数据帧格式进行判断。

2.3 协议模块的设计

协议模块应该是整个设计中最灵活的部分,用户需要的协议可能是各式各样的,虽然本软件协议部分能够满足实际应用中的大部分需求,但是仍旧可能无法满足所有用户的需求。因此,在设计中特意将此部分分离出来,作为一个单独文件,用户可以根据自己的需求进行相应的修改。

本软件实现的协议可以解析特定的帧头、帧尾,可以实现帧长的设定,以及校验和、CRC 16和CRC 32等校验方式的选择。绝大多数情况下,只需要完成相应的软件设定就可以完成通信协议的解析和构造。协议模块设计流程如图3所示。

在检验到正确的数据帧后,在函数返回前程序会调用一个用户自定义函数来处理此帧中的用户数据,用户可以针对不同的应用设计不同的用户函数,也可以将此函数保留为空函数,仅完成判断数据帧是否正确的功能。

2.4 串口模块的设计

串口模块的设计是利用pyserial模块完成串口硬件设置的,部分关键代码如下所示:

1 0ser=serial.Serial(0)

2 ser.baudrate=9600

3 ser.parity=″NONE″

4 ser.bytesize=8

5 ser.bytesize=1

6 ser.open()

7 ser.close()

8 ser.read()

9 ser.write()

第1行语句获取串口0号设备的对象并打开,2~5行语句将此串口设置为9600,8N 1方式,6、7行语句分别为打开和关闭串口,9、10行实现串口数据的收发。

接收到的数据放到显示缓冲区,由协议模块进行解析并由用户界面模块渲染显示。如果发送缓冲区中有数据,串口模块会调用相应的函数,通用串口硬件将其发送。用户输入的原始用户数据,要经由协议模块按照用户选择的相应协议“打包”才能放到串口模块的发送缓冲区中,等待发送。

3 结束语

采用pyGTK可以快捷地设计出工控中常用的串口通信调试软件,并且由于采用了跨平台的开发工具,程序可以在Linux和windows下通用,几乎不需要做任何修改。将通信协议部分独立设计,使软件具备了很好的扩展特性,可以根据需求增加新的通信协议。由于界面和代码分离性很好,重新设计用户界面,并对代码略加修改,就可以设计出专用的工控监控软件。python语言是脚本语言,运行相对C语言的软件较慢,在要求速度的场合可以将python代码编译成二进制代码形式运行。

参考文献

[1]姚文华,秦开宇,李志强.自动测试系统中异步串口通信的实现[J].电子质量,2009,12:6-8.

[2][美]Wesley J.Chun.Python核心编程[M].第2版.宋吉广,译.北京:人民邮电出版社,2008.

[3][美]Eric Steven Raymond.The Art of Unix Programming[M].Addison-Wesley,2003.

[4]李心成,孙殿柱.基于Python和GTK+与VTK混合编程及应用[J].山东大学学报(工学版),2009,39(6):78-81.

[5]赵毅,马捷.利用Python和GTK+的Linux GUI应用的快速开发[J].计算机工程,2004,30(8):80-82.

篇4:基于BT协议的下载程序开发

关键词:下载程序;BitTorrent协议;torrent;B-encoding

中图分类号:TP312文献标识码:A文章编号:1009-3044(2007)12-21661-02

Development of Downloading Procedure Based on BT Protocol

ZHOU Ke1, ZHANG Yan-na2

(1.Henan University College of Computer and Information Engineering,Kaifeng 475001,China;2.Henan UniversityHenan University, Department of Facility and Laboratory Mangement,Kaifeng 475001,China)

Abstract:This paper analyses the BitTorrent protocol in details and sums up its characteristics. Then, in the basis of torrent file format and Bencoding encoded mode,The torrent file had been successfully analysed precisely. According the analysis, one method of developing the downloading procedure was described.

Key words:Downloading Procedure;BitTorrent protocol; torrent; Bencoding

1 引言

传统的网络服务模式,所有的下载开销都在服务器上,由于服务器性能和带宽的限制, 服务器往往要限定用户的数量和访问速率;而使用基于BT协议的共享软件,可以把下载的开销分摊到每个下载者那里,在理论上支持无限多个下载者下载同一个文件,充分提高文件共享效率。本文简要分析了BT协议的工作原理,并给出了一种采用C#的下载程序的分析部分的实现,基于这种分析程序,借助C#中TCP协议的助手类就可以快速的开发出实用的下载程序。

2 BT协议的工作原理

BT协议将这种文件共享模式分为Tracker服务器和Client两部分。Tracker服务器的任务是搜集Client的信息,并帮助BT Client相互发现对方,进而能互相下载所需的资源。每一个Client即一个Peer 在下载开始以及下载过程中,要不断地与Tracker服务器进行通信,报告自己的信息并获取其它Peer的信息。Tracker對所有下载者的信息进行维护,当它收到一个请求后,先把发出请求的Peer的信息记录下来,然后将其他参与下载同一个文件的下载者的信息返回给该Peer。Peer在收到Tracker的响应后,与其它下载者建立连接下载本地所没有的文件资源。为了使别的客户端也可以从本地获取文件资源,该客户端还要监听某个端口,用于接收其它Peers的连接请求。

3 torrent文件及其分析程序的实现

BT协议的主要特征,集中体现torrent文件中。下面就torrent文件的内容及格式先做介绍,最后给出用C#语言实现该类文件解析的方法。

3.1 torrent文件及其编码

BT客户端开始下载资源时首先需要寻找torrent文件, torrent文件包含了完整的资源下载信息:包括资源名、大小、资源的创建者,创建时间,指向Tracker的url列表等信息。

torrent文件采用B-encoding编码来保存数据。B-encoding编码提供四种类型的数据表示:strings(字符串)、integers(整数)、lists(列表)、dictionaries(字典) 。编码规则如下:

(1)strings的编码规则为:<字符串长度>:<字符串>

字符串长度单位为字节,没有开始或结束标记。

(2)integers的编码规则为:i<整数>e

开始标记为i,结束标记为e。没有大小限制,0不能出现在负的或者是整数的最高位。

(3)lists的编码规则为:le

开始标记为l,结束标记为e,列表里可以包含任何B-encoding编码类型,包括字符串、整数、列表、字典。

(4)dictionaries的编码规则为:de

开始标记为d,结束标记为e,关键字必须为B-encoding字符串,值可以为任何B-encoding编码类型,包括字符串、整数、列表、字典。

torrent 文件格式是由若干字段确定的,torrent 文件中关键字段如表1所示:

表1 torrent 文件中关键字段

info字段用于确定资源是由单文件还是多文件构成的,info后面的第一个字符串为length 或files,二者只能出现一个。length表明是单文件结构,files表明是多文件结构,其详细区别如表2所示:

表2 info字段的内容

3.2 torrent 文件分析程序的实现

B-encoding的编码规则只有前述的四种类型的数据,列表和字典中允许包含这四种数据类型,整个文件本身就是字典。在实现的这种文件的分析时采用如下的分析方法,算法流程如图1所示:

(1)字符串分析。调用四个函数来判断字符串是否为B-encoding编码的四种数据类型:字符串分析函数readstring、整数分析函数readint、列表分析函数 readlist和字典分析函数 readdict。

(2)分析结果存放。定义一个基类和四个由该基类派生的子类,四个子类分别对应于四种数据类型。字符串和整数数据分别定义CBEncodeString 和CBEncodeInt类的对象存放结果;列表类型的数据使用C#中的List<>泛型类定义一个列表:

public List m_listObj= new List()暂存分析列表的结果,m_listObj的数据类型定义成基类以便同时存放四个子类的分析结果;字典分析结果的存放用SortedList<>泛型类定义一个字典类型:

public SortedList m_mapObj = new SortedList()暂存分析字典的结果;同时,在字典类中,还需要定义一个列表类型m_listObj,因为torrent文件在字典结构中包含有列表,这样的结构有利于数据的读取。而字典类型中的值定义为基类型,以便于兼容四种数据类型,类似的列表也需要定义为基类。

由于分析的结果有多种,而且结构不同,使用list<>泛型类定义一个基类型的列表类型m_listObj按序返回分析结果,torrent文件本身就是一个字典,所以保存返回值的列表只有索引值为0的一项,该项存储的内容是已经分析好的整个文件,结构为一个字典。还要需将最终分析结果由列表m_listObj[0])中的内容强制转换成字典CBEncodeDict类型,而字典中又有Bencoding编码中的四种数据类型深层嵌套,分析整个文件的结构,要把所有的格式都考虑到,在输出结果的过程中根据具体情况要进行不同类型和不同次数的强制转换。

4 结论

本文对BT工作原理进行了分析,根据B-encoding编码规则和torrent文件的格式,在C#.NET 2005环境下开发出了对torrent 文件进行解析的Windows应用程序。借助于此程序,将分析结果提供给下载程序就可以开发出BT下载软件。当然,在使用BT软件进行文件共享带来方便的同时,对磁盘的频繁操作可能会引起磁盘老化,占用过多带宽,这些问题都需要在开发有关基于BitTorrent协议的共享软件时给予足够的重视。以较小的代价获得较好的网络文件共享功能。

图1 算法流程

参考文献:

[1]Cohen B.Incentives BuildRobustness in BitTorrent[Z/OL].http://www.bittorrent.com.

[2]王珏,BitTorrent下载技术研究.科技广场,2005(2).

[3]孔彬,徐良贤,BitTorrent原理分析及改进.计算机工程2004.30(12).

[4]Simon Robinson.等.著.李敏波.等.译.C#高级编程(第3版),清华大学出版社,2005年7月.

篇5:软件开发协议范本

在本合同有效期内,乙方必须亲自履行甲方委托的开发项目,未征得甲方的书面同意,不得将其在本合同项下的受托项目部分或全部转让给任何其它方执行。违反本项规定的,乙方将承担全部可能产生的责任。

9.保密

9.1乙方应对本合同所述的技术资料和技术秘密采取保密措施,乙方未经甲方的书面同意,不得将本项目所涉及的技术秘密和资料向与本项目无关的人员或第三方透露,也不能就有关合同内容的任何部分进行新闻的发布、公开的宣称、否认或承认。

9.2乙方知道违反本条规定将给甲方造成难以弥补的损失,为此同意承担由此产生的经济上和法律上的责任。

9.3乙方承认本合同中的技术资料和技术秘密为甲方所专有,将其对乙方进行披露并不意味着任何所有权、专利权的转让。

9.4在本合同项目的研究开发结束并通过验收后,乙方应向甲方提供本合同项目的研究成果,包括技术规范、测试文件和质量标准等相关的技术资料,或者计算机软件、文档及源代码等。乙方应归还甲方提供的所有技术资料或文件等,并承诺不保留任何复印件。

9.5乙方在下列情况下没有为任何信息保守秘密的义务,即当乙方已事先知道它无需为其保守秘密时;当该信息已为公众所知且不是由乙方未经授权而提供时;当该信息是由乙方独自开发的;或者当乙方从某第三方合法地接受该信息且没有保密限制时。

9.6本条规定的义务和权利在本合同期满或终止后将持续年有效。

10.知识产权归属

10.1本合同项目技术成果的专利申请权、计算机软件的著作、技术秘密以及技术资料等知识产权归甲方所有。同时乙方放弃计算机软件著作权的署名权。

10.2乙方不得在向甲方交付研究开发成果之前,将研究开发成果及非专利技术泄露或转让给第三方。

10.3在履行本合同期间及以后,乙方不得就本合同的研究开发项目先后与任何第三方签订或接受委托开发合同。乙方如重复签订研究开发项目合同,应对以后签订合同的无效及其对侵犯甲方的知识产权承担所有经济和法律的责任。

11.第三方知识产权

11.1乙方承诺,其在受托开发本合同项目中,不会侵犯第三方的知识产权,同时,在交付本合同成果中也不会涉及或非法使用第三方的知识产权。

11.2任何因甲方使用本项目的成果而引起对第三方知识产权的侵权诉讼,乙方应积极协助甲方进行抗辩。如确因本项目成果引起的侵权,乙方应承担所有的赔偿责任,包括甲方因诉讼产生的一切费用。

12.风险责任的承担

12.1乙方在研究开发过程中,由于受现有的科学知识、技术水平或试验条件的限制,发生无法预见、无法防止或无法克服的技术困难,导致研究开发工作全部或部分失败,该风险责任的损失由双方共同承担,即根据损失的金额各自承担50%。

12.2确定上述风险必须同时具备以下三个条件:

(1)研究开发的项目本身在国际和国内现有技术水平下具有足够的难度;

(2)研究开发方在开发过程中已充分发挥了主观的努力;

(3)同领域的专家认为在技术上是属于合理的失败。

12.3乙方发现可能致使研究开发失败或部分失败的情形时,应当及时通知甲方并采取适当措施减少损失。没有及时通知并采取适当措施,致使损失扩大的,应当就扩大的损失承担责任。

13.报酬及支付方式

提示:付款方式是指分几次付款,每次支付条件和(或)日期等内容。甲方将根据本合同项目的开发

进程支付上述报酬。

合同总金额

乙方银行帐号

支付批次 金额 支付条件 估计时间

14.违约与赔偿

14.1甲方未按本合同规定支付第一期研究开发报酬,乙方有权解除合同。

14.2甲方逾期支付第二期或第三期开发研究报酬的,自逾期的第二天起,每逾期一天支付应付报酬额的0.05%违约金,违约金总额不超过应付款额的50%。逾期二个月仍不支付的,造成研发工作停滞、延误或失败的,乙方对此不承担责任。

14.3乙方未按计划或不实施研究开发工作,甲方有权要求乙方实施研究开发计划并采取补救措施。如乙方逾期一个月仍未按计划或不实施研究开发工作,甲方有权解除本合同,并且乙方应在二周内返还所有甲方提供的研究开发报酬,返还或销毁甲方提供的有关技术资料和文件,并承担本合同报酬总额20%的违约金。

14.4乙方应按本合同规定的研究开发进程完成开发项目。如乙方逾期完成开发项目,甲方将给予乙方一个月的宽限期,并且不追究乙方的违约责任。但宽限期满后,乙方仍未完成开发项目,其违约责任应追溯到本合同规定的违约的第一天起,每延期一天向甲方支付本合同开发研究报酬总额的0.05%违约金,违约金总额不超过本合同开发研究报酬总额的50%。

14.3除了本合同第7.2条规定的条件外,乙方未能完成甲方委托的开发项目或开发成果不符合本合同约定的要求,乙方承担本合同报酬总额20%的违约金,并返还研究开发费用。

14.4乙方将甲方支付的研发经费用于履行合同以外的目的,甲方有权制止并要求其纠正。如因此造成本合同研究开发项目停滞、延误或失败的,乙方应当承担给甲方造成的损失赔偿责任。

15.不可抗力

15.1不可抗力是指本合同生效后,发生不能预见并且对其发生和后果不能防止或避免的事件,如地震、台风、水灾、火灾、战争等,致使直接影响本合同的履行或不能按约定的条件履行。

15.2发生不可抗力的一方应立即通知对方,并在十五天内提供不可抗力的详情及将有关证明文件送交对方。

15.3发生不可抗力事件时,甲乙双方应协商以寻找一个合理的解决方法,并尽一切努力减轻不可抗力产生的后果。

15.4如不可抗力事件持续三十天时,甲乙双方应友好协商解决本合同是否继续履行或终止的问题。

16.解除合同

16.1如果满足以下条件,任一方在通知对方后,都可以解除本合同。

16.2一方严重违反本合同项下的义务,并且违约方在对方通知后三十天仍未纠正,非违约方向违约方发出解除合同的书面通知时。如果该违约无法在三十天内纠正,而违约方在此期限内已经开始着手,并将以努力诚恳继续纠正此违约行为,则守约方应为违约方合理地延长该时间的期限。

16.3当一方按正常程序停止经营业务、破产、处于付款拖欠、延期偿付、公司重组或倒闭状况,或全部转让利润与债权人、书面承认无力偿还到期债务、委派清算人清算其业务或财产,或参与或接受与破产或债权人权利有关的法律或行政诉讼程序时。

16.4当本合同以任何原因终止时,乙方应立即停止使用并销毁包含甲方机密信息的所有物件,并证

明该销毁情况;或者将这些物件归还对方。

17.争议解决

17.1本合同及其修订本的有效性、履行和与本合同及其修订本效力有关的所有事宜,将受中华人民共和国法律管辖,任何争议仅适用中华人民共和国法律。

17.2甲乙双方因合同的解释或履行发生争议时,首先应争取通过友好协商解决,该协商应在三十天内解决。

17.3如协商不能解决时,合同的任何一方可将争议提交本地仲裁委员会,并按该委员会的仲裁规则进行仲裁。仲裁决定对双方都有约束力。

17.4争议进行仲裁期间,除争议事项外,甲乙双方应继续履行各自本合同中规定的义务和行使权利。

18.一般条款

18.1除非本合同另有规定,任何一方对本合同提出的任何弃权、修改或更改须以书面形式提交给对方,并经对方签字认可,否则本合同的任何条款均不得视作已被弃权、修改或更改。本合同的修改或变更,须由双方友好协商并经授权代表签署书面文件方可生效。

18.2如本合同的一条或者一条以上的条款被适用法律视为无法实施,则(1)该无法实施的条款不会影响到本合同中其他任何条款;(2)本合同应被视为从未包含该无法实施的条款;(3)双方应本着诚信的原则商议,用一条意思最接近的条款替换该无法实施的条款。

18.3合同各方在此声明并保证:(1)代表各方签署本合同的人员拥有明确的授权,其签字对签约方具有约束力;(2)本合同的执行、递交与履行不会违反各方公司的章程、规定;以及(3)本合同的执行、递交与履行已经得到全部所需合作方或公司行为的正式授权;并且本合同已对上述方形成了有效的、具有约束力的同时能按其条款执行的义务。

18.4本合同文本的定稿应以文写成,附件以文写成。合同各方在本合同执行过程中进行的所有通信联络均应以文进行。本合同以文文本为准(或“两种文本有同等法律效力”)

18.5双方同意,本合同条款的上下文如果表示出该条款在本合同有效期后仍然有效,则该条款在本合同有效期后应继续保持有效。

18.6本合同与附件构成双方间的完整的合同,并将取代之前所有的书面或口头、执行或未执行的讨论、合同或声明。未经双方授权代表再签定正式合同,本合同将不作变化、增删和修改或其他活动。

19.开发过程中的变更声明

由于甲乙双方在签订合同之际,对项目需求的了解不够深入,因此本合同中的开发内容和计划可能与实际情况不符合。在实际开发过程中,双方可能变更开发内容和开发计划。

为了避免将来发生纠纷,特此声明:本项目的实际开发内容、开发计划、验收标准以双方签字确认的《需求规格说明书》为依据。如果需求发生变更,双方将重新协商开发计划和费用。

20.签字确认

本合同一式__份,甲乙双方各持__份,自合同各方授权代表签字之日起生效。

甲方签字 签字日期

篇6:软件开发员工保密协议

甲方:

住所:

法定代表人:

乙方:

住所:

身份证号码:

因乙方现为甲方提供服务和履行职务,已经(或将要)知悉甲方的商业秘密。为了明确乙方的保密义务,有效保护甲方的商业秘密,防止该商业秘密被公开披露或以任何形式泄漏,根据《中华人民共和国合同法》、《中华人民共和国反不正当竞争法》《中华人民共和国劳动合同法》及国务院有关部委的规定,甲、乙双方本着平等、自愿、公平和诚实信用的原则签订本保密协议。

第一条:商业秘密

1,本协议所称商业秘密包括:技术信息、专有技术、经营信息和甲方公司《文件管理办法》中列为绝密、机密级的各项文件。乙方对此商业秘密承担保密义务。本协议之签订可认为甲方已对公司的商业秘密采取了合理的保密措施。

2、技术信息指甲方拥有或获得的一切技术信息,包括但是不限于有关开发和产品销售的技术方案、软件开发设计文档、软件源代码、软件加密算法、软件加密器材、数据库、实验结果、技术数据、以及其它技术文档、涉及商业秘密的业务函电等一切有关的信息。

3、专有技术指甲方拥有的有关生产和产品销售的技术知识、信息、技术资料、制作工艺、制作方法、经验、方法或其组合,并且未在任何地方公开过其完整形式的、未作为工业产权来保护的其他技术。

4、经营信息指有关商业活动的市场行销策略、货源情报、定价政策、不公开的财务资料、合同、交易相对人资料、客户名单等销售和经营信息。

5、甲方依照法律规定(如在缔约过程中知悉其他相对人的商业秘密)和在有关协议的约定(如技术合同)中对外承担保密义务的事项,也属本保密协议所称的商业秘密。

6、乙方在甲方任职期间所完成的与甲方业务相关的发明创造、作品、计算机软件、技术秘密或其他商业秘密信息,原则上归甲方所有。

乙方主张由其本人享有知识产权的,应当及时向甲方申明。经甲方核实,认为确属于非职务成果的,由乙方享有知识产权,甲方不得在未经乙方明确授权的前提下利用这些成果进行生产、经营,亦不得自由向第三方转让。乙方没有申明的,推定其属于职务成果,甲方可以使用这些成果进行生产、经营或者向第三方转让。即使日后证明实际上是非职务成果的,乙方亦不得要求甲方承担任何经济责任。乙方申明后,甲方对成果的权属有异议的,可以通过协商解决;协商不成的,通过仲裁或诉讼途径解决。

7、乙方因职务上的需要所持有或保管的一切记录着甲方秘密信息的文件、资料、图表、笔记、报告、信件、传真、磁带、磁盘、计算机、加密狗以及其他任何形式的载体,均归甲方所有,而无论这些秘密信息有无商业上的价值。

若记录着秘密信息的载体是由乙方自备的,则视为乙方已同意将这些载体物的所有权在甲方需要的时候转让给甲方。甲方应当在乙方返还这些载体时,给予乙方相当于载体本身价值的经济补偿。

但当记录着秘密信息的载体是由乙方自备的,且秘密信息可以从载体上消除或复制出来时,可以由甲方将秘密信息复制到甲方享有所有权的其他载体上,并把原载体上的秘密信息消除。此种情况乙方无须将载体返还,甲方也无须给予乙方经济补偿。

第二条:保密义务人

乙方为本协议所称的保密义务人。保密义务人是指为甲方提供相关服务而知悉甲方商业秘密,并且在甲方领取报酬或工资的人员。

甲方向保密义务人支付的报酬或工资中已包含保密费,此处不再重复支付。

保密义务人同意为甲方公司利益尽最佳努力,在履行职务期间不组织、参加或计划组织、参加任何竞争企业,或从事任何不正当使用公司商业秘密的行为。

第三条:保密义务人的保密义务

1,保密义务人对其因身份、职务、职业或技术关系而知悉的公司商业秘密应严格保守,保证不被披露或使用,包括意外或过失。即使这些信息甚至可能是全部地由保密义务人本人因工作而构思或取得的。

2,在服务关系存续期间,乙方未经甲方许可,不得以竞争为目的、或出于私利、或为第三人谋利、或为故意加害于公司,擅自披露、使用商业秘密、制造再现商业秘密的器材、取走与商业秘密有关的物件;不得刺探与本职工作或本身业务无关的商业秘密;不得直接或间接地向公司内部、外部的无关人员泄露;不得向不承担保密义务的任何第三人披露甲方的商业秘密;不得允许(出借、赠与、出租、转让等处分甲方商业秘密的行为皆属于“允许”)或协助不承担保密义务的任何第三人使用甲方的商业秘密;不得复制或公开包含公司商业秘密的文件或文件副本;对因工作所保管、接触的有关本公司或公司客户的文件应妥善对待,未经许可不得超出工作范围使用。

3,如果发现商业秘密被泄露或者自己过失泄露商业秘密,应当采取有效措施防止泄密进一步扩大,并及时向甲方报告。

4,服务关系结束后,公司保密义务人应将与工作有关的技术资料、源代码、工作相关工具、客户名单等交还公司。

5,鉴于保密义务人在职期间,获得或制作的商业秘密(包括技术秘密和经营秘密)对公司在竞争中的巨大价值,在劳动合同关系存续期间和终止之后,保密义务人均承认公司因投资、支付劳动报酬而对这些商业秘密的所有权,因此保密义务人同意甲方按下列方式执行:

(1)保密义务人因各种原因离开公司,自离开公司之日起年内不得自营或为公司的竞争者提供服务,不得从事与其在公司生产、研究、开发、经营、销售有关的相关工作(包括受雇他人或自行从事),并对其所获取的商业秘密严加保守,不得以任何理由或借口予以泄露。甲方按《中华人民共和国劳动合同法》的规定向乙方支付补偿金。

(2)乙方应提前一个月向甲方提出解除劳动合同的申请。在此期间,甲方有权调动乙方的劳动岗位。

乙方如违反本项规定的,应承担本协议第五条规定的违约责任。

第四条:保密义务的终止

1、公司授权同意披露或使用商业秘密。

2、有关的信息、技术等已进入公共领域。

3、乙方是否在职、劳动合同是否履行完毕,均不影响其保密义务的承担。

第五条:违约责任

1,保密义务人违反协议中的保密义务,应承担违约责任,如有违约行为须向甲方支付违约金50000元(人民币大写伍万元)。

2,乙方如将商业秘密泄露给第三人或使用商业秘密使公司遭受损失的,乙方应对甲方进行赔偿,其赔偿数额不少于由于其违反义务所给甲方带来的损失。

3,前款所述损失赔偿按照如下方式计算:

①损失赔偿为甲方因乙方的违约或侵权行为所受到的实际经济损失,计算方法是:因乙方的违约及侵权行为导致甲方的产品销售数量下降,其销售数量减少的总数乘以每件产品利润所得之积;

②如果甲方的损失按照方法①所述的计算方法难以计算的,损失赔偿额为乙方因违约或侵权行为所获得的全部利润。计算方法是乙方从每件与违约或侵权行为直接相关的产品获得的利润乘以在市场上销售的总数所得之积;或者以不低于甲方商业秘密许可使用费的合理数额作为损失赔偿额。

③甲方因调查乙方的违约或侵权行为而支付的合理费用,如律师费、公证费、取证费等,应当包含在损失赔偿额之内。

④因乙方的违约或侵权行为侵犯了甲方的商业秘密权利的,甲方可以选择根据本协议要求乙方承担违约责任,或者根据国家有关法律、法规要求乙方承担侵权责任。

4,因乙方恶意泄露商业秘密给公司造成严重后果的,公司将通过法律手段追究其侵权责任,直至追究其刑事责任。

第六条:争议的解决方法

因执行本协议而发生纠纷的,可以由双方协商解决或共同委托双方信任的第三方调解。协商、调解不成,或者一方不愿意协商、调解的,将提交仲裁。

第七条:双方确认

在签署本协议前,双方已经详细审阅了协议的内容,并完全了解协议各条款的法律含义。

第八条:协议的效力和变更

1,本协议自双方签字或盖章后生效。

2,本协议的任何修改必须经过双方的书面同意。

第九条本协议壹式两份,甲乙双方各执壹份。

甲方(盖章):乙方(签字):

甲方经办人(签字):身份证号码:

篇7:软件开发协议

(合同编号:)

委托方(甲方):

受托方(乙方):

项目名称:

软件开发合作协议

合同编号:

甲方: 联系人: 联系方式: 邮箱:

乙方: 地址: 联系人: 联系方式: 邮箱:

依照《中华人民共和国合同法》、《中华人民共和国知识产权法》等法律法规、地方规章条例及行业规章之规定,甲乙双方为了建立长期的合作伙伴关系,明确双方责任,在软件开发合作过程中,本着相互合作、互惠互利的原则,共同协商达成如下协议,以便共同遵守: 第一条、合同标的

1、软件项目名称: 医疗集团智云管理系统。

2、内容及要求:

(1)开发内容:根据甲乙双方合作的要求,乙方在规定时间内完成“_____________医疗集团智云管理系统”软件的功能开发,该系统的设计要求如下: a、根据合作内容的实际情况设计开发与之相符合的系统。

b、供应链系统开发出包含(采购申报,领导审批,财务支付,发货供给功能)。c、企业微信公众平台系统开发

(2)开发特点:采用B/S架构,用户通过浏览器即能进行联网访问办公。

3、系统运行环境包括:IE6、7、8、10浏览器及使用 IE 核心的浏览器。

4、协助甲方软件著作权申请

5、协助甲方双软认证申请

6、协助甲方申报高新科技企业

7、合作开发时间:

(1)启动日期:自2018年3月 日开始启动。

(2)完成期限:自项目正式启动之日起,在 工作日内完成。

8、免费维护时间:自产品验收合格之日起一年内。第二条、合作方式

甲方委托乙方根据合同规定开发 医疗集团智云管理系统软件项目,乙方接受甲方的委托为甲方提供开发。第三条、双方的权利义务

1、甲方的权利义务

(1)甲方应当提供专人与乙方联络并对乙方的开发进度及质量进行监督。(2)甲方应当提供软件开发所需要的所有数据交给乙方,并保证数据的正确性。(3)甲方应当及时支付软件合作开发费用,保证软件合作开发费用及时到位。(4)甲方应当依合同约定,及时检验、测试所开发的软件。(5)甲方在软件符合约定时,依合同约定接受软件。

2、乙方的权利和义务

(1)乙方应当提供专人与甲方联络并及时向甲方说明开发进度及情况。

(2)乙方应当制定<软件开发研究计划>,经甲方确认后,按照<软件开发研究计划>的约定及时、正确的完成系统的开发。

(3)乙方有责任按甲方的要求在规定时间内完成项目开发,完成需要开发的内容。(4)在项目开发完毕之后,在乙方对甲方提供的维护服务期之内,由于甲方设计变更而导致系统的非主要框架的变更,若变更范围在本合同所规定的功能范围之内,乙方有义务免费为甲方修改变更内容。

(5)乙方有义务自行准备软件开发所需的硬设备、开发数据(6)乙方在其开发的范围内有为甲方提供培训及维护的义务(7)乙方不得将本合同标的委托或外包给他人完成。

(8)乙方对本软件的开发及在开发过程中所获得的所有数据负有保密的义务。(9)乙方不得在程序中加插和软件功能无关的程序或预留一些危害软件安全的漏洞(10)乙方在开发出符合合同约定的产品后有权要求甲方依合同约定支付报酬。第四条、合作软件的交付

1、乙方应当在90天内将软件产品交付甲方;

2、乙方交付产品时需要向甲方提交如下材料:(1)完成甲方功能要求的可执行软件;(2)软件的开发计划文件;(3)软件的设计文件;(4)软件的模拟环境;(5)软件的质量保证计划;(6)软件的确认测试计划;(7)软件的源代码;(8)软件的使用说明书;

(9)软件开发过程中产生的其它文档。

3、开发完毕,乙方应将系统的所有文件、源代码移交给甲方。

4、软件产品的交付形式应当为电子档(以作备档)。第五条、验收条款

1、开发阶段的验收:甲方应当按照开发计划在每一个开发阶段对乙方所开发的产品进行检测和验收,在不符合开发计划时,甲方有权要求乙方修改。

2、产品交付的验收:

(1)验收标准为:a.程序正常运行;b.方案中提到的功能全部实现;c.项目按时完成; d.文档和源代码齐全;e.将系统架设到甲方指定的服务器上。

(2)验收期限为 30 天时间。第六条、付款方式

本协议采用付款方式为转账付款。

总承包费用人民币¥160000元,(大写:人民币壹拾陆万元整)。甲方按开发进度分三个 阶段向乙方支付:

1、合同正式签订后3个工作日内支付首次合同费用金额¥60000元,(大写:人民币陆万 元整);

2、软件首期开发完成,即微信公众号搭建完成和软件主框架搭建完毕,3个工作日内支付二次费用,金额¥50000元,(大写:人民币伍万元整);

3、协助甲方完成软著申报、双软申报、高新科技企业申报。软件交由甲方测试无任何问题后,3个工作日内支付剩余合同金额¥50000元,(大写:人民币伍万元整);

4、在实施过程中因甲方需求变更所引起的费用变更,由甲乙双方签订补充协议予以约定。第七条、培训及维护

1、乙方应对甲方进行开发系统的实施及维护的培训,以确保甲方能正确使用该软件。

2、乙方必须派专业人员对甲方进行软件安装和调试的培训;

3、乙方应通过电话、EMAIL、现场服务等方式协助甲方的系统维护,乙方有义务及时响应并认真服务,努力确保甲方所委托开发系统的正常使用。第八条、保密条款

1、乙方对本协议的内容、项目开发成果及开发过程中涉及的文件、资料材料负有保密义务,未经甲方书面许可,不得向任何第三方泄漏;

2、乙方对甲方提供的、对本次开发有关的资料负有保密义务,未经甲方书面许可,不得向任何第三方泄漏;

3、乙方有责任对本协议的内容进行保密;

4、乙方有责任对为甲方所开发的软件进行保密,在未经甲方书面许可的情况下,不得向第三方泄露;

5、本合同履行过程中乙方获知的甲方商业秘密或其它技术及经营信息均负有保密义务,不得向任何第三方透露或泄露。第九条、知识产权归属

1、因本协议产生的开发成果(含源代码,系统技术文文件,软件,数据等)由甲方享有知识产权。

2、乙方承诺使用合法的、正版的开发工具。

3、甲方有权利用乙方按照本合同约定提供的研究开发成果,进行后继改进。由此产生的具有实质性或创造性技术进步特征的新的技术成果及其权利归属,由甲方享有。

4、乙方在未得到甲方书面授权,不得在完成本合同约定的研究开发工作后,利用该项目研究开发成果进行后续改进。如乙方擅自改进操作的由此产生的具有实质性或创造性技术进步特征的新的技术成果及其权利归属,仍归甲方享有。第十条、违约责任

1、任何一方有证据表明对方已经、正在或将要违约,可以中止履行本合同,但应及时通知对方。若对方继续不履行、履行不当或者违反本合同,该方可以解除本合同并要求对方按照合同总金额的10%作为赔偿违约金。

2、任何一方违反合同约定,迟延履行合同,以使本合同标的失去市场价值时,另一方有权解除合同并要求对方按照合同总金额的 10%作为赔偿违约金。

3、乙方如在程序中加插和软件功能无关的程序或预留一些危害软件安全的漏洞,甲方有权要求乙方完善软件并且赔偿损失,同时甲方有权要求对方按照合同总金额的 10%作为赔偿违约金。

4、甲方未按合同约定进行验收,导致系统无法依约定完成的,甲方应当承担开发延期的不利后果。

5、甲方未按合同约定支付软件开发总费用的,乙方有权要求甲方支付软件开发应支付而未支付费用的 10%的收取违约金。第十一条、合同终止及解除

1、因不可抗力或意外事故导致本外包合同所指向的软件开发无法继续时,该合同终止。

2、在现有水平和条件以难以克服的技术困难,导致软件开发全部失败时,该合同自动终止。

3、在甲、乙任何一方有严重违约行为时,另一方有权单方解除合同。

4、经甲乙双方协商一致,可以解除。第十二条、争议解决

双方在合同履行过程中发生争议,双方应当协商解决,在不能达成一致意见时,双方均有权向甲方住所地法院提起诉讼。第十三条、其它条款

1、如果本合同任何条款根据现行法律被确定为无效或无法实施,本合同的其它所有条款将继续有效。此种情况下,双方将以有效的约定替换该约定,且该有效约定应尽可能接近原约定和本合同相应的精神和宗旨。

2、本合同经双方授权代表签字盖章,自签订日起生效。

篇8:软件开发协议

在数据采集系统中,需要硬件采集系统和上位机进行数据通信。由于采集的数据类型可能为多媒体数据流,因而对数据的传输速率就有很高的要求。为了满足这些高速率数据传输要求,需要寻求一种标准的高性能的总线协议接口。目前个人计算机通信中,常用总线主要有USB总线、ISA总线和PCI/PCIe总线[1,2]。在这三种总线中,USB总线的理论传输速率可达到480Mb/s,但它的CPU占用率较高,不适合多任务系统的应用;ISA总线采用程序请求I/O方式与CPU进行通信,它的CPU占用率较高且传输速率较低;而PCI/PCIe传输速率及性能均较高,特别是PCIe总线,传输速率为250Mb/s(×1),被称为第三代I/O标准接口。PCIe目前已成为设备间通信的主流协议,已经广泛应用到数据采集、传输等领域。

硬件数据采集系统需要将采集到的数据通过PCIe总线传输到个人计算机上进行数据的后续处理。在此之间,需要个人计算机上的驱动程序来完成对硬件数据采集系统的控制,以完成数据的采集和传输。为了缩短系统的开发时间和提高驱动程序的可靠性,Jungo公司的WinDriver[3]驱动程序开发软件包给驱动程序的开发提供了一种简洁可靠的开发方法。

1 硬件系统的实现

本系统采用ML555开发板,它自身带有PCIe硬件总线接口,其核心是Xilinx公司生产的Virtex-5系列的FPGA[4,5]。首先按照开发板的手册将开发板上的拨码开关配置到正确位置;然后在装有Windows XP SP2系统并且带有×8或者×16链路的PCIe插槽的个人计算机上,将开发板插入个人计算机的PCIe插槽中;最后用ISE软件将开发板提供的PCIe IP核代码经过ISE软件的综合布线后生成的“.b”文件通过JTAG接口下载到ML555开发板中。这就完成了开发板的硬件配置。Virtex-5 FPGA是系统数据传输的核心部件,主要用来配置PCIe的配置空间、实现DMA操作的控制及DDR2存储设备的控制器。图1为系统的框架结构图。

PCIe配置空间主要配置单元配置情况:Vendor ID=0x10EE,Device ID=0x0007;这是驱动程序识别该硬件的厂商号和设备号;地址空间选择BAR0,类型为Memory,大小为128字节。这是DMA控制寄存器的起始地址。

DMA控制寄存器简介:DMAWAS,偏移量0x00,DMA写操作时DDR2存储器地址;DMAWAD_L,偏移量0x04,DMA写操作时上位机低32位地址;DMAWAD_U,偏移量0x08,DMA写操作时上位机高32位地址;DMARAS_L,偏移量0x0C,DMA读操作时低32位地址;DMARAS_U,偏移量0x10,DMA读操作时高32位地址;DMARAD,偏移量0x14,DMA读操作时DDR2存储器地址;DMAWXS,偏移量0x18,从DDR2存储器到上位机存储器传送的字节数(128×2n,n=[0:13]);DMARXS,偏移量0x1C,从上位机存储器到DDR2存储器传送的字节数(128×2n,n=[0:13]);偏移量0x20、0x24和0x2C为保留字节;DMACST,偏移量0x28,DMA控制/状态寄存器;DMAWRP,偏移量0x30,32位DMA写操作只读计数器;DMARDP,偏移量0x34,32位DMA读操作只读计数器。

DMACST控制/状态寄存器位介绍:位0,DMA写启动位,初始值0;位1,DMA写完成位,初始值0;位2,DMA读启动位,初始值0;位3,DMA读完成位,初始值0;位4,DDR2存储器硬件初始化完成位,初始值0;位31:5,保留位。

ML555开发板配置完成后就需要开发和上位机通信的驱动程序。目前开发驱动的方式主要有DDK、DriverStudio以及WinDriver。使用DDK来开发应用驱动需要掌握操作系统专业知识,开发过程涉及到很多面向底层的应用程序,因而不适合于开发硬件的专业人员。DriverStudio能够提供开发向导,也能自动生成C++[6]代码,但是在调试过程中需要不断地安装驱动程序,使用不方便。WinDriver能够像DriverStudio一样提供开发向导,可以生成C、Delphi、VB和VC++语言代码框架,使用灵活、方便。因而本系统采用WinDriver来开发PCIe驱动程序。

2 驱动程序开发

WinDriver软件是由JUNGO公司出品的驱动程序开发软件,其大大简化了硬件工程师开发硬件驱动程序的工作量。它支持的操作系统有:Windows系列、Linux和Solaris;支持的开发语言:C/C++、VB和Delphi等;支持的开发平台:VC和GCC等;支持的驱动接口:PCI/PCMCIA、CardBus、ISA和PCIe等。并且具有一种平台开发,其它平台通用的特点,因而有很强的平台移植性。

2.1 驱动代码的生成

本系统选用开发语言C++,开发平台MFC,上位机操作系统Windows XP,接口通讯协议PCIe,开发一款基于窗口界面的驱动程序。通过窗口界面按钮来控制上位机和开发板之间的数据传输以及监视寄存器状态、查看数据。

按照开发要求安装VS2005、Windows XP DDK和WinDriver9.21。启动WinDriver后,按照开发向导一步一步完成,直到生成基于C++语言的驱动程序代码,弹出VS2005编译平台。当前生成的C++代码是基于DOS操作系统下的顺序执行机制程序,而MFC是基于对话框的事件驱动执行机制。所以向导生成的代码不能直接在窗口模式下进行运行。下面介绍如何将其转化为基于窗口的对话框模式。

2.2 基于窗口的驱动开发

重新打开VS2005软件,新建“项目”,创建“MFC应用程序”,选择“基于对话框”选项,其余默认。新建好MFC项目以后,需要添加必须的头文件和源文件。

需要添加的头文件:virtex5_diag.h;源文件:diag_lib.c、pci_diag_lib.c、print_struct.c、virtex5_lib.c、wdc_diag_lib.c。另外,bits.h、diag_lib.h、pccard_cis.h、pci_regs.h、windrvr_events.h、status_strings.h、status_strings.c、utils.h、virtex5_lib.h、wd_ver.h、wdapi921、wdapi921.dll、windrvr_int_thread.h、wdc_diag_lib.h、wdc_lib.h、windrvr.h、print_struct.h、wdc_defs.h 需要添加到工程文件目录下。在xxxDlg.cpp(xxx为窗口驱动程序项目名称,下同)文件中需要添加预编译头文件“virtex5_diag.h”和“wdc_defs.h”。

设置工程属性。在添加的文件属性页中,创建/使用预编译头:不使用预编译头;预编译头文件:.Debug/xxx.pch;在工程属性中,配置属性 → 连接器 → 输入 → 附加依赖项:wdapi921.lib。工程属性设置完成,编译项目,成功通过。此时就可以按照开发一般窗口程序一样开发基于对话框的PCIe驱动程序了。

在资源视图中创建好对话框以后,需要添加各对应控件的消息响应函数。由于WinDriver对Xilinx公司出品的Virtex-5系列的FPGA有专门的驱动服务程序,所以只需要把提供的各功能的函数代码实现到控件消息响应函数处,即可实现相应的操作功能。驱动程序界面如图2所示。

2.3 主要函数功能介绍

WDC_PciScanDevices(dwVendorId,dwDeviceId,&scanResult);//dwVendorId为PCIe配置空间中Vendor ID,dwDeviceId为PCIe配置空间中Device ID,scanResult为PCIe信息结构体。该函数是将有特定厂商号和设备号的硬件信息填写到scanResult信息结构体中。

dwOptions |= DMA_KERNEL_BUFFER_ALLOC;//分配一个连续的DMA BUFFER物理地址。

pVIRTEX5Dma = (VIRTEX5_DMA_STRUCT *)calloc(1, sizeof(VIRTEX5_DMA_STRUCT));//在内存中分配一个sizeof(VIRTEX5_DMA_STRUCT)大小的内存空间。

WDC_DMAContigBufLock(hDev, &(&dma)->pBuf, dwOptions, dwtran_size, &(pVIRTEX5Dma->pDma));//锁定DMA传输空间。

WDC_ReadAddr32(hDev, VIRTEX5_SPACE, VIRTEX5_DMACST_OFFSET, &cst_data);//读取DMACST值。

cst_data&BIT4;//该语句用来检测在DMA设备初始化过程中存储器初始化是否完成。

WDC_WriteAddr32(hDev, VIRTEX5_SPACE, VIRTEX5_DMACST_OFFSET, cst_data&~BIT0);//BIT0位为写DMA启动位。写传送完毕,该位由硬件清零。

WDC_WriteAddr32(hDev, VIRTEX5_SPACE, VIRTEX5_DMARAD_OFFSET, DeviceMemOffset);//DMA读目标地址寄存器DMARAD,该寄存器中存放DDR2存储器地址。

WDC_WriteAddr32(hDev, VIRTEX5_SPACE, VIRTEX5_DMARAS_L_OFFSET, dma_phys_addr+HostMemOffset);//DMA读源地址寄存器DMARAS_L,该寄存器存放系统存储器的低地址位。

WDC_WriteAddr32(hDev, VIRTEX5_SPACE, VIRTEX5_DMARAS_U_OFFSET, 0x0);//DMA读源地址寄存器DMARAS_L,该寄存器存放系统存储器地址位的高位。

WDC_WriteAddr32(hDev, VIRTEX5_SPACE, VIRTEX5_DMARXS_OFFSET, ReadSize);//DMA读传送大小寄存器。

//启动DMA传送

WDC_ReadAddr32(((&dma)->hDma)->hDev, VIRTEX5_SPACE, VIRTEX5_DMACST_OFFSET, &cst_data);

WDC_WriteAddr32(((&dma)->hDma)->hDev, VIRTEX5_SPACE, VIRTEX5_DMACST_OFFSET, cst_data | BIT2);//DMACST[2]为DMA读启动位,读完成后其值由硬件清零。

//采用查询方式

DWORD timeout = 5000000; //5s

WD_SLEEP sleep = {2, 0}; //2μs

for (i = 0; i < timeout; i += 2)

{WD_Sleep(hDev, &sleep);}

3 实例应用

将本系统嵌入到基于DICOM图像格式的CT医学图像处理中,实现由CT采集回来的数据通过PCIe总线接口传输到PC机上。数据采集框架图如图3所示。

该结构是由CT采集回的数据传输到ML555开发板上,进行图像处理,并将最终的处理结果传输到个人电脑上,用软件把数据还原为图像进行显示,如图4所示。

由图4得出,本次设计的PCIe总线驱动具有良好的可靠性,实现了数据传输要求。

4 结束语

在实验条件为PCIe插入×8数据链路插槽,单次传输数据量为1024字节,数据传输为DMA查询方式,数据传输速率可达到610Mb/s。并且整个系统性能稳定,在数据传输系统中可完全达到高速传输要求。

窗口驱动程序在测试硬件方面很直观,应用方便。不但能完成普通驱动程序高效传输数据的要求,而且在测试过程中便于观察硬件中特殊功能寄存器的状态,有利于硬件功能的进一步完善。

摘要:简要介绍Xilinx公司生产的基于Virtex-5系列的FPGA的ML555开发板特点,并用ML555开发板实现带有DMA数据传输通道的PCIe总线协议。以数据采集与传输为例,详细介绍了采用WinDriver与MFC相结合的方法来实现基于窗口操作的PCIe驱动程序的开发步骤。

关键词:WinDriver,设备驱动程序,FPGA,DMA

参考文献

[1]Ravi Budruk,Don Anderson,Tom Shanley.PCI Express系统体系结构标准教材[M].电子工业出版社,2005.

[2]Tom Shanley,Don Anderson.PCI系统结构[M].刘辉,翼然然,夏意军,译.北京:电子工业出版社,2000.

[3]Jungo Ltd.WinDriverTM PCI/ISA/CardBus User’s Manual Version9.20[Z].Jungo Ltd.,2008.

[4]何宾.Xilinx可编程逻辑器件设计技术详解[M].清华大学出版社,2010.

[5]Kraig Lund,David Naylor,Steve T-rynosky.Virtex-5 FPGA Integra-ted En-dpoint Block for PCI Express Designs:DDR2 SDRAM DMAInitiator Demonstration Platform,XILINX,2008.

上一篇:创建《平安班级_平安校园》实施方案下一篇:2023年公务员考试公共基础知识刑法常识练习题