嵌入式知识点

一,嵌入式项目中do{...}while(OU)的作用和意义

1.1 概述

1.2 HAL库中do{...}while(OU)宏定义

1.3 do{...}while(OU)宏定义的作用和意义

二,嵌入式代码常见的命名规范

1.1 通用命名规则

1.2 文件命名, 类型命名

1.3 变量命名, 常量命名,函数命名

1.4枚举命名,宏命名


一,嵌入式项目中do{...}while(OU)的作用和意义

1.1 概述

相信使用过STM32Cube HAL库的朋友都知道,源码里面有许多do{...} while(0U)的宏定义语句,但是我们并不知道其中的作用和意义,只觉得这样写代码非常的复杂,其实我也不是特别知道这其中的奥妙,但是我看了一篇文章,那么我们就开始我们的探索之旅吧!

1.2 HAL库中do{...}while(OU)宏定义

在HAL库中,很多.h文件都有do{...} while(0U)这样的宏定义,比如:在stm32f1xx_hal_rcc.h中,使能GPIO时钟:

1.3 do{...}while(OU)宏定义的作用和意义

1,编译出错

//将无法编译,缺少大括号
#define foo(x) int a = x; int b = x;
int main]()
{
    int i = 0;
    if(i==0)
    foo(2);
    else
        i=1;
    return 0;
}

我们把大括号加上:


//将无法编译,加上大括号
#define foo(x) {int a = x; int b = x;}
int main]()
{
    int i = 0;
    if(i==0)
    foo(2);
    else
        i=1;
    return 0;
}

​

使用大括号后,有编译出现多一个分号,接下来我们使用do{...}while(OU):

​

//使用do{...}while(OU)
#define foo(x) do{int a = x; int b = x;}while(OU)
int main]()
{
    int i = 0;
    if(i==0)
    foo(2);
    else
        i=1;
    return 0;
}

​

​

编译正常!

二,嵌入式代码常见的命名规范

1.1 通用命名规则

尽可能使用描述性的命名,相比之下让代码易于新读者理解更重要. 不要用只有项目开发者能理解的缩写, 也不要通过去掉几个字母来缩写单词。少用缩写

1.2 文件命名, 类型命名

文件名:

  • 文件名尽量全部小写, 可以包含下划线 (_) 或连字符 (-), 按照项目的约定. 如果没有约定, 那么 “_” 更好。
  • 通常应尽量让文件名更加明确,bsp_i2c.h 就比 i2c.h 要好。
  • 源文件和头文件最好成对出现,比如 bsp_i2c.c 和 bsp_i2c.h 。

类型名:

  • 类型名称的每个单词首字母均大写, 不包含下划线

1.3 变量命名, 常量命名,函数命名

变量名:

  • 变量 (包括函数参数) 和数据成员名一律小写, 单词之间用下划线连接. 类的成员变量以下划线结尾, 但结构体的就不用
  • 不管是静态的还是非静态的, 类数据成员都可以和普通变量一样, 但要接下划线。
  • 结构体变量:不管是静态的还是非静态的, 结构体数据成员都可以和普通变量一样, 不用像类那样接下划线

常量命名:

  • 声明为 constexpr 或 const 的变量, 或在程序运行期间其值始终保持不变的, 命名时以 “k” 开头, 大小写混合。
  • 所有具有静态存储类型的变量 (例如静态变量或全局变量, 参见 存储类型) 都应当以此方式命名. 对于其他存储类型的变量, 如自动变量等, 这条规则是可选的. 如果不采用这条规则, 就按照一般的变量命名规则

函数命名:

  • 常规函数使用大小写混合, 取值和设值函数则要求与变量名匹配
  • 一般来说, 函数名的每个单词首字母大写,没有下划线. 对于首字母缩写的单词, 更倾向于将它们视作一个单词进行首字母大写
  • 取值和设值函数的命名与变量一致. 一般来说它们的名称与实际的成员变量对应

1.4枚举命名,宏命名

枚举命名:

  • 枚举的命名应当和 常量 或 宏 一致
  • 单独的枚举值应该优先采用 常量 的命名方式. 但 宏 方式的命名也可以接受所以要用大小写混合的方式

宏命名:

  • 参考 预处理宏; 通常 不应该 使用宏. 如果不得不用, 其命名像枚举命名一样全部大写, 使用下划线:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值