当前位置:网站首页 > 技术博客 > 正文

标志位v



ed9065fc12fff80cee1922c3c32da8b1.gif

正文


大家好,我是bug菌~

在嵌入式开发中难免会涉及到非常多的标志位处理,特别是玩单片机、裸机开发的朋友,比如跟一些模块配合联调会遇到各种信号是否到位、成功等等状态,而这些信号大多都是bool类型,1个bit即可进行标识。

当然如果仅仅是几个标志,直接拿个uint8_t的整形来进行标识也不会影响什么,但如果特别多的话似乎就比较废RAM了。

然而为了更好的管理这些标志位等,有个如下几种方式供大家更好的管理这些标志位 :

1

位域直接标识

采用位域是管理这些标志位比较直接且方便的方式,代码如下所示:

这些标志位的操作无非就是置位,清零、以及读取三种方式。

但如代码中这样的操作方式在语句或语义表达上还是不够直观。

bug菌经常谈到,代码可以不写注释,不过你的每个变量、函数名称等需要足够的直观,所以很多朋友习惯把这些标志封装起来。

2

枚举+移位

为了更好的表达一般会对标志位进行进一步的封装,如下代码所示:

当然封装成函数是相对比较耗时的,不过代码也会更加的易懂,如果确实容忍不了函数封装带来的时间消耗,把函数修改为宏代码片段或者内敛函数(当然前提是编译器支持)也是可行的。

3

宏列表

或许这里才是本文的重中之重~

以前跟大家介绍过,用宏自动化的生成各种代码片段,以使得代码更加的紧凑。当然可读性会相对降低一点,但对于重复性代码就不需要太多考虑了。

如果以前有过类似代码处理的朋友,应该看这段代码还是比较轻松的吧,如果有点生疏,可以一层一层展开了解。

其主要的功能就是通过宏替换和代码拼接符号,自动的生成通用的代码片段,这样做的好处就是不再需要我们在代码中定义一大堆setflag、clrflag、getflag等函数。

通过上面的代码当我们向TAGLIST宏中添加一个标识符,即可生成一系列相关的操作函数等。

这样一方面可以及简化代码,同时也避免一些人工编码带来的错误。

最后

      好了,今天就跟大家分享这么多了,如果你觉得有所收获,一定记得点个~,

最后一个bug,bug菌唯一创作平台~

c38a9e911b815f0c24204fc514499511.png

☞  MCU进阶专辑 2bc2b252520f4b08ad99e8266ad16412.gif

☞  嵌入式C语言进阶专辑 72359c8f4c220b744c17b652e9bd63c1.gif

☞  “bug说”专辑 44bfd53d36715c1cfe11ffcd8818d185.gif

☞ 专辑|Linux应用程序编程大全

☞ 专辑|学点网络知识

☞ 专辑|手撕C语言

☞ 专辑|手撕C++语言

☞ 专辑|经验分享

☞ 专辑|电能控制技术

☞ 专辑 | 从单片机到Linux

041734cddf0af1e00e30dbdc12062286.gif

版权声明


相关文章:

  • httppost传参数2025-02-07 07:30:01
  • java注解用法2025-02-07 07:30:01
  • slidc2025-02-07 07:30:01
  • python exe 反编译2025-02-07 07:30:01
  • ofstream file2025-02-07 07:30:01
  • 安装程序错误代码25022025-02-07 07:30:01
  • linux用fdisk给磁盘扩容2025-02-07 07:30:01
  • 如何判断循环队列是空还是满?2025-02-07 07:30:01
  • 面向对象设计6大原则2025-02-07 07:30:01
  • W25Q2562025-02-07 07:30:01