如何优雅地使用全局标志位
在嵌入式软件开发过程中,相信很多人,特别是初学者都使用过全局变量。过多地使用全局变量以及管理不当的话,大量使用在不同的源文件函数中,容易导致逻辑混乱,代码阅读困难,后续维护成本越来越高的问题。但很多时候为了方便或快速实现任务间的同步或信号传递等功能需求,避免不了要使用。这里推荐一个本人使用的方法,个人觉得非常好用,分享出来。
//定义一个全局位使用枚举变量
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))
上述方法优势:
- 通过位的方式可以节省空间,对于使用一个字节来定义一个全局标志位;
- 每个全局位命名有意义的名字,方便阅读,集中一起方便管理和维护;
- 提供了统一的操作接口,如状态读取,修改等操作;
- 简单易懂,使用门槛低;