注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
jasmien的个人空间 https://home.eeworld.com.cn/space-uid-717194.html [收藏] [复制] [分享] [RSS]
日志

嵌入式软件可靠性设计要注意的问题

已有 712 次阅读2016-8-4 20:03 | 嵌入式软件, 可靠性

男人征服世界,女人通过征服男人来征服世界;硬件叱咤江湖,软件通过控制硬件来统治江湖。当今世界,放眼江湖,有电子的地方就有嵌入式软件,有电子故障的地方,也就有嵌入式软件设计缺陷的影子。我们今天就把软件所容易犯的错误和规避的方法一一罗列,并给出应对之法。

嵌入式学习软件的最大特点是以控制为主,软硬结合的较多,功能性的操作较多,模块相互间调用的较多,外部工作环境复杂容易受到干扰或干扰别的设备,且执行错误的后果不仅仅是数据错误而是有可能导致不可估量的灾难,所以总结起来,嵌入式软件可靠性设计需注意的问题有四个方面:

1、软件接口

先说软件接口中容易出问题的地方和编程人员容易犯的错误。

软件接口调用一般会有数据的赋值,赋值变量的数据类型可能会存在强制的数据转换;需加以检查。如果为了防范出问题的话,可以添加对数据范围和数据类型的检查。

赋值数据的数量不对路,多了少了的都不好,会出现意外的赋值结果,不过还好,这项错误比较好检查。

软件编程中,会有对某一功能操作代码的复用,比如对某个端口的数据检查和控制,在整个程序中只会发生两次,为了图省事,可能就直接把该段代码直接插入实际程序模块中去了,这样,在源程序代码中,就出现了两段完全相同,完成相同功能,只是服务于不同模块的代码,按道理来说,这样设计其实也没啥问题,是的,你没错,但你的行为会使别人无意中犯错。就像青年男女相处,女孩子纯粹是想和男孩子充分享受温馨的气氛和心情,并不想更深入的发生什么,但女孩子邀请男生去的是她的家,在家里换上了家居的睡衣,窗户紧闭,放着的还是暧昧的音乐,被男孩子半强迫发生后,无限哀怨地说“我没想到结果会是这样的”,那怪得谁来呢?在代码方面,您的这种做法与貌似引诱男孩上钩的少女无异。

有人会说了,我这样写代码怎么就算引诱呢?原因是程序可能会升级,您这几行代码在实际应用过程中也不能保证是尽善尽美的,发现不完善的地方后,势必会修改,如果你还能想得起来,可能不会遗漏,如果修改此代码的是别的人,改了一个地方,别的地方没改,是不是还留着隐患?那如何做呢?方法不难,把这段功能单独做成一个模块即可,对此端口的读取和控制赋值均由此独立模块完成,如果数据的正确性影响大的话,还需要对端口数据的正确性进行检查和判断。嵌入式软件可靠性编程方法的四个目的是防错、判错、纠错、容错。对端口数据的判断属于判错的内容,如果数据有错的话,纠错和容错的设计方法应该不用我深入讲解了吧?

2、软硬件接口

硬件如男人,对外的执行都靠它来实现,一旦出现问题,执行后的后果就不可控了,周总理说过“外交无小事”。但如何注意呢?

对读进来的硬件接口的数据要判断其真伪;

对输出的数据的执行效果要检测;

对输出的数据的可能后果要进行预防性设计,数据输出的过程,我们从设计上要做一个分析,分析的思路是一般容易局限在稳态过程,忽视了过渡过程。举例说明,比如我们控制一个支路的供电,从软件控制来说,直接给继电器一个启动信号,让开状态的触点闭合就可以了,非“关”即“开”,是受控继电器的两个稳态状态,但事实上,在从开到闭合的过程中,支路供电的电压并不是一个简单0V—24V(24V为示例而已)的跳变状态,而是一个抖动,有冲击信号的过程,这种情况在硬件上的防护是必不可少的,但在软件上也不是可以事不关己、高高挂起的。

另外在逻辑上,宜将容易被智能产品干扰和容易产生的干扰控制动作从时序上控制好,予以分开隔离。比如,控制继电器的过程是容易产生抖动尖峰脉冲而干扰数据总线和控制信号总线的,这时候从控制上,不宜同时实施数据的发送和接收工作,不宜作出其他的控制动作,惹不起咱躲得起,躲过这一阵干扰的时候总可以了吧?

3、软件代码

软件的可靠性是随着时间的推移,可靠性逐渐增加的,这一点区别于电子可靠性、机械可靠性。电子可靠性服从指数分布,在整个生命周期内,其失效率为一个常数;机械可靠性因为磨损、腐蚀、运动等因素的存在,随时间推移可靠度会下降。因此也就有了软件可靠性设计的一个特定规律和注意事项。

4、数据、变量

变量的定义是为的避免各种混淆,同一程序内数据和数据的混淆、不同人读程序时对变量理解上出现的二义性、视觉效果上容易出现的错误(字母的“o”和数字的“0”,字母的“l”和数字的“1”)。这里要遵循一个“要么相同,要么迥异”的基本规则,这条规则在很多的领域都有应用,用的最绝的是朱元璋,对待贪官,要么不理你,自觉点您贪差不多了就收手吧,您自己不收手的话,做的过了直接就杀,株连几族,所以在明朝,朱元璋是杀人最多的皇帝;在结构的防呆性设计上,接插件的选型也是如此,如果一个乳白色和一个浅灰色的同类接插件,最好的选择是有很直观的视觉差异或结构的差异,或者干脆就是相同的,相同须基于一个前提,互换性要好。

顺便说下射频工程师的工作内容 

现在人力资源领域把有关微波和射频无线技术方面的工程师分为几个名称,一般可以从名称看出其需要的射频工程师的工作内容。比如,如果一个职位是“微波工程师”或“射频工程师”,而这个公司是做通信设备的,那么其工作内容应该是小信号的低噪声放大器、频率合成器、混频器以及功率放大器等单元电路和电路系统的设计工作;如果一个职位是“射频工程师”,而这个公司是做RFID的,那么要不就是做微带天线和功率放大器、低噪声放大器、频率合成器的设计工作(900MHz以上的高频段),就是仅仅做电场天线和功率放大器的设计工作(30MHz以下频段);其它如手机企业,都是专向的“手机射频工程师”等。

1. 电路系统分析,有些通信设备公司的项目中,射频工程师需要负责对整个RF系统的电路进行系统分析,指导系统设计指标、分配单元模块指标、规范EMC设计原则、提出配附件功能和性能要求等等; 

2. 电路原理设计,包括框图设计和电路设计,这是射频工程师所必须具备的基本技能。这也是由系统设计延伸而来的,如何实现系统设计的目标,就是电路原理设计的目的,它也是器件选型评估的“前因”,因为设计电路的过程也是一个器件选型的过程。 

3. 器件选型与评估,要实现电路的指标要求,选择合适的器件是必不可少的,这个过程其实与电路原理设计是同时进行的。如何选择相应的器件,相比较而言同类型器件中哪一个更合适我们的产品设计?成本、性能、工艺要求、封装、供应商质量、货期等等,更是需要考虑的因素。 

4. 软件仿真,不管是ADS,MWO,Ansoft还是CST、HFSS,反正你总得会一到两个仿真软件的使用吧。仿真软件不能让你的设计达到百分百的准确度,但总不会让你的设计偏离基本方向,起码它们在定性的仿真方面是准确的。所以一定要学会使用一至两种或更多种仿真软件,它的基本作用就是让你能够定性的分析你的设计,误差总是有的,但是它能增强你的信心。 

5. PCBLAYOUT,原理就好比理论基础,一万个应用可以只依据一个理论,几个产品也有可能只有一个原理图,只要它的布线不一样,好比手机,同一个手机方案很多公司都拿来设计,原理图是一样的,但是不同的公司布出来的PCB板不一样,一个是外型不一样,一个是性能也有差异。性能的差异,其实就是PCB LAYOUT的差异。符合要求的PCB,其布局与布线兼顾性能、外观、工艺、EMC等方面。所以,PCB LAYOUT也是一个非常重要的技能。 

6. 调试分析,这个调试和生产调试不一样。生产调试是指令性的,研发产品的调试的重点在于发现问题和解决问题。调试是一个总结和积累经验的过程,不是说通过调试来积累调试经验,而是通过调试来积累设计经验;很多问题可能在设计时没有被发现,那么通过调试发现以后,就知道以后在设计时如何规避这些问题,如何改善这些问题。调试也是一个实践理论的最有效途径,我们可以通过调试过程来定性理解理论知识。 

7. 测试,其实测试是为调试服务的,调试是为设计服务的(设计是为市场服务的)。射频工程师必须熟练使用各种射频测试仪器,不管是频谱分析仪、网络分析仪、信号源、示波器、功率计、噪声系数测试仪、综合测试仪等等。不会测试就很难有效调试,不能发现问题如何得到提高呢?所以不要轻视测试技术,其实放眼国外RF企业,真正的高手都是从设计转到了测试技术,中间的原因值得我们思考。 

8. 如果可以,请你多亲力亲为,多做些基层工作,能自己焊的就自己焊接吧,你不可能调试的时候找人在你边上呆着给你换电容又换电感吧?所以,不要眼高手低瞧不起焊接的,有本事的自己焊接吧。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章