精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

c語言中標志位的設置問題

嵌入式應用開發 ? 來源:嵌入式應用開發 ? 作者:嵌入式應用開發 ? 2022-12-18 15:37 ? 次閱讀

單片機、裸機開發的朋友,比如跟一些模塊配合聯調會遇到各種信號是否到位、成功等等狀態,而這些信號大多都是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語言中,宏定義是一種預處理指令,用于在代碼中定義和使用常量、函數或代碼片段的替代。
    發表于 08-17 15:33 ?759次閱讀

    單片機的C語言中操作用法

    單片機的C語言中操作用法
    發表于 08-17 15:04

    C語言標志怎么用

    關于C語言標志的應用。。。。。不懂!
    發表于 03-18 12:07

    C語言程序中標識符號的意義

    的熱情,但是在學校能學到最基礎的東西,一個程序的組成,緣由,如何實現等基本功能。之所以對C語言這門課程感興趣,因為從小我對任何一個電子產品愛不釋手,還有希望以后自己也能夠開發出一些有趣的東西。C
    發表于 07-14 07:53

    c語言中標志有什么作用?

    c語言中標志有什么作用?
    發表于 10-14 08:05

    C語言中指針的介紹非常詳細

    C語言中指針的介紹非常詳細 C語言中指針的介紹非常詳細
    發表于 12-25 10:39 ?57次下載

    C語言和匯編語言混合編程方法和C語言中斷處理方法

    C語言和匯編語言混合編程方法和C語言中斷處理方法,new
    發表于 01-06 14:36 ?36次下載

    C語言中的關鍵字

    C語言中的入門教程
    發表于 10-14 16:24 ?3次下載

    單片機C語言中標志的經典應用,讓你快速學會單片機C語言

    //====標志應用 定義聯合體實體====typedef union uFLG{ uint8 Flg ; //定義整形數據 struct FLAG{ //域定義
    的頭像 發表于 07-06 15:48 ?7255次閱讀

    總結那么幾個C語言中的“坑”

    總結幾個C語言中的“坑”
    的頭像 發表于 01-16 10:52 ?2551次閱讀

    c#語言中怎么使用HTTP代理

    c#語言中怎么使用HTTP代理。
    的頭像 發表于 09-01 14:46 ?2117次閱讀

    C語言中必須要掌握的運算操作

    C語言中,特別是在嵌入式的開發中,操作是很常用的一個知識點,涉及到按(bit)操作的地方也是很常見的。本文分享一些C
    的頭像 發表于 02-10 14:19 ?1366次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言中</b>必須要掌握的<b class='flag-5'>位</b>運算操作

    簡單介紹嵌入式C語言中常用的操作

    在嵌入式C語言中,使用操作程序有很好的可讀性。以下就簡單介紹以下常用的操作。
    的頭像 發表于 02-23 10:36 ?983次閱讀

    scanf在C語言中的作用

    scanf在C語言中的作用? scanf是C語言中的輸入函數,用于從標準輸入設備(如鍵盤)讀取數據,并將其存儲到變量中。它是C
    的頭像 發表于 11-23 14:13 ?1316次閱讀

    C語言中的socket編程基礎

    Socket編程簡介 Socket是一種通信機制,允許程序之間進行通信。在C語言中,socket編程是網絡編程的基礎。通過使用socket,程序可以發送和接收數據,實現不同計算機之間的通信
    的頭像 發表于 11-01 16:51 ?245次閱讀