原创 MISRA:2004 嵌入式软件可靠性设计规范(2)

2011-11-16 15:45 2696 10 15 分类: 消费电子

(续前节)MISRA:2004 嵌入式软件可靠性设计规范(1)

Switch 语句

规则 15.0 Switch表达式中的case和default的语句必须在声明或者定义之后。

规则 15.1 witch 语句的主体必须是复合语句(即用大括号包含)。

规则 15.2 何一个非空的case语句或者default语句最后必须有break。

规则 15.3 switch表达式中的最后一个语句必须为default。

规则 15.4一个switch 表达式的取值不能为一个布尔值。

规则 15.5 每一个switch表达式至少应该有一个case。

函数

规则 16.1 不要使用参量数目是变化的函数。

规则 16.2函数不能进行直接或间接的递归调用。

规则 16.3在函数原型声明时全部给出所有参数的标识符。

规则 16.4一个函数声明和定义中使用的标识符应该完全一致。

规则 16.5无参函数声明时必须使用void类型。

规则 16.6传递给一个函数的参数个数应当同函数原型相匹配。

规则 16.7函数原型中的指针参数若不允许修改其指向的目标则必须声明为const指针。

规则 16.8non-void类型函数的所有出口路径都应该有显性的return语句表达式。

规则 16.9函数标识的使用必须采用前面带&或者是带参数列表(可能为空)的方式。

规则 16.10函数返回的错误信息必须经过验证。

指针和数组

规则 17.1 只有指向数组的指针才允许进行算术运算。

规则 17.2只有指向同一个数组的两个指针才允许相减。

规则 17.3只有指向同一个数组的两个指针才允许用>, >=, < , <=等关系运算符进行比较。

规则 17.4只允许用数组索引做指针运算。

规则 17.5不要用2级以上指针。

规则 17.6动态分配对象的地址不允许在本对象消亡后传给另外一个对象。

结构和联合体

规则 18.1所有结构体和联合体的定义必须保证完整性。

规则 18.2结构体和联合体的定义不能嵌套。

规则 18.3存储过某种数据类型之后的内存区不要再做它用。

规则 18.4不允许使用联合体。

预处理指令

规则 19.1一个文件中的#include语句应该在其他预处理器指令或注释之前。

规则 19.2 #include指令中的头文件名称不能包含非标准的字符。

规则 19.3 #include指令后必须跟着一个<文件名>或者“文件名” 。

规则 19.4 宏只能应用在如下场合:大括号括起来的初始化语句,常量,小括号括起来的表达式,类型限定关键词,存储类型限定词,或者一个do-while-zero的结构语句。

规则 19.5不能在语句块里定义宏。

规则 19.6禁止使用#undef。

规则 19.7应优先考虑使用函数而非宏函数。

规则 19.8宏函数在没有参数的情况下不得被调用。

规则 19.9预处理指令不得作为宏函数参数。

规则 19.10在宏函数定义中,每一个参数及整体都应该加上小括号,除非是在#或##运算符中。

规则 19.11在预处理指令中,所有的宏定义名称在使用前必须先定义,除非是在#ifde  #ifndef预处理指令和defined()运算符中。

规则 19.12在单一的宏定义中,最多只能出现一次#和##预处理操作符。

规则 19.13 #和##预处理操作不可以使用。

规则 19.14两种标准方式定义的预处理操作符只可以使用其中的一种方式。

规则 19.15应该避免头文件的内容被包含两次。

规则 19.16每一条预处理指令在语法上都必须是有意义的,即使这条预处理指令可能不会执行。

规则 19.17所有的#else, #elif 和 #endif预处理指令应该包含在与之相对的#if 或 #ifdef预处理指令相关的相同文件中。

标准库

规则 20.1标准库中的保留标识符,宏和函数不能定义,重定义,和取消定义。

规则 20.2不应重用标准库中宏、对象和函数的名字。

规则 20.3必须检查传递给库函数的数值的有效性。

规则 20.4动态堆内存分配不能使用,不能使用:malloc、calloc、free、realloc。

规则 20.5不得使用错误指示符errno。

规则 20.6不得使用库函数< stddef . h > 中的宏offsetof。

规则 20.7不应使用setjmp宏以及longjmp函数。

规则 20.8不得使用信号处理函数。

规则 20.9在产品代码中不应使用输入/输出库。

规则 20.10不得使用标准库中的库函数atof 、atoi 和atol 。

规则 20.11不得使用标准库中的库函数abort 、exit、getenv和system。

规则 20.12不得使用标准库中的时间处理函数。

运行时失效

规则 21.1 通过使用以下手段确保把运行时故障最小化:

a) 静态分析工具/技术;

b) 动态分析工具/技术;

c) 编写明确的代码避免运行时错误;

PARTNER CONTENT

文章评论5条评论)

登录后参与讨论

用户1191132 2014-6-10 14:56

之前看到一篇文章讲海思的监控ic市场占有率第一,已经超过TI,今天又看到楼主的文章,得出结论海思监控ic做的很好。

用户1678296 2013-7-13 22:36

写得好,值得思考

用户1624253 2013-1-14 11:16

中国很难接受昂贵的软件授权和技术服务

tamkay_819533976 2011-11-21 16:41

我认为做不到是因为没有真正弄懂。

wuyeqing_363494696 2011-11-18 19:44

翻译稿有一些错误,我在校对中已经发现部分,大家看的时候可对照英文原文看。不过绝大部分还是没问题的

用户1251981 2011-11-18 08:37

不知道有多少能做到。有用,但难。

用户1177949 2011-11-17 13:13

谢谢了

用户1406868 2011-11-17 09:07

很不错

用户1137126 2011-5-22 13:32

写的真好

用户1230895 2011-3-7 13:43

Zynq-7000的四个系列产品(Zynq-7010,7020,7030,7040),全部选择了800Mhz的主频,配合单/双精度浮点运算,可实现比市场上传统的A9处理器更高的性能。同时功耗和价格也具有极强的竞争力。比如最低款的Zynq-7010,功耗仅为2W,价格约为15美元。

DSPBuilder看到了?半年前我的消息没错吧,呵呵

相关推荐阅读
武晔卿 2017-05-13 06:38
接地线缆的选型错误
无论是Ⅰ类设备(有PE保护接地Earth),还是Ⅱ类设备(浮地或整机浮地但有内部的金属板充作保护公共地使用的),常见一些与EMC与可靠性的接地线错误应用,因此导致EMI干扰,该泄放的高频干扰泄放不掉而...
武晔卿 2017-03-17 07:43
电磁兼容设计整改三要素分析:电压容限、高频特性、回流路径
深入浅出抓本质 电磁兼容公益讲座 讲解内容: l 打静电时会复位重启,复位端、地线端、电源端发生了什么?——电压容限 l 浪涌发生时,有防雷防护,为什么后面电路仍然坏?为什么有起火? ——失效机理 l...
武晔卿 2017-02-23 14:11
一个工程师风花雪月的事
一位新毕业研究生电子工程师A的故事。 研究生三年,小A一直暗恋本校另外系的一个女生,但又怯怯地不敢表白。做毕业论文的时候,在实验室里,心绪烦乱,幻想着她羞涩一笑中牵她手的样子,不由得偷笑出来。但一想到...
武晔卿 2016-06-29 10:42
对开关管损坏做失效分析的一种方法
        电路板工作中不可能不发生芯片或半导体器件的损坏,损坏后,要想从器件的尸体上发现其死因,并能知晓导致其死伤的应力和作用路径,自然就可以很容易的...
武晔卿 2016-06-29 10:31
电路及元器件故障探查及原因分析方法
        电路板上器件故障之后,哪里坏掉了?坏到了什么程度?怎么坏的?会因其隐蔽性而难以查找具体故障点,也因为对故障原因故障机理不清楚而导致无从下手,或者只能用倒推法,用逐个实验的方式,将各...
武晔卿 2016-05-03 07:51
如何排查电子产品在用户现场偶发的故障?
工作中,不少朋友,几乎每位工程师,都遇到过电子产品在用户现场偶尔发生故障,如死机、复位、数据传输错误等。维修工程师在现场跟踪排查时,故障又不会再现,拿回实验室,怎么试验又都是好的。使人陷入一种无从...
我要评论
5
10
关闭 站长推荐上一条 /3 下一条