一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

c語言中標(biāo)志位的設(shè)置問題

嵌入式應(yīng)用開發(fā) ? 來源:嵌入式應(yīng)用開發(fā) ? 作者:嵌入式應(yīng)用開發(fā) ? 2022-12-18 15:37 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

單片機(jī)、裸機(jī)開發(fā)的朋友,比如跟一些模塊配合聯(lián)調(diào)會(huì)遇到各種信號(hào)是否到位、成功等等狀態(tài),而這些信號(hào)大多都是bool類型,1個(gè)bit即可進(jìn)行標(biāo)識(shí)。

當(dāng)然,如果僅僅是幾個(gè)標(biāo)志,直接拿個(gè)uint8_t的整形來進(jìn)行標(biāo)識(shí)也不會(huì)影響什么,但如果特別多的話似乎就比較廢RAM了。然而,為了更好的管理這些標(biāo)志位等,有個(gè)如下幾種方式供大家更好的管理這些標(biāo)志位 :

兩種方式:唯一直接標(biāo)識(shí)。

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; //系統(tǒng)標(biāo)志清除

    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;
}

這些標(biāo)志位的操作無非就是置位、清零,以及讀取三種方式。

但如代碼中這樣的操作方式在語句或語義表達(dá)上還是不夠直觀。

我經(jīng)常談到,代碼可以不寫注釋,不過你的每個(gè)變量、函數(shù)名稱等需要足夠的直觀,所以很多朋友習(xí)慣把這些標(biāo)志封裝起來。

枚舉和位移

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);
}
//獲得狀態(tài)
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;
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6067

    文章

    44991

    瀏覽量

    650423
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7632

    瀏覽量

    141725
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4381

    瀏覽量

    64865
  • 變量
    +關(guān)注

    關(guān)注

    0

    文章

    614

    瀏覽量

    28951
  • 標(biāo)志位
    +關(guān)注

    關(guān)注

    0

    文章

    2

    瀏覽量

    5930
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    C語言中宏定義的應(yīng)用

    C語言中,宏定義是一種預(yù)處理指令,用于在代碼中定義和使用常量、函數(shù)或代碼片段的替代。
    發(fā)表于 08-17 15:33 ?1197次閱讀

    單片機(jī)的C語言中操作用法

    單片機(jī)的C語言中操作用法
    發(fā)表于 08-17 15:04

    C語言標(biāo)志怎么用

    關(guān)于C語言標(biāo)志的應(yīng)用。。。。。不懂!
    發(fā)表于 03-18 12:07

    C語言程序中標(biāo)識(shí)符號(hào)的意義

    的熱情,但是在學(xué)校能學(xué)到最基礎(chǔ)的東西,一個(gè)程序的組成,緣由,如何實(shí)現(xiàn)等基本功能。之所以對(duì)C語言這門課程感興趣,因?yàn)閺男∥覍?duì)任何一個(gè)電子產(chǎn)品愛不釋手,還有希望以后自己也能夠開發(fā)出一些有趣的東西。C
    發(fā)表于 07-14 07:53

    c語言中標(biāo)志有什么作用?

    c語言中標(biāo)志有什么作用?
    發(fā)表于 10-14 08:05

    C語言中指針的介紹非常詳細(xì)

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

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

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

    C語言中的關(guān)鍵字

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

    單片機(jī)C語言中標(biāo)志的經(jīng)典應(yīng)用,讓你快速學(xué)會(huì)單片機(jī)C語言

    //====標(biāo)志應(yīng)用 定義聯(lián)合體實(shí)體====typedef union uFLG{ uint8 Flg ; //定義整形數(shù)據(jù) struct FLAG{ //域定義
    的頭像 發(fā)表于 07-06 15:48 ?7562次閱讀

    總結(jié)那么幾個(gè)C語言中的“坑”

    總結(jié)幾個(gè)C語言中的“坑”
    的頭像 發(fā)表于 01-16 10:52 ?2916次閱讀

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

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

    C語言中必須要掌握的運(yùn)算操作

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

    簡(jiǎn)單介紹嵌入式C語言中常用的操作

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

    scanf在C語言中的作用

    scanf在C語言中的作用? scanf是C語言中的輸入函數(shù),用于從標(biāo)準(zhǔn)輸入設(shè)備(如鍵盤)讀取數(shù)據(jù),并將其存儲(chǔ)到變量中。它是C
    的頭像 發(fā)表于 11-23 14:13 ?2170次閱讀

    C語言中的socket編程基礎(chǔ)

    Socket編程簡(jiǎn)介 Socket是一種通信機(jī)制,允許程序之間進(jìn)行通信。在C語言中,socket編程是網(wǎng)絡(luò)編程的基礎(chǔ)。通過使用socket,程序可以發(fā)送和接收數(shù)據(jù),實(shí)現(xiàn)不同計(jì)算機(jī)之間的通信
    的頭像 發(fā)表于 11-01 16:51 ?1229次閱讀