玩单片机、裸机开发的朋友,比如跟一些模块配合联调会遇到各种信号是否到位、成功等等状态,而这些信号大多都是bool类型,1个bit即可进行标识。
当然,如果仅仅是几个标志,直接拿个uint8_t的整形来进行标识也不会影响什么,但如果特别多的话似乎就比较废RAM了。然而,为了更好的管理这些标志位等,有个如下几种方式供大家更好的管理这些标志位 :
两种方式:唯一直接标识。
typedef union _tag_SystemFlag
{
uint16_t all;
struct
{
uint16_t Run :1;
uint16_t Alarm :1;
uint16_t Online :1;
uint16_t TimerOver :1;
uint16_t Reserver :12;
}bit;
} uSystemFlag;
uSystemFlag unSystemFlag;
int main(int argc, char *argv[]) {
unSystemFlag.all = 0x00; //系统标志清除
unSystemFlag.bit.Run = 1; //置位
unSystemFlag.bit.Alarm = 1;
unSystemFlag.bit.Online = 1;
unSystemFlag.bit.TimerOver = 1;
unSystemFlag.bit.Run = 0; //清零
unSystemFlag.bit.Alarm = 0;
unSystemFlag.bit.Online = 0;
unSystemFlag.bit.TimerOver = 0;
return 0;
}
这些标志位的操作无非就是置位、清零,以及读取三种方式。
但如代码中这样的操作方式在语句或语义表达上还是不够直观。
我经常谈到,代码可以不写注释,不过你的每个变量、函数名称等需要足够的直观,所以很多朋友习惯把这些标志封装起来。
枚举和位移
typedef enum _tag_Flag {
cEmRun = 0,
cEmAlarm,
cEmOnline,
cEmTimerOver
}emSystemFlag;
uint16_t SystemFlag ;
//置位
void SetFlag(emSystemFlag flag)
{
SystemFlag |= ((uint16_t)0x01) << flag;
}
//清除
void ClrFlag(emSystemFlag flag)
{
SystemFlag &= ~(((uint16_t)0x01) << flag);
}
//获得状态
uint8_t GetFlag(emSystemFlag flag)
{
return (((SystemFlag & (((uint16_t)0x01) << flag)) != 0)? true:false);
}
int main(int argc, char *argv[]) {
SetFlag(cEmAlarm);
if(GetFlag(cEmAlarm) == true)
{
printf("ClrFlagrn");
ClrFlag(cEmAlarm);
}
else
{
printf("SetFlagrn");
SetFlag(cEmAlarm);
}
return 0;
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
单片机
+关注
关注
6030文章
44502浏览量
632295 -
C语言
+关注
关注
180文章
7596浏览量
135971 -
函数
+关注
关注
3文章
4295浏览量
62348 -
变量
+关注
关注
0文章
613浏览量
28314 -
标志位
+关注
关注
0文章
2浏览量
5798
发布评论请先 登录
相关推荐
C语言程序中标识符号的意义
的热情,但是在学校能学到最基础的东西,一个程序的组成,缘由,如何实现等基本功能。之所以对C语言这门课程感兴趣,因为从小我对任何一个电子产品爱不释手,还有希望以后自己也能够开发出一些有趣的东西。C
发表于 07-14 07:53
单片机C语言中标志位的经典应用,让你快速学会单片机C语言
//====标志位应用 定义联合体实体====typedef union uFLG{ uint8 Flg ; //定义整形数据 struct FLAG{ //位域定义
scanf在C语言中的作用
scanf在C语言中的作用 scanf是C语言中的输入函数,用于从标准输入设备(如键盘)读取数据,并将其存储到变量中。它是C
C语言中的socket编程基础
Socket编程简介 Socket是一种通信机制,允许程序之间进行通信。在C语言中,socket编程是网络编程的基础。通过使用socket,程序可以发送和接收数据,实现不同计算机之间的通信
评论