摘要:针对磁场检测仪需要众多软硬件开发人员协同开发的问题,引入Redmine项目管理平台进行项目开发的协同管理。采用Proteus实现下位机硬件和嵌入式软件的并行开发,引入嵌入式系统和SVN版本管理器对嵌入式软件各模块进行协同开发。采用Bus Hound实现上位机和下位机软件的并行开发。最终,该协同开发模式的引入使得本项目开发用时比原计划用时减少25%,同时项目质量也有提高。
关键词:Redmine;Proteus;嵌入式操作系统;SVN;协同开发
引言
随着电子产品功能日益增多、性能日益增强,低成本32位微处理器、多层PCB板被广泛应用,软件和开发团队的规模随之扩大,同时开发周期呈指数增长。因此,以往的开发方式越来越不适应项目开发的需要。目前,国内磁场检测仪器主要集中应用在工业用低频强磁场和通信用的高频弱磁场测量上,而中频强磁场测量仍是磁场测量领域的一个难题。基于嵌入式操作系统的中频强磁场的测量系统开发中,涉及到高速硬件电路设计、多层PCB板布线、32位微处理器编程、上位机软件编程等多项工作,因此,需要众多开发人员协同开发。
通过长期的实践发现,在项目开发中引入开源项目管理平台Redmine、嵌入式操作系统μC/OS-II、仿真软件Proteus和调试软件Bus Hou nd,能够有效地提升整个项目的协同开发能力和管理水平。采用协同开发管理模式,可以达到以下4方面的显著效果:提高嵌入式软件和硬件之间的协同开发效率;提高嵌入式软件各模块间的开发效率和开发质量;提高上位机和下位机软件的开发效率和开发质量;有效提高整个项目协同开发的管理水平。
1 磁场检测仪开发管理平台
项目管理的好坏关系到项目开发质量的高低,同时,对开发效率和开发质量也将产生重大的影响。目前市场上,基于Web的开源项目管理软件已经发展得很成熟,此类软件在高校的教学和研究,以及中小企业的项目开发管理中,都得到了广泛的应用。
现阶段,在磁场检测系统项目开发中,由于软硬件的开发复杂,开发人员众多且开发人员存在着开发能力参差不齐、流动性大等特点,加上项目的开发时间跨度大等原因,使得项目管理变得十分困难。经过笔者应用分析,从软件的成熟度、稳定性、流行性、社区发展情况,以及安装配置的简易性这几方面进行详细的分析比较,最终在Launchpad、Redmine和Trac这3个软件中,选择了Redmine。
在磁场检测系统的项目管理平台搭建中,首先,利用BitNami Redmine Stack提供的一键式安装包,安装好Redmine平台,然后把中频磁场检测系统开发团队的成员、任务(问题)、文档、讨论、Wiki、版本管理,以及各种形式的资源整合在此平台上,大家通过一起参与更新任务、更新文档等来推动项目的进度。同时,系统地利用时间线索和各种报表,动态显示项目的进度状态。
在项目中引入Redmine管理平台,界面如图1所示。起到了立竿见影的效果:
①开发团队中新加入的成员通过此平台,可以快速地了解项目的详细情况,从而能够快速地接手项目;
②团队中如有成员离开,其他成员可以快速地接手该成员原来负责的任务;
③相对于以往采用客户端TortoiseSVN访问SVN的方式,开发成员更容易接受Redmine提供的Web访问方式,来访问和操作SVN版本控制器;
④为团队成员的内部沟通和交流提供了高效的平台;
⑤根据项目的进展情况,可以及时地调整项目的进度,从而实现高效的动态管理。
2 嵌入式软件和硬件协同开发
Proteus可以实现原理图设计、PCB布板以及微处理器与外围电路的协同仿真。Proteus微处理器模型支持8051、PIC、MSP430、AVR、ARM 7和HC11等系列微处理器。其中,2011年推出的Proteus7.10版本,增加了对ARM Correx-M3系列处理器的支持。
电子产品从芯片的选型、电路设计、PCB布板到样板焊接调试,这中间一般需要几个月的时间,这段时间对整个项目开发来说,是非常关键的。在磁场检测仪样板制作的同时,嵌入式软件开发人员在Proteus中绘制基本原理图后,就可着手在Proteus的ARM Cortex-M3微处理器模型上编写程序。
由于采用Proteus和IAR联调,即在IAR集成开发环境中进行代码调试,运行和调试结果直接在Proteus中显示,因此不用等到样板制作完毕再开始嵌入式软件的调试,从而做到嵌入式软件和硬件的同步开发。
另外,相对于直接在样板上调试,Proteus更容易判断出某个功能不能实现的具体原因,是由于硬件的故障还是软件的编程问题引起的,从而避免了误将硬件故障认为是软件编程问题的情况发生,大大提高开发效率。另一方面,在磁场检测仪LCD显示驱动程序的调试中,利用Proteus提供的逻辑分析仪虚拟仪器测量LCD驱动时序,可以非常直观地调试LCD的驱动程序,快速地完成LCD驱动程序的编程和调试。
由于磁场检测仪中每一版本的PCB都只焊接制作了3块样板,大部分调试都在Proteus上完成。所以,用Proteus代替实际样板调试,可以很大程度地减少元件的购置,减少样板的制作;同时,也大大减少了JTAG仿真器、示波器、逻辑分析仪等调试设备的购置。为磁场检测系统开发节约大量的资金和宝贵的开发时间。
3 嵌入式软件各模块协同开发
3.1 引入嵌入式操作系统实现任务分解
现在,国内低端手机设计上广泛使用联发科技MTK的方案,将手机芯片和手机软件平台预先整合到一起。MTK的整套软件系统十分庞大且复杂,但其架构是引入Nucleus嵌入式操作系统,将手机软件分解成多个任务并行开发。
MTK使用了Nucleus实时操作系统,但在其上做了内核抽象层的封装,以适应最终生产厂商选择其他实时操作系统的需要(如选择替换为ThreadX)。Nucleus、ThreadX和μC/OS-II这3个嵌入式操作系统功能上很类似,但商用license是不一样的。其中μC/OS-II应用在市场上销售的产品,是需要购买license的;而针对高校的教学和研究,是免费的。这也是μC/OS-II广泛被高校教师和学生认知的一个重要原因,同时这也是我们优先采用μC/OS-II作为磁场检测仪的嵌入式操作系统的一个重要原因。
目前,ARM程序的规模一般都很大,需要多人协同开发。由于不带嵌人式操作系统的程序,仅依靠全局变量和函数传递信息,程序耦合度十分高,很难实现多人的协同开发。引入嵌入式操作系统后,各个任务间通过消息邮箱、消息队列或信号量同步,大大降低程序的耦合度,极大地提高团队协同开发的效率。
引入嵌入式操作系统后,一般将程序分成几个任务(线程),分别由专人负责。嵌入式软件开发流程中,首先是对电路板和嵌入式操作系统进行初始化,接着创建若干任务,剩下的工作就是编写每个任务或中断处理的程序代码。图2为磁场检测仪的中断和任务间的同步关系框架图。
3.2 引入版本控制器实现代码合并
引入嵌入式操作系统后,每个嵌入式软件开发人员只需负责一个或若干任务。通过引入源代码控制软件,可以实现嵌入式软件代码的整合和集中备份。其中,SVN是BitNami Redmine Stack一键式安装模式中默认安装的版本控制器。通过SVN的使用,开发人员每天回到实验室,
通过SVN更新整个项目代码,然后用Source Insight开始一天的代码编写工作。下班前,使用IAR编译平台进行代码编译,确认没有编译错误后,再把自己修改过的代码上传到SVN中。上传代码时,SVN会自动检测代码是否存在冲突(如果两个或多个开发人员都改动了某一文件的同一地方,SVN会提示存在冲突)。如果存在冲突,开发人员可根据实际需要,协调解决冲突。
引入SVN后,每次代码上传到SVN后都会自动更新生成一个版本号。当磁场检测仪的嵌入式软件各模块联调出现新问题时,通过比较类软件(如beyond compare),比较两个版本代码之间的差别,很多时候能够快速找出问题的关键所在。
4 下位机和上位机的协同开发
Bus Hound可以用来分析USB总线数据协议、捕获I/O动作等。同时,也可以传送用户编写的命令,实现对下位机的控制和调试。虽然上位机软件还没有完成,但定义好上位机和下位机的通信协议后,可以用Bus Hound模拟上位机软件接收下位机软件发送的USB数据,或发送USB数据给下位机软件,从而实现上位机和下位机软件的并行开发。
在磁场检测仪中,使用南京沁恒电子有限公司生产的CH375作为USB主控芯片,实现ARM和上位机的USB通信。实际编程中,使用了CH375的3个端点,端点0用于控制传输,实现USB设备的枚举;端点2 IN用于USB数据从下位机到PC的Bulk传输(一次最多64字节);端点2 OUT用于USB数据从PC到下位机的Bulk传输(一次最多64字节)。Bus Hound接收32字节磁场测量数据如图3所示,利用Bus Hound控制CH373的USB端点2OUT,分32次控制接收下位机回传1 KB的磁场点采集信号数据,最终通过PC的中频磁场分析软件实现中频磁场的单点、平面和空间的磁场模拟分布显示。
另外,端点1 IN用于USB数据从下位机到PC的中断传输,端点2 OUT用于USB数据从PC到下位机的BULK传输(一次最多8字节)。在磁场检测仪嵌入式软件的调试中,利用端点1 IN发送调试指令和接收调试数据。
结语
Redmine、Proteus、μC/OS-II、SVN和Bus Hound的使用,提高了磁场检测系统的开发效率和开发质量,为磁场检测系统高效、高质量地完成开发任务提供了坚实的基础。在实际使用该协同开发模式中,高校或中小企业可以根据自身的实际需要进行改动,如μC/OS-II换成μCl inux等其他嵌入式操作系统,SVN换成GIT等其他版本管理器,Proteus换成SkyEye等其他仿真平台。最终,有效提高了高校研究生课程的教学效果以及高校和企业的项目开发效率和开发质量。