全国咨询热线:13560077759

看看你编写的嵌入式程序符合规范吗?

无锡达内教育浏览(3)发布时间:2020-11-19
文章导读
本页是无锡达内科技为您编辑整理的嵌入式学习资料“看看你编写的嵌入式程序符合规范吗?”的详情页,无锡嵌入式培训就选无锡达内科技,无锡达内科技能针对水平不同学员量身定制培训方案,通过优质教学和服务提升学员的学习效率及成绩,欢迎您咨询!

MISRA C是由汽车工业软件可靠性研究会(MISRA)明确提出的C语言开发设计规范。其目地是在提高嵌入式操作系统的安全系数及可扩展性。对于C 語言也是有相匹配的规范MISRA C 。MISRA C一开始主要是对于汽车工业,但是别的产业链也慢慢刚开始应用MISRA C:包含航空航天、电信网、国防安全、医疗器械、铁路线等行业上都现有生产商应用MISRA C。普遍申请强制执行的标准有下列:

Rule 13 . 不可应用char, int, float,double,long等种类,应当应用自身界定的种类显示信息表明种类的尺寸,如CHAR8,UCHAR8,INT16,INT32,FLOAT32,LONG64,ULONG64等

Rule 14 不可应用种类char,务必申明为unsigned char 或是 signed char。

Rule 18. 全部数据参量理应再加上适合的后缀名表明种类,比如51L, 42U, 34.12F等。

Rule 19. 严禁应用八进制数。(由于086U那样的参量非常容易造成误会)。

Rule 21. 不可界定与外界作用域中某一标志符同名的的目标,以防止遮住外界作用域中的标志符。

Rule 23. 具备文档作用域的目标尽可能身名为static的。

Rule 24. 在同一个编译程序模块中,同一个标志符不应该朋友具备内链和外链的身名。

Rule 25. 具备外链特性的标志符应当只申明一次。

Rule 27. 外界目标不可在好几个文档中身名。

Rule 28. 严禁应用register关键词。

Rule 29. 全自动目标(栈目标)应用前务必赋初始值。

Rule 33. 操作符&&和||的右边关系式不可具备不良反应(side-effect)。 换句话说,象 if (x == 20 && y == 19)那样的关系式被严禁。

Rule 35. 在回到布尔值的关系式中不可出現取值实际操作。

换句话说,大家常见的 if (!(fp = fopen("fname", "r"))) { /* error */ } (window.cproArray = window.cproArray || []).push({ id: "u3054369" });被严禁。

Rule 37. 不可对有标记数释放位操作,比如 1 << 4 将被严禁,务必写 1UL << 4;

Rule 39. 不可对有标记关系式释放一元 "-" 操作符。

Rule 40. 不可对有不良反应的关系式释放sizeof操作符。

Rule 42. 除开循环系统操纵句子,不可应用逗号表达式。

Rule 44. 严禁沉余的显式转型发展。例如: double pi = (double) 3.1416F;

Rule 45. 严禁从随意种类到表针的强制性转型发展,严禁从表针到随意种类的强制性转型发展。 比如:void* p = (void*)0xFFFF8888UL;

Rule 50. 不可显式分辨浮点数的相同性和不一性。

Rule 52. 不可遗留下“始终不容易采用”的编码。

Rule 53. 全部非空语句务必具备不良反应。

Rule 55. 除开switch句子,不可应用型号(label)。

Rule 56. 不可应用goto.

Rule 57. 不可应用continue。

Rule 58. 除开switch句子,不可应用break.

Rule 59. if, else if, else, while, do..while, for语句块务必应用{}括起。

Rule 60. 一切if..else if 句子,较终务必有一个结束的else。比如: if (ans == 'Y') { ... }

else if (ans == 'N') { ... }

else if (ans == 'C') { ... }

else {

(window.cproArray = window.cproArray || []).push({ id: "u3113367" });

Rule 67. 循环系统电子计数器的值不可在循环系统身体改动。

Rule 70. 严禁一切立即和间接性的递归函数启用。

Rule 82. 每一个涵数只有有一个发布点。

Rule 86. 假如一个涵数很有可能回到错误报告,则启用后务必多方面检测。

Rule 92. 不应该应用#undef

Rule 95. 不可将宏做为主要参数发送给宏涵数

Rule 98. 在一个宏定义中,#或##标记只有出現一次。

Rule 101. 严禁表针计算(代之以数组下标计算)。

Rule 102. 严禁超出二级的表针。

Rule 104. 严禁应用偏向涵数的非常量指针。

Rule 106. 不可将栈目标的详细地址发送给外界作用域的目标。

后边的标准对于即时嵌入式操作系统,对其他类型的开发设计不一定可用,如:

Rule 118. 严禁应用动态性堆分派(也就是不可应用malloc, calloc和realloc)。

Rule 119. 严禁应用errno。

Rule 120. 严禁应用offsetof.

Rule 121. 严禁应用

Rule 122. 严禁应用setjmp, longjmp.

Rule 123. 严禁应用

Rule 124. 严禁应用(不能用printf, scanf了!)

Rule 125. 严禁应用atoi, atof, atol。(这一我很赞同,提议应用strtol, strtod等涵数)

Rule 126. 严禁应用abort, exit, getenv。

Rule 127. 严禁应用

文中內容转载互联网,秉着共享与散播的标准,著作权归创作者全部,若有侵权行为请在线留言开展删掉!

以上是无锡达内教育整理的看看你编写的嵌入式程序符合规范吗?的全部内容,如需了解更多与看看你编写的嵌入式程序符合规范吗?相关的嵌入式学习资料,请点击进入嵌入式学习网详细了解!咨询热线:13560077759
推荐阅读