内容提要
本文讨论了嵌入式软件编写的规则,强调批判性思维的重要性。提出了限制控制流、循环上限和动态内存分配等原则,指出这些规则可能增加代码复杂性,影响可维护性。同时,建议使用静态分析工具和高警告级别编译,以提升安全性和可读性。
关键要点
-
本文讨论嵌入式软件编写的规则,强调批判性思维的重要性。
-
限制控制流、循环上限和动态内存分配等原则可能增加代码复杂性,影响可维护性。
-
建议使用静态分析工具和高警告级别编译,以提升安全性和可读性。
-
限制所有代码只使用简单的控制流结构,禁止使用 goto 语句和递归。
-
所有循环必须有固定的上限,静态检查工具需证明循环迭代次数不会超过上限。
-
初始化后禁止使用动态内存分配,以避免内存崩溃和不可预测的性能。
-
任何函数不应超过一页纸的长度,以便于阅读和理解。
-
代码中的断言密度应达到每个函数不少于2个,断言是良好的文档和调试工具。
-
数据对象应在尽可能小的作用域内声明,适用于所有类型和函数。
-
必须检查所有非 void 函数的返回值,确保参数有效性。
-
预处理器的使用应限于包含头文件和简单宏定义,禁止复杂宏。
-
对指针的使用应有限制,不允许超过一层解引用,禁止函数指针。
-
从开发第一天起,使用编译器的最高级警告和最严苛模式编译所有代码,确保零警告。
延伸问答
NASA 的软件开发规则中,为什么禁止使用动态内存分配?
禁止动态内存分配是为了避免内存崩溃和不可预测的性能,确保程序在预先分配的内存限制内运行。
在嵌入式软件开发中,为什么要限制控制流结构?
限制控制流结构可以确保程序的可预测性和终止性,避免复杂的跳转和递归带来的维护困难。
NASA 的规则中提到的断言密度要求是什么?
要求每个函数平均至少有两个断言,以提高代码的文档性和调试能力。
如何确保嵌入式软件的循环不会超过固定上限?
必须让静态检查工具证明循环迭代次数不会超过预设的固定上限,若无法证明则视为违规。
为什么建议在嵌入式软件中使用高警告级别编译?
使用高警告级别编译可以确保代码质量,及时发现潜在问题,达到零警告的目标。
NASA 的软件开发规则对函数长度有什么限制?
任何函数不应超过一页纸的长度,约60行,以便于阅读和理解。