# RM-Software **Repository Path**: broofssy/rm ## Basic Information - **Project Name**: RM-Software - **Description**: 嵌入式相关 - **Primary Language**: C - **License**: BSD-3-Clause - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 5 - **Forks**: 0 - **Created**: 2021-08-21 - **Last Updated**: 2023-10-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # C/C++统一规范 ### 1 文件头部规范 创建新文件时,复制到文件头部。 ```C /** ****************************************************************************** * @file fytpi_dsp.c * @author xxx * @brief DSP * @date 2021-8-9 ****************************************************************************** * @attention 数字信号处理 * 文件头注释,宽度为80个字符,为后续代码行宽提供参照。 * 参考doxygen注释规范 * * Copyright (c) CSU_RM_FYT. * All rights reserved. * * This software component is licensed by xxx under BSD 3-Clause license, * the "License"; You may not use this file except in compliance with the * License. You may obtain a copy of the License at: * opensource.org/licenses/BSD-3-Clause ****************************************************************************** *修改记录: *<时间> |<版本> |<作者> |<描述> *2021-08-21 |v1.0 |xxx |首次发布 ****************************************************************************** **/ /* includes ------------------------------------------------------------------*/ /* typedef -------------------------------------------------------------------*/ /* define --------------------------------------------------------------------*/ /* variables -----------------------------------------------------------------*/ /* function ------------------------------------------------------------------*/ ``` 防止头文件被重复引用 ```C /* 文件名前名加两个下划线“__”,后面加 “_H” */ #ifndef __DISP_H #define __DISP_H #endif ``` ### 2 命名规范 - 文件名 > 能体现文件的核心功能,全部小写,以"_"分隔不同单词 > > 例如关于控制的pid.c,关于云台的gimbal.c,关于姿态解算的imu_packet.c - 函数名 > 能体现函数的核心功能,首词**小写**,后面大写 > > 例如关于底盘速度控制的speedControl() > >*特例*:体现专属对象的,Chassis_GetMoveData、Holder_GetMoveData - 变量名 > > 全部小写,以"_"分隔不同单词 > > 例如变量chassis、holder_pitch_angle > > > > *对于需要显示类型的变量,允许添加前缀 > > 例如全局变量g_gimbalPid > > 常用前缀表示,推荐使用如下类型,用int32_t代替int、uint8_t代替unsigned char > > 使用部分类型之前,需要包含C/C++标准库**** > > | 类型 | 前缀 | 例 | > | ------------------------------------------ | ------------------ | ------------ | > | int、 int8_t、 int16_t、 int32_t | s、 s8、 s16、 s32 | s16_speed | > | unsigned char、uint8_t、uint16_t、uint32_t | u8、u8、u16、u32 | u8_data | > | double、float | d、f | f_pitch_angle | > | bool | b | b_state | > | extern、global | g | g_holder | > | 指针 | p | p_msg | > > **复合类型**用“_”隔开,例如int32_t类型的全局变量s32_g_chassis > > **结构体变量**首字母大写,无分隔符,如Chassis、HolderData > > > 较短的单词可通过去掉“元音”形成缩写 > > 常见缩写参考https://blog.csdn.net/qq_37851620/article/details/94731227 > > | 全名 | 缩写 | > | --------- | ---- | > | temp | tmp | > | flag | flg | > | statistic | stat | > | increment | inc | > | message | msg | > | calculate | calc | > | number | num | > | maximum | max | > | ... | ... | - 结构体或联合体 > 需要用typedef重定义 > > 原结构体前加下划线"_",避免与其他变量发生冲突 ```C typedef struct _Chassis { M3508_t M3508[4]; /*< 每个成员都要有注释 */ uint8_t CanData[8]; /*< CAN数据缓冲区 */ SuperCap_t SuperCap; /*< 超级电容 */ MoveData_t MoveData; /*< 移动数据 */ }CHASSIS_T; /*< 全大写,后缀T */ ``` - 宏定义 > 全大写,用"_"分隔不同单词,用括号包围定义的参数 > > 例如 ```C #define CHASSIS_FOLLOW (0) #define INFO_START (“Hello”) ``` ### 3 注释规范 - 文件头部注释如“1 文件头部规范” - 函数头注释 ```c /** * @brief 简介,float数字取绝对值 * @param 参数,InNum输入数字 * @retval 返回值,输入数字的绝对值 * @attention 备注 */ float f_math_abs(float InNum) { float RetNum; /*< 返回值 */ /* 计算绝对值 */ if (InNum>=0) { RetNum = InNum; } else { RetNum = -InNum; } return RetNum; } ``` - 语句注释 > 不能使用“//”进行注释 > > 语句和注释之间至少空一格 > > /* */ 中注释与两边星号空一格 ```c float f_math_abs(float InNum) { float RetNum; /*< 返回值 */ /* 第一种,写在语句上面 */ if (in_num>=0) { RetNum = InNum; /*< 第二种,写在语句后面,用"/*< */"表示注释左边的语句 */ } else { RetNum = -InNum; } return RetNum; } ``` 第一种针对一整块代码进行注释,第二种针对某条单独语句进行注释 ### 4 排版规范 - 程序块采用统一缩进风格,缩进空格为4个 > 尽量使用空格键进行缩进,或设置编辑器将tab键转换为空格,避免不同编辑器tab键长度不同 - 不同代码块或不同函数之间**只空一行** - 较长语句(>80字)要分成多行书写,例如 ```C uart2_send_wave(5, 4, &Holder.Pitch.TarAngle, &Holder.Pitch.Angle, &Holder.Pitch.TarSpeed, &Holder.Pitch.Speed, &Holder.Pitch.Output); ``` - switch必须要有default - if、while、for等无论语句长短,不能省略"{}",例如 ```c /* 不符合规范 */ if (Num == 8) return; if (Num == 8) { return; } /* 符合规范 */ /* if 后空格 */ /* {}需换行 */ if (Num == 8) { return; } for (i=1; i