嵌入式软件编程规范(自用)

本文介绍了个人在嵌入式编程中制定的规范,包括空格和缩进规则、命名约定、函数和结构体定义、注释格式、文件组织以及一些最佳实践,旨在提高代码质量和一致性。
摘要由CSDN通过智能技术生成

前言

        准备入行嵌入式,为了养成良好的编程习惯,提高代码的可读性与易维护性,定义一个个人使用的编程规范,希望自己以后使用该规范进行编程,同时也应尊重他人代码规范。

结构、使用规范

  1. 使用空格代替制表符,四字节空格为一个缩进;
  2. 尾行注释时使用12个缩进,语句过长超过12个缩进就在末尾加一个缩进即可;
  3. 函数与函数之间、代码块与代码块之间、不同含义语句上下文之间要留有空行;
  4. 使用5个缩进作为文本行开始的偏移量;
  5. if、for、while、switch与左括号之间空一格括号里不需要;
  6. 自加、自减等单目运算符与变量之间不应加空格;
  7. 无特殊情况使用--i或者++i,尽量不使用i++与i--;
  8. 使用 . 与 -> 时不应有空格;
  9. 比较操作符,赋值操作符等双目运算符与变量之间要留有空格;
  10. 语句中,与;号后面要加空格;
  11. 按顺序声明局部变量(结构体、枚举、整数、浮点数,无符号优先);
  12. 在同一行中声明所有相同类型的局部变量;
  13. 程序块的分界符(如大括号‘{’和‘}’ )应各独占一行并且位于同一列;
  14. 对变量的定义、分支语句(条件分支、循环语句等)、功能代码块必须编写注释;
  15. 不要使用stdbool.h库。分别使用1或0表示真或假;
  16. 统一使用 stdint.h 库中数据类型定义变量;
  17. 当函数可以接受任何类型的指针时,总是使用void *,不要使用uint8_t *。函数在实现时必须注意正确的类型转换;
  18. 永远不要将布尔处理的变量与0或1进行比较。用NOT(!)代替;
  19. 文件底部要留有空行;
uint8_t bFlag							/*!< 标志位 */

void vShiLiOne(void)
{
    for (uint8_t i = 0; i < 8; ++i)
    {
    	if (i >= 5)
        {
        	bFlag = 0x01;
        }
    }
}

uint16_t usShiLiTwo(uint32_t ulData, float *pfBuff)
{
	if (!bFlag)
    {
        return 0;
    }

    return 1;
}

命名规范

变量命名以及函数命名使用前缀加帕斯卡命名(单词首字母大写),前缀见下表:

变量类型

前缀

举例

变量类型

前缀

举例

uint8_t

uc

ucData

int8_t

c

cData

uint16_t

us

usData

int16_t

s

sData

uint32_t

ul

ulData

int32_t

l

lData

uint8_t *

ucp

ucpData

int8_t *

cp

cpData

uint16_t *

usp

uspData

int16_t *

sp

spData

uint32_t *

ulp

ulpData

int32_t *

lp

lpData

uint8_t 数组

uca

ucaData

int8_t 数组

ca

caData

uint16_t 数组

usa

usaData

int16_t 数组

sa

saData

uint32_t 数组

ula

ulaData

int32_t 数组

la

laData

float

f

fData

double

d

dData

bool(uint8_t)

b(尽量不用)

bData

void *

px

pxData

static

s_命名

s_Data

const

c_命名

c_Data

全局

g_命名

g_Data

静态定义函数

prv

prvData()

有返回函数

返回值类型

ucData

无返回函数

v

cData()

结构体

t

tLed

枚举

e

eLed

宏定义、结构体、枚举使用单独规范

宏定义:全部大写、单词与单词之间有下划线分开,末尾以_MACRO结尾,带参宏定义使用_FUNC(也可以不加后缀);

结构体:全部大写、单词与单词之间有下划线分开,末尾以_STRUCT结尾;

枚举:全部大写、单词与单词之间有下划线分开,末尾以_ENUM结尾;

文件规范

文件(.c与.h)说明

/**
 * @file            xxx.h或xxx.c
 * @brief           文件说明
 * @author          作者
 * @date            时间
 * @copyright       (C) Copyright 2024,XXX,All Rights Reserved.
 *
 * # update (更新日志)
 *
 * Date           Author       Notes
 * 时间           作者          版本
 *
 */

头文件格式

#ifndef __BSP_ADC_H__
#define __BSP_ADC_H__

#include "main.h"

//--------------------------------------------[Config]----------------------------------------------------

//--------------------------------------------[Statement]-------------------------------------------------

//--------------------------------------------[Function]--------------------------------------------------


#endif	/*__BSP_ADC_H__*/

//===========================================  End Of File  ===========================================//

文本结束

//===========================================  End Of File  ===========================================//

注释规范

简单说明 --- 块注释

/**
*
*/

函数注释 --- 可做删减,有则加无则删

                    
/**
 * @brief           系统时钟初始化
 * @param[in]       无
    @arg            无
 * @param[out]      无
 * @retval          无
    @brf            无
 * @author          FQY
 * @data            2022-06-01
*/

结构体枚举注释

/**
 * @brief 详细描述
 */

注释 --- 函数外部注释、尾行注释

/*!< 定义一个整型变量a */

注释 --- 函数内部注释

/* 定义一个整型变量a */
尾行注释依然使用
/*!< 定义一个整型变量a */

注意事项

  1. 不要初始化静态和全局变量为0(或NULL),编译器会处理;
  2. 指针与空值进行比较,指针与指针不进行比较;
  3. 函数不修改指针所指向的内存,则使用const作为指针;
  4. 不修改函数的形参或变量时,则使用const修饰;
  5. 宏定义时用圆括号保护输入参数,用括号保护最终的宏计算;

        

  • 29
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值