2025年汽车行业研发部工程师代码编写规范_第1页
2025年汽车行业研发部工程师代码编写规范_第2页
2025年汽车行业研发部工程师代码编写规范_第3页
2025年汽车行业研发部工程师代码编写规范_第4页
2025年汽车行业研发部工程师代码编写规范_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2025年汽车行业研发部工程师代码编写规范2025年汽车行业研发部工程师代码编写规范文档说明适用范围:整车电控、底盘、动力、车身、智能座舱、自动驾驶车载软件研发工程师(C/C++为主,适配AUTOSAR、ISO26262功能安全、ASPICE流程)

基准标准:MISRAC:2012/MISRAC++:2008、AUTOSARC++14编码指南

生效日期:2025-01-01

约束等级:【强制】必须遵守;【建议】优先执行;【许可】特殊场景评审后放行适用对象:ECU底层驱动、BSW、APP应用层、算法软件;自动生成代码(Vector/EB工具)另行规定,人工代码严格遵循本规范。第一章总则1.1设计目标保障车载软件可预测、安全、可移植、可验证,规避C/C++未定义行为;统一团队代码风格,降低跨工程师协作维护成本;满足静态代码扫描、代码审查、功能安全交付物要求;代码可追溯,支持需求追踪、缺陷定位、版本管理。1.2基本原则【强制】安全性优先:安全相关模块(ASILA/B/C/D)严格执行MISRA强制规则;最小权限:全局变量尽量避免,优先static局部变量;单一职责:一个函数、一个模块只完成一类功能;防御式编程:所有外部输入、传感器数据、接口参数必须有效性校验;禁止魔法数字:所有阈值、常量使用宏/枚举定义;禁止未定义行为:不使用不确定求值、隐式危险转换、非法指针操作;可测性:代码便于单元测试,避免强耦合、长函数、复杂嵌套。1.3开发环境约束【强制】字符集:仅使用ASCII字符,源码不包含中文、全角符号;注释中文使用UTF-8;缩进:4空格,禁止Tab;单行长度:≤120字符;换行与格式统一使用clang-format配置文件自动化格式化;提交代码前必须执行静态扫描(QAC/Cppcheck/Polyspace),阻断严重违规。第二章文件规范2.1文件命名【强制】.c/.h源文件:小写+下划线

示例:motor_control.c、can_if.hAUTOSAR模块可沿用标准命名(CanDriver、Com),新项目统一下划线风格禁止中文、空格、特殊符号、大写混排文件名2.2头文件防护【强制】所有头文件必须增加头文件保护宏,禁止#pragmaonce(兼容性风险)c

#ifndefMOTOR_CONTROL_H

#defineMOTOR_CONTROL_H

//内容

#endif/*MOTOR_CONTROL_H*/2.3文件组织结构头文件(.h)固定顺序文件头部版权注释头文件保护宏系统标准头文件(stdint.h等)项目公共头文件模块内部头文件类型定义、枚举、宏对外函数声明禁止在.h中定义全局变量、函数实现源文件(.c)固定顺序文件头部注释包含头文件(先系统头文件,再项目头文件)本模块私有宏、typedef、静态全局变量(s_前缀)静态函数声明函数实现2.4头文件依赖【强制】禁止循环包含;禁止包含未使用头文件;不使用绝对路径#include"D:/xxx.h";对外接口最小暴露,内部类型不放入公共头文件。第三章命名规范(整车研发统一标准)3.1标识符前缀规则【强制】对象命名规则前缀示例宏定义/常量全大写+下划线MODULE_MOTOR_MAX_SPEED枚举值全大写+下划线MODULE_MOTOR_STATE_RUN全局变量小写下划线g_g_motor_fault_flag文件静态变量小写下划线s_s_motor_current局部变量小写下划线无target_rpm函数小写下划线,动词+名词模块前缀motor_set_rpm()typedef结构体小写下划线,后缀_t-motor_param_t禁止:单字符变量(仅允许i/j/k循环临时变量)、拼音、无意义命名data1、temp。布尔变量建议使用is_/has_/enable_前缀:

is_motor_overload、enable_torque_limit3.2函数命名规范【强制】统一格式:模块_动作_对象()c

//推荐

motor_get_current(void);

can_send_signal(uint32_tsig_id);

//禁止

getMotor();//缺少模块前缀

process();//语义模糊第四章数据类型规范【车规强制】禁止直接使用int、short、long,统一使用stdint.h固定宽度类型c

uint8_tint8_t

uint16_tint16_t

uint32_tint32_t

uint64_tint64_t

bool(stdbool.h)浮点:仅在算法模块受控使用,底层驱动尽量避免浮点运算;位域谨慎使用,必须显式指定符号;禁止隐式类型转换,不同宽度变量赋值必须显式强制转换;寄存器访问使用volatile修饰。4.3变量与存储类【强制】变量尽可能最小作用域,在首次使用位置定义;安全相关代码禁止动态内存malloc/free(ASILB及以上强制禁用);全局变量尽量封装,提供set/get接口,禁止跨模块直接读写;未初始化变量禁止读取;c

uint32_tval=0U;//所有变量显式初始化第五章预处理、宏定义规范5.1宏【强制】宏表达式所有参数与整体加括号,防止优先级错误c

//正确

#defineCALC_PERIOD(x)((x)*10U)

//错误

#defineCALC_PERIOD(x)x*10U多行宏使用do{...}while(0)封装优先使用staticinline函数替代复杂宏禁止宏递归定义、禁止宏产生新变量名5.2条件编译【建议】条件编译指令顶格书写,不缩进;

大量条件编译建议拆分模块,避免代码可读性崩坏。第六章语句、控制流规范6.1括号风格【强制】采用K&R风格,左大括号同行,不单独换行c

if(rpm>MAX_RPM){

motor_set_fault();

}所有if/for/while/switch,即使单行代码必须加大括号,禁止省略。6.2if判断【强制】常量写左侧,防止误写=c

if(0U==status)//推荐

if(status==0U)//允许,但团队优先前者禁止连续赋值嵌入判断:if((a=b)>0)6.3switch【强制】每个case必须break;必须包含default分支,处理异常;禁止case穿透(评审例外除外,并增加注释)c

switch(state){

caseMOTOR_IDLE:

break;

caseMOTOR_RUN:

break;

default:

//未知状态,触发故障

fault_handler();

break;

}6.4禁止语句【强制(安全相关代码)】goto(仅允许错误集中清理场景,必须评审备案)递归调用(栈溢出风险,ASIL模块严禁)浮点数直接==比较,使用误差区间判断复杂逗号表达式、三元运算符嵌套多层第七章函数规范单一职责;建议函数有效代码行数≤60行;参数数量≤6个;过多参数封装结构体传入;入口参数强制有效性校验(范围、空指针检查);函数返回值禁止忽略;调用处必须接收或显式(void)标注;ISR中断服务函数:精简、禁止阻塞、禁止调用不可重入函数;禁止函数无原型声明。函数注释模板(Doxygen标准,满足ASPICE)c

/**

*@brief设置电机目标转速

*@param[in]target_rpm目标转速,范围[0,8000]rpm

*@returnE_OK:正常E_NOT_OK:参数超限

*@safetyASIL-B

*@note调用前确保电机处于使能状态

*/

Std_ReturnTypemotor_set_target_rpm(uint32_ttarget_rpm);第八章注释规范【强制】文件头必须包含版权、模块名称、版本、作者、修改记录;函数接口必须Doxygen注释;复杂算法、位运算、故障逻辑必须注释意图,不要重复翻译代码;废弃代码不得直接注释保留,统一删除;如需追溯使用Git版本;//注释后保留一个空格;注释不解释“代码做什么”,解释“为什么这么设计”。第九章指针、内存、寄存器访问(车载重点)使用指针前判空;禁止指针非法偏移、越界访问数组;硬件寄存器访问封装函数,禁止裸寄存器操作散落在业务代码;避免void*无类型转换传递;中断与主循环共享变量增加volatile,必要加临界区保护。第十章AUTOSAR专项补充规范遵循AUTOSAR命名规范(BSW标准API);Std_ReturnType统一使用E_OK/E_NOT_OK;模块接口严格区分API(对外)与内部static函数;COM、PDUR、CAN接口禁止直接操作PDU缓存;RTE生成代码不人工修改,如需调整通过配置工具实现。第十一章C++附加规范(智能驾驶/座舱软件)遵循AUTOSARC++14指南;禁用异常、RTTI、动态转换;禁止裸指针滥用,优先使用智能指针(受控场景);避免多重继承;禁止使用未定义行为的STL容器操作;安全关键模块禁用动态内存分配。第十二章代码交付与审查要求提交前自查清单:格

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论