(续前节)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) 编写明确的代码避免运行时错误;
用户1191132 2014-6-10 14:56
用户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看到了?半年前我的消息没错吧,呵呵