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宏中添加一个标识符,即可生成一系列相关的操作函数等。

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


审核编辑:刘清

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

    关注

    6030

    文章

    44502

    浏览量

    632288
  • RAM
    RAM
    +关注

    关注

    8

    文章

    1365

    浏览量

    114484
  • 嵌入式开发
    +关注

    关注

    18

    文章

    1019

    浏览量

    47484
  • 裸机
    +关注

    关注

    0

    文章

    39

    浏览量

    6334
收藏 人收藏

    评论

    相关推荐

    c语言中标志的设置问题

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

    线程的同步方式几种

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

    请问通信几种方式

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

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

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

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

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

    方品质管理规划

    方品质管理规划对方实施品质管理是现代企业管理的基本做法,也是公司将长期开展的基础工作,对产品及原辅料实施有效的
    发表于 02-01 15:08 29次下载

    VCD租赁管理系统毕业设计大家参考

    VCD租赁管理系统毕业设计大家参考 部分代码如下: Save Format v3.0(19990112)@begin Unchecked@end;@begin Targets 0 "vcd.pbt";@end;D
    发表于 03-27 13:59 2次下载

    打印机方式

    打印机方式              方式指的
    发表于 12-29 09:49 1078次阅读

    三星闪存命名规则,大家阅览

    三星闪存命名规则,大家阅览
    发表于 10-17 09:45 14次下载
    三星闪存命名规则,<b class='flag-5'>供</b><b class='flag-5'>大家</b>阅览

    Java Map的几种循环方式学习总结

    本文档内容介绍了基于Java Map的几种循环方式学习总结,参考
    发表于 03-19 15:51 0次下载

    电容器几种标志方法

    电容器是一种容纳电荷的元器件,单位F,μF,MF,nF,pF。其中m代表1/1000,u代表1/1000000,n代表1/1000000000,p代表1/1000000000000。通常器件也会有一些标志,根据电容器的标注可以更好
    的头像 发表于 09-04 09:40 4.5w次阅读

    常用高压电机的启动方式哪些

    关于高压电机,特别是大容量高压电动机,首要成绩就是电机的启动,及电机启动方式的选择,电机启动方式几种,在这里引见几种目前最常用的
    的头像 发表于 08-26 17:53 1.1w次阅读

    轴承跑内圆几种修复方式

    轴承跑内圆几种修复方式
    发表于 01-23 11:07 7次下载

    线程池的创建方式几种

    的开销。线程池的创建方式多种,下面将详细介绍几种常用的线程池创建方式。 手动创建线程池 手动创建线程池是通过实例化ThreadPoolExecutor类来创建线程池。在创建Threa
    的头像 发表于 12-04 16:52 809次阅读

    工业机器人控制方式几种

    工业机器人的控制方式多种多样,这些方式根据作业任务的不同而有所区别。主要可以分为以下几种:点控制方式、连续轨迹控制
    的头像 发表于 09-04 09:31 578次阅读