用MISRAC规范提升商用空调软件可靠性

用MISRAC规范提升商用空调软件可靠性

ID:44573987

大小:36.50 KB

页数:3页

时间:2019-10-23

用MISRAC规范提升商用空调软件可靠性_第1页
用MISRAC规范提升商用空调软件可靠性_第2页
用MISRAC规范提升商用空调软件可靠性_第3页
资源描述:

《用MISRAC规范提升商用空调软件可靠性》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、用MISRAC规范提升商用空调软件可靠性摘要:本文捉岀了在商用空调软件开发当屮,采用M1SRA-C编程规范来捉升商用空调软件的可靠性及可移植性。以商用多联机软件为例,分析了在遵循了MISRA-C规范后,能有效的避免几种常见的软件错误。关键字:MTSRAC规范商用空调多联机软件弓I言''商用空调产品功能复杂,运行环境恶劣,尤其对于商用多联机来说,其控制软件可是说是电器类产品中最复杂的软件之一。商用多联机控制软件不仅包含整个空调各个运行系统的控制逻辑而H述包含复杂的多机通讯,同吋相同功能的代码需要在不同处理器之间移植。因此,怎样提升多联机软件的

2、口J靠性、可移植性一直是多联机软件工程师研究的问题。1MISRAC编程规范MISRAC是有汽车产业软件可靠性协会(MotorIndustrySoftwareReliabilityAssociation)(MISRA)提出的C语言开发标准。其目的是在增进嵌入式系统的安全性以及口J移植性。MTSRAC—开始主要是针对汽车产业,不过随着对MISRAC认可度的提高,其他行业也开始逐渐使用MISRAC。目前大家熟悉的版本是MISRAC:2004版。MISRAC:2004包含141条规则,其中121条强制规则,20条建议规则。141条规则分为21个类别

3、,分别为:编程环境相关类规则;语言扩展类规则;文档类规则;字符集规则;标识符规则;类型规则;常量规则;声明与定义类规则;初始化规则;数值类型转换规则;指针类型转换规则;表达式规则;控制语句表达式规则;控制流规则;Switch语句规则;函数类规则;指针和数组类规则;结构与联合休规则;预处理指令规则;标准库规则;运行时错误规则。2多联机软件开发中常见错误以及MISRAC的应用多联机软件开发中常用的错误举例:2.1条件遗漏开发过程屮,程序员经常只对符合条件的处理,而遗漏了一些潜在的可能性,即在if---elseif…语句中经常忘记增加一个else

4、语句,来处理剩余条件。MISRAC的第14.10规则要求所有的if-elseif...结构都必须以else句子结束,保证所有可能的条件都得到处理。2.2表达式的计算顺序如A=b+++c;语句,程序员可能会依据标准C编译器的表达式计算顺序来得到预期的值,但因处理器的C编译器和标准C编译器并不一定相同,且不同编译器所编译的结果也不尽相同。因此这类的表达式可能有不确定的结果,同吋也增加了代码移植的难度,MTSRAC的12.2规则,要求表达式在任何情况下求值顺序必须保持一致。编程过程中尽可能的通过括号将表达式的计算顺序定好,保证唯一的计算顺序。2.

5、3数组越界多联机外机程序小经常定义一个数组用于存储所有内机的状态信息,通讯接收程序根据接收到的内机地址來定位对应内机在数组中的位置,如if(InterDoorData[Address])语句中,Address这个地址变量在特殊情况卜可能超出数组定义的最大个数,因此数组访问就有可能越界。MISRAC的21.1规则,要求采用静态或动态分析工具,对数组越界的错误做出排查,可以及时发现数组访问越界的情况。2.4代码移植过程中易出错相同功能的代码比如通讯功能的代码、内机自动寻址功能的代码,在不同品牌的处理器之间移植,经常出现难以发现的错误。如变量类型

6、定义、局部变量和全局变量重名导致的一些问题。MISRAC的一些规则能够有效的保证代码的可移植性,如局部变量不能和全局变量重名;作用于文件范围内的变量应当定义为Static型,这样避免与其他文件中同名的全局变量冲突;局部变量在使用么前一定要赋值;移位操作符不应该在冇符号变量上使用。2.5由于联合体的使用产生的错误由于多联机控制芯片多使用8位的单片机,RAM资源有效,为了有效利用资源,程序中一般会使用联合体來定义位变量。多联机软件通讯部分联合体的应用常出现如卜问题,如:用联合体定义了两个位变量fRxOk和FlashLedOnotypedefun

7、ion{unsignedcharByte;struct{unsignedRxOk:1;unsignedFlashLedOn:1;}Bits;}FLAG3;externFLAG3mFlag3;#definefRxOkmFlag3.Bits.RxOk/*正确接收到一帧数据*/#definefFlashLedOnmFlag3・Bits.FlashLedOnfFlashLcdOn在主循环中被清0,fFlashLcdOn=0;以CodcWarrior编译器为例,其编译后的汇编代码为:LDAmFlag3……(1)AND#OFDH(2)STAmFlag3

8、(3)fRxOk在通讯中断函数中被赋值。fRxOk=1;其编译后的汇编代码为:LDAmFlag3(4)ORA#01H.(5)STAmFlag3(6)假设执行指令⑴之前,mFlag

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。