当前位置: 首页 > news >正文

如何优雅地使用全局标志位

在嵌入式软件开发过程中,相信很多人,特别是初学者都使用过全局变量。过多地使用全局变量以及管理不当的话,大量使用在不同的源文件函数中,容易导致逻辑混乱,代码阅读困难,后续维护成本越来越高的问题。但很多时候为了方便或快速实现任务间的同步或信号传递等功能需求,避免不了要使用。这里推荐一个本人使用的方法,个人觉得非常好用,分享出来。

//定义一个全局位使用枚举变量
typedef enum enumFlag
{
    FLAG_NULL = 0,
    FLAG_GLOBALVAR_1 = 1 << 0, //根据实际项目命名有意义的名字
    FLAG_GLOBALVAR_2 = 1 << 1,
    FLAG_GLOBALVAR_3 = 1 << 2,
    FLAG_GLOBALVAR_4 = 1 << 3,
    FLAG_GLOBALVAR_5 = 1 << 4,
    FLAG_GLOBALVAR_6 = 1 << 5,
}enumFlagTypedef;
extern enumFlagTypedef Flag;
//操作接口
#define Flag_set(f) Flag |= (f)
#define Flag_clr(f) Flag &= ~(f)
#define Flag_get(f) (Flag & (f))

上述方法优势:

  1. 通过位的方式可以节省空间,对于使用一个字节来定义一个全局标志位;
  2. 每个全局位命名有意义的名字,方便阅读,集中一起方便管理和维护;
  3. 提供了统一的操作接口,如状态读取,修改等操作;
  4. 简单易懂,使用门槛低;

相关文章:

  • servlet中的ServletContext
  • 【D2】神经网络初步学习
  • dfs深度优先搜索—邻接矩阵 + 邻接矩阵-递归版 + 邻接表
  • 基于Flask的茶叶销售数据可视化分析系统设计与实现
  • 一. vue2和vue3的Proxy底层源码详细拆解
  • Kepware的OPC UA配置深入介绍
  • C++ 中将类的定义和实现都放在头文件中的优缺点分析
  • 【20250215】二叉树:94.二叉树的中序遍历
  • 深入理解Elasticsearch集群与分片:原理及配置方案
  • 【硬件设计细节】缓冲驱动器使用注意事项
  • Springboot项目:使用MockMvc测试get和post接口(含单个和多个请求参数场景)
  • Git 本地项目上传 GitHub 全指南(SSH Token 两种上传方式详细讲解)
  • 代码随想录刷题攻略---动态规划---子序列问题1---子序列
  • 计算机视觉+Numpy和OpenCV入门
  • Plaid | 数据库切换历程:从 AWS Aurora MySQL 到 TiDB 的迁移之旅
  • ⚡️《静电刺客的猎杀手册:芯片世界里的“千伏惊魂“》⚡️
  • LeetCodehot 力扣热题100 从前序与中序遍历序列构造二叉树
  • 尚硅谷课程【笔记】——大数据之Hadoop【一】
  • Codeforces Round 1004 (Div. 2)(A-E)
  • HTML、Vue和PHP文件的区别与联系
  • 宁德时代港股募资预计最高至50亿美元:90%将投向匈牙利项目
  • 种罂粟喂鸡防病?四川广元一村民非法种植毒品原植物被罚​
  • 马鞍山市原常务副市长黄化锋一审获刑11年,涉案金额三千余万元
  • 为何发胖?如何减肥?一个医学体重管理中心的探索启示
  • 快评|印巴为何停火?已达成“一场胜利,各自表述”的效果
  • 援藏博士张兴堂已任西藏农牧学院党委书记、副校长