项目

一般

简介

功能 #3354

稚媛 黄 更新于 3 个月 之前

1、C语言:必须符合签署供应商合作协议(SOBA)时最新的MISRA C编码标准,包括所有规则、指令和修正。 
 2、C++语言:必须符合签署SOBA时最新的AUTOSAR C++编码标准,包括所有规则、指令和修正。(注:AUTOSAR C++ 14直接替代了MISRA C++ 2008标准。) 
 3、C/C++语言:必须符合福特编码标准。 
 1)对于未命名的数值常数,避免使用未命名的数字常量,优先使用有意义的命名常量。 
 可以接受的用法:当定义和可用时,使用True和False,而不是文字1和0。 
 不可接受的用法:不建议将字符串文字作为代码的一部分。 
 2)针对于包含文件,避免多重声明,避免别名和悬空引用。 
 可接受的使用:防止在单个编译单元中多次处理同一个头文件,例如,使用#ifndef、#define和#endif来保护头文件,条件编译会增加调试和管理不同代码变体的难度,在生成代码变体时,优先在构建级别包含或排除文件,而不是在源文件中使用条件编译。 
 不推荐的使用:不要#include一个.c文件,不要在头文件中放置可执行代码。 
 3)当多个任务同时访问一个资源时,资源或其提供的数据可能会被破坏。 
 例如,一个任务在读取NVM(非易失性存储器)之前,必须等待所有其他NVM访问完成。 
 并发和共享资源问题是导致保修问题的主要原因之一,仅次于“编程疏忽”。 
 共享资源的示例: 
 MCU内部的资源(如变量、NVM、寄存器、硬件I/O等),由单核上的多个任务访问,单核上的任务和ISR(中断服务例程)访问的内部资源,多核上的任务和/或ISR访问的内部资源,多个ECU访问的外部资源。 
 资源保护的示例: 
 互斥锁和信号量,获取操作系统的“资源”,任务间变量,独占区域 
 可接受的使用: 
 保护共享资源: 
 任何共享变量、寄存器、I/O电路或辅助函数都应通过管理器、操作系统资源(如信号量)或任务间变量进行保护。 
 ISR中的资源保护: 
 所有在ISR内部访问的资源都应受到保护,因为上下文增加了资源安全使用的复杂性。 
 外部设备的保护: 
 所有与微控制器共享连接的外部设备都应受到保护。 
 确保这些外部设备遵循HSIS(硬件软件接口规范)中规定的限制、建议和访问控制。 
 不推荐的使用: 
 不要创建自己的管理器来保护共享资源,除非操作系统或开发框架未提供保护机制。 
 4)对于值比较的情况 
 以下情况不需要使用不等式: 
 变量声明为整数但用作枚举。 
 测试整数是否等于位表示的最小值或最大值。 
 测试整数是否为零。 
 switch语句中的default情况可以处理所有超出范围的条件。 
 不推荐的使用: 
 避免隐式比较: 
 例如:if (take_branch),应明确写出条件,如 if (take_branch == true)。 
 避免使用“双重否定”进行比较: 
 例如:if (NOT_DISABLED != false),应直接写成 if (NOT_DISABLED)。 
 类似地,#if (NOT_DISABLED != 0) 应简化为 #if (NOT_DISABLED)。避免使用浮点值作为循环终止条件或循环索引: 
 浮点值的精度问题可能导致不可预测的行为。 
 5)使用条件语句时,最好使用简单、易于理解的表达方式,保证每行一个语句 
 不推荐使用复合语句,避免在测试中产生副作用,在if()或while()语句中避免嵌入赋值或其他可能产生副作用的操作 
 6) 

 4、提供经批准的工具进行静态分析、复杂度指标收集和MISRA-C/AUTOSAR C++合规性检查

返回