0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

有几种方式供大家更好的管理标志位

冬至配饺子 来源:最后一个bug 作者:bug菌 2022-08-11 14:21 次阅读

嵌入式开发中难免会涉及到非常多的标志位处理,特别是玩单片机、裸机开发的朋友,比如跟一些模块配合联调会遇到各种信号是否到位、成功等等状态,而这些信号大多都是bool类型,1个bit即可进行标识。当然如果仅仅是几个标志,直接拿个uint8_t的整形来进行标识也不会影响什么,但如果特别多的话似乎就比较废RAM了。然而为了更好的管理这些标志位等,有个如下几种方式供大家更好的管理这些标志位 :

1、位域直接标识

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

pYYBAGL0n1mAVOK-AAEN0DnWL3M884.png

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

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

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

2、枚举+移位

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

pYYBAGL0n3GAK6mgAAE5yGF5gJk595.png

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

3、宏列表

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

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

poYBAGL0n5iARzYMAAEO0Tet6bY249.pngpoYBAGL0n56AJQIxAAEkmT32Yb4575.png

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

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

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

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


审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6001

    文章

    43973

    浏览量

    620817
  • RAM
    RAM
    +关注

    关注

    7

    文章

    1321

    浏览量

    113705
  • 嵌入式开发
    +关注

    关注

    18

    文章

    977

    浏览量

    46957
  • 裸机
    +关注

    关注

    0

    文章

    37

    浏览量

    6152
收藏 人收藏

    评论

    相关推荐

    c语言中标志位的设置问题

    来进行标识也不会影响什么,但如果特别多的话似乎就比较废RAM了。然而,为了更好管理这些标志位等,有个如下几种方式
    的头像 发表于 12-18 15:37 2129次阅读

    编程实例大家参考

    搜集的一些编程实例大家参考
    发表于 04-20 13:17

    计算峰值!大家参考!!!

    计算峰值!大家参考!!!
    发表于 12-21 18:59

    传感器几种分类方式

    `  谁知道传感器几种分类方式?`
    发表于 11-26 16:01

    pcb的组织方式几种

    `  谁来阐述一下pcb的组织方式几种?`
    发表于 03-18 17:06

    哪一种是更好方式编写初始化代码

    大家好,我的设备是PIC18F46K22,40引脚的程序包,我正在使用XC8编译器。我想知道哪一种是更好方式编写初始化代码:1。基于SFR。这是从第一个SFR开始,并初始化所有的
    发表于 04-08 09:25

    线程的同步方式几种

    线程的同步方式几种
    发表于 05-26 07:13

    c语言中标志什么作用?

    c语言中标志什么作用?
    发表于 10-14 08:05

    STM32芯片烧录几种方式

    STM32芯片烧录几种方式?分别是哪几种方式
    发表于 10-18 06:53

    请问通信几种方式

    请问通信几种方式
    发表于 10-28 09:15

    彩色LCD的连接方式几种

    目前一般彩色LCD的连接方式有这么几种:MCU模式,RGB模式,SPI模式,VSYNC模式,MDDI模式等
    发表于 11-03 08:34

    存储管理的存储方式几种呢?分别有何优缺点呢

    存储管理的存储方式几种呢?分别有何优缺点呢?
    发表于 12-23 06:34

    机器的通信方式几种

    机器的通信方式几种
    发表于 02-16 06:31

    数据的通信方式/同步方式几种

    数据的通信方式几种?数据的同步方式几种
    发表于 02-28 07:31

    如何更好管理PCB设计垫库中的数据

    探索更好方式管理你的PCB设计开发过程存档、组织和评估你的设计垫库中的数据。
    的头像 发表于 10-11 07:02 2667次阅读