功能 #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、提供经批准的工具进行静态分析、复杂度指标收集和MISRA-C/AUTOSAR C++合规性检查
返回