玩單片機、裸機開發的朋友,比如跟一些模塊配合聯調會遇到各種信號是否到位、成功等等狀態,而這些信號大多都是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;
}
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
單片機
+關注
關注
6032文章
44522瀏覽量
633171 -
C語言
+關注
關注
180文章
7601瀏覽量
136235 -
函數
+關注
關注
3文章
4308瀏覽量
62434 -
變量
+關注
關注
0文章
613瀏覽量
28334 -
標志位
+關注
關注
0文章
2瀏覽量
5801
發布評論請先 登錄
相關推薦
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,程序可以發送和接收數據,實現不同計算機之間的通信
評論