14.关于HAL库中的高级C

本文详细探讨了STM32微控制器中使用HAL库进行高级C编程的方法,包括如何高效地操作寄存器、优化性能及错误处理策略。通过实例解析,帮助读者理解HAL库在复杂系统设计中的应用。
摘要由CSDN通过智能技术生成
这部分是讲一下在使用HAL库中学到的比较有用的高级C

/*************************************************************************************************/

1.枚举

  枚举的便利在于限定参数的选值只可能是已定义的枚举类型,默认为0,可以自己赋值,没有赋值的
  自动在赋值之后递增1;这些简单的自己百度一下吧
  本来我只是知道这个东西并不是很熟练的会使用,但自从张P跟我说之后还是很不懂
  有个大概的概念吧,现在看过HAL库中的枚举的使用,然后自己动手玩了下,感觉蛮有意思
  首先声明,枚举是真正的常量,并不是所谓的Const,既然说到这里了就说下Const,它只是只读变量
  并不真的是常量,对于一般变量,只有变量赋初值能改变变量的值对于加了Const的,其他情况下都只能
  读变量的值。
  然后吧,关于枚举需要注意以下几点,
  1.大括号里面是常量,并不是变量,所以并不需要定义变量
  2.每个常量之后要用逗号,而不是分号,否则编译通不过
  3.最好在最后面一个常量后加一个分号
  4.定义枚举类型的时候用的是大括号外面的逗号前面的那个变量,定义出来的枚举类型的值
    只可能是括号里面的值否则会报错。
  5.枚举多用来作返回值或者是限定参数
typedef enum
{
    HAL_OK,
    HAL_ERROR,

}Enum_Typedef;
Enum_Typedef A ;(A的值只可能是HAL_OK或者是HAL_ERROR)

/*************************************************************************************************/

2.关于防御性编程

  这个之前就提到过,外国的程序员经常用他们的30%时间来进行防御性编程,我们这边关心的
  只有功能是否实现,至于程序的健壮性以及可靠性关心的不是很多,但是看了下HAL库中的代码
  感觉好多都是在进行防御性编程,各种错误机制都做的挺棒,本来很简单的代码把那些Handler
  去除之后发现就差不多几行有用的代码,比如一个函数首先要对传递过来的参数进行参数的合法性检查
  在标准C里面是assert函数,在IAR中对assert进行扩展了,代码如下,简单做下解释
  这个宏就是说如果满足条件的话就什么也不做,如果不满足条件的话就有error打印出文件和行号
  可以说是非常方便,我们用的时候只需要自己再写个宏判断是不是限定的几个参数之一,然后把参数
  传进去就完成参数的合法性检查。

#ifdef  USE_FULL_ASSERT
/**
  * @brief  The assert_param macro is used for function's parameters check.
  * @param  expr: If expr is false, it calls assert_failed function
  *         which reports the name of the source file and the source
  *         line number of the call that failed. 
  *         If expr is true, it returns no value.
  * @retval None
  */
  #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__))
/* Exported functions ------------------------------------------------------- */
  void assert_failed(uint8_
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值