×

磁场检测仪的软硬件开发模式

消耗积分:1 | 格式:rar | 大小:0.4 MB | 2017-10-20

分享资料个

引言
  随着电子产品功能日益增多、性能日益增强,低成本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为磁场检测仪的中断和任务间的同步关系框架图。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.obk20.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'磁场检测仪的软硬件开发模式',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.obk20.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);