STM32 编程中一些常见的代码规范:
一、命名规范
- 变量命名
- 采用有意义的英文单词或词组来命名变量。例如,对于存储计数器值的变量,可以命名为
counter
或countValue
;对于表示时间的变量,可以命名为time
或timeDuration
。 - 对于局部变量,可适当采用简写,但要保证清晰易懂。例如,在一个函数中表示临时索引的变量可以命名为
idx
。 - 避免使用单个字符(如
a
、b
等)作为变量名,除非是在简单的循环计数器等非常明确的情况下。
- 采用有意义的英文单词或词组来命名变量。例如,对于存储计数器值的变量,可以命名为
- 函数命名
- 函数名应清晰地反映函数的功能。例如,
initGPIO
用于初始化 GPIO 端口,sendData
用于发送数据等。 - 采用动词 + 名词的形式,使函数的操作和操作对象一目了然。
- 函数名应清晰地反映函数的功能。例如,
- 宏定义命名
- 全部使用大写字母,并用下划线分隔单词。例如,
#define MAX_VALUE 100
,#define ADC_BUFFER_SIZE 256
。
- 全部使用大写字母,并用下划线分隔单词。例如,
二、代码格式规范
- 缩进与空格
- 使用 4 个空格进行缩进,以提高代码的层次感和可读性。例如:
if (condition) {
// 这里有 4 个空格的缩进
statement1;
statement2;
}
- 在运算符两侧、逗号后面等适当位置添加空格,以增强表达式的可读性。例如:
a = b + c;
而不是a=b+c;
,func(a, b, c)
而不是func(a,b,c)
。 - 括号使用
- 在条件语句、循环语句等控制结构中,即使条件或循环体只有一条语句,也要使用括号将其括起来。例如:
if (condition) {
statement;
}
- 函数定义和调用时,括号的使用要规范。例如:
functionCall(arg1, arg2)
,int functionDefinition(int arg1, int arg2)
。
三、注释规范
- 函数注释
- 在函数定义的上方,使用多行注释对函数的功能、参数、返回值等进行说明。例如:
/*
* 函数名:initSPI
* 功能:初始化 SPI 接口
* 参数:无
* 返回值:无
*/
void initSPI(void) {
// 函数体
}
- 代码段注释
- 对于复杂的代码段,在代码段的上方或旁边使用单行或多行注释解释其功能和实现思路。例如:
// 以下代码用于计算平均值
sum = 0;
for (i = 0; i < numElements; i++) {
sum += array[i];
}
average = sum / numElements;
四、头文件和源文件规范
- 头文件包含顺序
- 在源文件中,按照一定的顺序包含头文件。通常先包含本项目的头文件,再包含标准库头文件,最后包含第三方库头文件。例如:
#include "myProjectHeader.h"
#include <stdio.h>
#include <stm32f10x.h>
- 头文件保护
- 在头文件中使用
#ifndef
、#define
和#endif
来防止头文件被重复包含。例如:
- 在头文件中使用
#ifndef _MY_HEADER_H
#define _MY_HEADER_H
// 头文件内容
#endif