### MISRA-C:2004 指南在关键系统中的使用 #### 1. 背景:C语言的使用与问题 ##### 1.1 汽车工业中C语言的使用 MISRA (Motor Industry Software Reliability Association) 是一个由汽车行业发起的组织,致力于提高软件可靠性,特别是在安全相关的汽车系统中。MISRA C:1998 是MISRA在1998年发布的一套指导原则,旨在规范C语言在汽车行业的使用。随着技术的发展,MISRA-C:2004 对1998年的指南进行了修订和完善。 在汽车行业中,C语言的使用越来越广泛。这主要归因于C语言具有以下特点: 1. **灵活性**:C语言为开发者提供了灵活的编程方式,适用于各种不同的硬件平台。 2. **底层支持**:C语言可以直接访问硬件,这对于需要进行高速、底层操作的应用尤为重要。 3. **代码大小**:与其他高级语言相比,C语言生成的代码通常更小,消耗的RAM资源也较少。 4. **可移植性**:随着市场竞争的加剧,软件需要能够在项目的生命周期内被移植到新的处理器平台上,以降低硬件成本。 5. **自动化代码生成**:现代开发流程中越来越多地依赖于从模型自动生成C代码的过程。 ##### 1.2 语言的不安全性与C语言 尽管C语言具有上述优点,但它同样存在一些安全隐患。这些隐患主要来源于以下几个方面: 1. **程序员错误**:程序员可能会因为粗心大意或者对算法理解不深而导致错误。例如,将逻辑比较操作符 `==` 错误地写成赋值操作符 `=`。 2. **语言特性**:C语言的一些特性允许程序员写出看似正确但实际上存在问题的代码。例如,在if语句后面加上不必要的分号,这虽然不会导致编译错误,但可能导致逻辑错误。 3. **难以检测的错误**:某些类型的错误在编译阶段难以被发现,只能在运行时通过测试或者调试工具才能识别出来。 #### 2. MISRA-C:2004 的视野 ##### 2.1 发布说明 MISRA-C:2004是在MISRA-C:1998的基础上进行修订和完善的。它旨在提供一套更加全面和实用的指导原则,以帮助开发人员减少由于C语言使用不当而引发的安全问题。 ##### 2.2 目标 MISRA-C:2004的主要目标是: 1. **提高安全性**:确保C语言在关键系统的使用过程中尽可能减少错误和漏洞。 2. **增强可维护性**:通过规范化的编程实践,提高代码的可读性和可维护性。 3. **促进标准化**:推动整个行业内对C语言使用的标准化,以便更好地共享知识和技术。 #### 3. MISRA-C:2004 的范围 MISRA-C:2004 主要关注以下几个方面: ##### 3.1 基本的语言问题 这部分涵盖了C语言的基础知识和常见问题,包括但不限于数据类型、变量声明、初始化等方面。 ##### 3.2 未指出的问题 对于一些未在文档中明确指出的问题,MISRA-C:2004 提供了一套框架来帮助开发者识别和解决问题。 ##### 3.3 可应用性 这些指导原则适用于所有使用C语言开发的关键系统,包括但不限于汽车、航空航天等行业。 ##### 3.4 预备知识 MISRA-C:2004 假设读者已经具备一定的C语言基础,因此在某些概念和细节上可能不会进行深入解释。 ##### 3.5 C++问题 虽然主要关注C语言,但MISRA-C:2004 也提到了与C++相关的注意事项,因为很多关键系统开发中同时使用这两种语言。 ##### 3.6 自动产生代码的问题 随着自动化代码生成工具的普及,MISRA-C:2004 还讨论了这些工具在生成代码时可能遇到的问题,并提出了相应的解决方案。 #### 4. 使用MISRA-C:2004 ##### 4.1 软件工程环境 这部分介绍了如何在软件工程环境中有效地运用MISRA-C:2004 的指导原则,包括项目管理、团队协作等方面的内容。 ##### 4.2 编程语言和编码环境 这里详细讨论了如何选择合适的编程语言和开发环境来支持MISRA-C:2004 的实施。 ##### 4.3 采用子集 考虑到不同项目的需求可能不同,MISRA-C:2004 提倡根据实际情况选择性地采用其中的部分规则或子集。 ##### 4.4 符合性声明 如何正确地声明项目遵循MISRA-C:2004 的规定,以及如何验证这种符合性。 ##### 4.5 持续改进 这部分强调了持续改进的重要性,并提供了一些方法来帮助团队不断优化开发过程。 #### 5. 规则简介 MISRA-C:2004 将其指导原则分为多个类别,每个类别都对应着C语言的一个特定方面,例如数据类型、控制流、预处理指令等。这些规则旨在帮助开发者避免潜在的安全问题。 #### 6. 规则 这部分详细列举了MISRA-C:2004 中的所有规则,包括但不限于: - **环境**:讨论了开发环境的要求和限制。 - **语言扩展**:对于C语言的标准之外的特性进行说明。 - **文档**:关于文档编写的规定。 - **字符集**:如何正确使用字符集以避免编码错误。 - **标识符**:对于命名约定的规定。 - **类型**:不同类型之间的区别和注意事项。 - **常量**:如何定义和使用常量。 - **声明与定义**:关于变量声明和定义的规则。 - **初始化**:如何正确地初始化变量。 - **数值类型转换**:数值类型之间的转换规则。 - **指针类型转换**:指针类型之间的转换规则。 - **表达式**:如何正确使用表达式。 - **控制语句表达式**:对于循环和条件语句的规定。 - **控制流**:如何管理程序的控制流程。 - **switch语句**:对于switch语句的使用规则。 - **函数**:关于函数定义和调用的规定。 - **指针和数组**:指针和数组的使用规范。 - **结构与联合**:结构体和联合体的使用规则。 - **预处理指令**:预处理指令的使用规定。 - **标准库**:如何正确使用标准库函数。 - **运行时错误**:如何处理运行时可能出现的错误情况。 #### 7. References MISRA-C:2004 提供了丰富的参考资料,包括相关文献、标准和术语表等,以便读者进一步了解和深入研究。 #### 8. 附录 MISRA-C:2004 包含了几个附录,提供了规则摘要、旧版规则的映射、废除规则列表以及与其他标准的交叉引用等内容,帮助读者更好地理解和应用这些规则。 MISRA-C:2004 是一套非常全面且实用的指导原则,对于确保C语言在关键系统中的正确使用具有重要意义。无论是对于初学者还是经验丰富的开发人员,它都是一个宝贵的资源。
2025-08-20 13:48:56 448KB MISRA 2004
1
用于嵌入式和汽车电子的编码规则,能避免嵌入式代码70%的bug!
2023-10-13 09:25:11 500KB misra c 2004
1
MISRA-C:1998 [1] 发布于 1998 年。本文档是它的修订版本,用来解决与第一版本有关系 问题。 在汽车工业领域的实时嵌入式应用中,C 编程语言的使用越来越体现出广泛性和重要性。 在相当程度上取决于该语言固有的灵活性、可支持的范围及其潜在的访问广泛硬件环境的 移植性。详细的理由包括: z 对于许多使用中的微处理器来说,如果存在其他除了汇编语言之外的可用语言,通 常就是 C。在许多情况下,其他语言根本就不可用于硬件。 z C 对高速、底层、输入/输出操作等提供了很好的支持,而这些特性是许多汽车嵌入 式系统的基本特性。 z 由于应用的逐步增长的复杂性,高级语言的使用较汇编语言更为适合。 z 相对于其他一些高级语言,C 能够产生较小的和较少 RAM密集性(RAM-intensive) 的代码。 z 增长的可移植性需求。市场竞争要求在工程项目生命周期的任何阶段,软件可以通 过移植到新的和/或低成本的处理器,目的是为了降低硬件成本。 z 增长的自动产生 C 代码的使用要求。C 代码需要从模型包中自动产生。 z 增长的对开放系统和主机环境(hosted enviroments)的兴趣。
2021-07-31 10:42:02 456KB MISRA-C-:2004
1
MISRA-C-2004.pdf
2021-06-30 13:00:17 1.08MB MISRA-C
1