stm32 hal 与freeRTOS学习中遇到的c/c++

目录

__IO

__weak 


具体内容:

语法内容

1.  __IO 表示 volatile, 标准 C 语言中的一个修饰字,表示这个变量是非易失性的,编译器不要将其优化 掉。

2. __weak 在回调函数的时候经常用到。这样的好处是,系统默认定义了一个空的回调函数,保证编译器不会报错。同时,如果用户自己要定义用户回调函数,那么只需要重新定义即可,不需要考虑函数重复定义的问题,使用非常方便,在 HAL 库中__weak 关键字被广泛使用。

3. 

#if !defined(UNUSED)

#define UNUSED(X) (void)X      /* To avoid gcc/g++ warnings */

#endif /* UNUSED */

UNUSED参数,这个宏,很秀-CSDN博客

UNUSED()函数的作用-CSDN博客

如它所代表的英文一样,unused,即无用的意思。即UNUSED()函数在程序中没有实质性的作用,用来避免编译器警告。

HAL库的惯例、轶事

1.  HAL库中文件或函数 的 命名来历(由来):

1) stm32f4××_hal_conf.h,其中conf是configuratin的简写,故是stm32f4×× 的HAL configuration file 的头文件,HAL配置头文件。

里头包含了很多模块定义的头文件

2)看到很多以Msp为前缀的函数命名,如:void HAL_UART_MspInit(UART_HandleTypeDef *huart)

其中:Msp是指:MCU Specific Package   MCU的外围模块的特别包,比如串口是处理器的一个特别接口,串口的初始化就属于 MSP:和MCU相关的一个特别模块的初始化。

stm32中的hal库 中MSP的含义_hal-msp-CSDN博客

stm32f4××_hal_msp.c,按照上面的说法: MCU Specific Package ,此文件就是MCU外围功能模块的初始化。

比如串口,串口管脚的配置,时钟的配置就放在 stm32f4××_hal_msp.c  文件中的   void HAL_UART_MspInit(UART_HandleTypeDef* huart)函数完成,而串口模块对应的stm32f4xx_hal_uart.c文件中的__weak void HAL_UART_MspInit(UART_HandleTypeDef *huart)为弱函数,具体实现在stm32f4××_hal_msp.c中完成。

3)和功能模块有关的软件结构组织:

a. ×××_HandleTypeDef(某模块句柄类型定义),比如UART_HandleTypeDef、DMA_HandleTypeDef,采用结构体定义的形式,里头封装了

i.    该模块相关的寄存器类型结构体实例化变量:×××_TypeDef(比如USART_TypeDef)

ii.   该模块初始化设置类型结构体实例化变量:×××_InitTypeDef,比如UART_InitTypeDef

iii.   该模块DMA句柄类型结构体实例化变量:DMA_HandleTypeDef

iv.   该模块的状态变量的枚举类型的变量:HAL_×××_StateTypeDef,比如HAL_UART_StateTypeDef;

v.   该模块的相关回调函数指针;

b. ×××_TypeDef (某模块相关的寄存器类型封装在一起的结构体的定义),比如USART_TypeDef;

c. ×××_InitTypeDef(某模块相关的初始化设置的参数封装在一起的结构体的定义),比如UART_InitTypeDef;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值