wwwxxx国产_337p日本欧洲亚洲大胆张筱雨_免费在线看成人av_日本黄色不卡视频_国产精品成熟老女人_99视频一区_亚洲精品97久久中文字幕_免费精品视频在线_亚洲色图欧美视频_欧美一区二三区

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1855|回復(fù): 12
打印 上一主題 下一主題
收起左側(cè)

關(guān)于如何提高代碼的執(zhí)行效率-進階篇

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:446156 發(fā)表于 2025-3-10 10:55 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
我在上一篇帖子簡單展示了如何使用狀態(tài)機來替代阻塞延時,這一篇我將向大家展示如何使用結(jié)構(gòu)體和函數(shù)指針來構(gòu)建對象。假設(shè)有個需求是需要三個LED分別按照5HZ、1HZ和0.5HZ的頻率來閃爍,我們應(yīng)該怎么實現(xiàn)它呢?如果按照上篇的解決方案需要三個LED_Twinkle函數(shù),只是函數(shù)內(nèi)部關(guān)于開關(guān)LED的部分不一樣。這樣存在一個問題,假如LED_Twinkle是一個非常復(fù)雜函數(shù),那么寫三遍非常費時費力容易出bug并且編譯出的可執(zhí)行文件體積還大。于是乎面向?qū)ο蠛痛a分層呼之欲出,廢話不多說先上代碼。

  1. struct LED_Obj
  2. {
  3.    uint8_t Status;
  4.    uint16_t DelayTime_LED;
  5.    void (*LED_OnOff)(uint8_t Com);
  6. };
  7. void LED1_OnOff(uint8_t Com)
  8. {
  9.    if(Com != 0)
  10.    {
  11.      LED1(ON);
  12.    }
  13.    else
  14.    {
  15.      LED1(OFF);
  16.    }
  17. }
  18. void LED2_OnOff(uint8_t Com)
  19. {
  20.    if(Com != 0)
  21.    {
  22.      LED2(ON);
  23.    }
  24.    else
  25.    {
  26.      LED2(OFF);
  27.    }
  28. }
  29. void LED3_OnOff(uint8_t Com)
  30. {
  31.    if(Com != 0)
  32.    {
  33.      LED3(ON);
  34.    }
  35.    else
  36.    {
  37.      LED3(OFF);
  38.    }
  39. }
  40. struct LED_Obj LED1 =
  41. {
  42.    .LED_OnOff = LED1_OnOff
  43. };
  44. struct LED_Obj LED2 =
  45. {
  46.    .LED_OnOff = LED2_OnOff
  47. };
  48. struct LED_Obj LED3 =
  49. {
  50.    .LED_OnOff = LED3_OnOff
  51. };
  52. void DelayTimeCount_ms(uint16_t *DelayTime_Count)
  53. {
  54.    if(*DelayTime_Count==0)
  55.    {
  56.      *DelayTime_Count=0;
  57.    }
  58.    else
  59.    {
  60.      *DelayTime_Count-=1;
  61.    }
  62. }
  63. void Set_Delay_Time(uint16_t Time,uint16_t *DelayTime_Count)
  64. {
  65.    *DelayTime_Count=Time;
  66. }
  67. uint8_t CheckDelay(uint16_t *DelayTime_Count)
  68. {
  69.    if(*DelayTime_Count==0)
  70.    {
  71.      return 0;
  72.    }
  73.    else
  74.    {
  75.      return 1;
  76.    }
  77. }
  78. void LED_Twinkle(struct LED_Obj *LED,uint16_t HarfPeriod)
  79. {
  80.    switch(LED->Status)
  81.    {
  82.      case 0:
  83.      {
  84.         LED->LED_OnOff(ON);
  85.         Set_Delay_Time(HarfPeriod,&LED->DelayTime_LED);
  86.         LED->Status++;
  87.       }break;
  88.      case 1:
  89.      {
  90.         if(CheckDelay(&LED->DelayTime_LED) == 0)
  91.         {
  92.            LED->Status++;
  93.         }
  94.      }break;
  95.      case 2:
  96.      {
  97.         LED->LED_OnOff(OFF);
  98.         Set_Delay_Time(HarfPeriod,&LED->DelayTime_LED);
  99.         LED->Status++;
  100.       }break;
  101.      case 3:
  102.      {
  103.        if(CheckDelay(&LED->DelayTime_LED) == 0)
  104.        {
  105.          LED->Status = 0;
  106.        }
  107.      }break;
  108.    }
  109. }
  110. void LED_Run(void)
  111. {
  112.    LED_Twinkle(&LED1,100);
  113.    LED_Twinkle(&LED2,500);
  114.    LED_Twinkle(&LED3,1000);
  115. }
  116. void Task_1mS(void)
  117. {
  118.    DelayTimeCount_ms(&LED1.DelayTime_LED);
  119.    DelayTimeCount_ms(&LED2.DelayTime_LED);
  120.    DelayTimeCount_ms(&LED3.DelayTime_LED);
  121. }
復(fù)制代碼



這段代碼涉及到結(jié)構(gòu)體和函數(shù)指針的語法知識,關(guān)于語法這里不再贅述,我來介紹一下這段代碼是如何面向?qū)ο蠛头謱拥摹?br /> 結(jié)構(gòu)體:

struct LED_Obj
{
    uint8_t Status;
    uint16_t DelayTime_LED;
    void (*LED_OnOff)(uint8_t Com);
};



該結(jié)構(gòu)體成員包括運行狀態(tài)變量(Status)、LED開關(guān)延時變量(DelayTime_LED)以及作為上下層接口用來控制LED開關(guān)的函數(shù)指針(*LED_OnOff)(uint8_t Com)
硬件層部分:

void LED1_OnOff(uint8_t Com);
void LED2_OnOff(uint8_t Com);
void LED3_OnOff(uint8_t Com);
這三個函數(shù)就是控制IO來實現(xiàn)LED開關(guān)
結(jié)構(gòu)體實例化(對象):


struct LED_Obj LED1 =
{
    .LED_OnOff = LED1_OnOff
};
struct LED_Obj LED2 =
{
    .LED_OnOff = LED2_OnOff
};
struct LED_Obj LED3 =
{
    .LED_OnOff = LED3_OnOff
};



因為我們有3個LED需要控制,所以需要創(chuàng)建3個LED_Obj對象并實現(xiàn)硬件層和應(yīng)用層的連接(函數(shù)指針初始化,指向一個函數(shù))
應(yīng)用層:


void LED_Twinkle(struct LED_Obj *LED,uint16_t HarfPeriod)
{
    switch(LED->Status)
    {
        case 0:
        {
            LED->LED_OnOff(ON);
            Set_Delay_Time(HarfPeriod,&LED->DelayTime_LED);
            LED->Status++;
        }break;
        case 1:
        {
            if(CheckDelay(&LED->DelayTime_LED) == 0)
            {
                LED->Status++;
            }
        }break;
        case 2:
        {
            LED->LED_OnOff(OFF);
            Set_Delay_Time(HarfPeriod,&LED->DelayTime_LED);
            LED->Status++;
        }break;
        case 3:
        {
            if(CheckDelay(&LED->DelayTime_LED) == 0)
            {
                LED->Status = 0;
            }
        }break;
    }
}
void LED_Run(void)
{
    LED_Twinkle(&LED1,100);
    LED_Twinkle(&LED2,500);
    LED_Twinkle(&LED3,1000);
}
void Task_1mS(void)
{
    DelayTimeCount_ms(&LED1.DelayTime_LED);
    DelayTimeCount_ms(&LED2.DelayTime_LED);
    DelayTimeCount_ms(&LED3.DelayTime_LED);
}

至此,我們就實現(xiàn)了三個LED的分別控制。



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:446156 發(fā)表于 2025-3-10 11:08 | 只看該作者
注意LED(ON)屬于形式代碼,對于stm32來說可能是HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET);或者PAout(15) = 0;對于51單片機來說可能是P1^0 = 0;
回復(fù)

使用道具 舉報

板凳
ID:33522 發(fā)表于 2025-3-12 07:58 | 只看該作者
雖然看不懂,但是得先點贊
回復(fù)

使用道具 舉報

地板
ID:446156 發(fā)表于 2025-3-12 16:46 | 只看該作者
wwzgch 發(fā)表于 2025-3-12 07:58
雖然看不懂,但是得先點贊

我步子邁大啦?
回復(fù)

使用道具 舉報

5#
ID:33522 發(fā)表于 2025-3-12 21:41 | 只看該作者

是我這理解能力有待進步,平時都是用8位機。都是簡單的寫法,向群主學(xué)習(xí)
回復(fù)

使用道具 舉報

6#
ID:118322 發(fā)表于 2025-3-13 09:05 | 只看該作者
間下AI怎么寫
回復(fù)

使用道具 舉報

7#
ID:446156 發(fā)表于 2025-3-13 10:06 | 只看該作者
wwzgch 發(fā)表于 2025-3-12 21:41
是我這理解能力有待進步,平時都是用8位機。都是簡單的寫法,向群主學(xué)習(xí)

我回復(fù)你之后,你的頁面右上角頭像左邊那里會有提醒嗎
回復(fù)

使用道具 舉報

8#
ID:446156 發(fā)表于 2025-3-13 16:06 | 只看該作者
大家可以把我上邊的代碼復(fù)制到deepseek,NNT的比我解釋的都好
回復(fù)

使用道具 舉報

9#
ID:446156 發(fā)表于 2025-3-13 16:22 | 只看該作者
我并沒有系統(tǒng)學(xué)習(xí)過面向?qū)ο缶幊蹋皇窃诠ぷ髦薪?jīng)常遇到很多重復(fù)功能,比如有好多個DS18B20接口(獨立總線),有好多個同型號的IIC設(shè)備(獨立總線),有好多個PID控制器等等。經(jīng)過不斷摸索不斷嘗試,發(fā)現(xiàn)這種編寫代碼的方法最高效最易讀最易維護,直到后來我才知道原來我這種寫作方法就是面向?qū)ο蟆顟B(tài)機+面向?qū)ο罂梢允构ぷ魈貏e高效,我現(xiàn)在連操作系統(tǒng)都看不上(項目沒那么復(fù)雜)。希望初學(xué)者不要像我一樣多走好幾年彎路,提早走向面向?qū)ο缶幊痰膽驯А?/td>
回復(fù)

使用道具 舉報

10#
ID:33522 發(fā)表于 2025-3-13 18:49 | 只看該作者
qinlu123 發(fā)表于 2025-3-13 10:06
我回復(fù)你之后,你的頁面右上角頭像左邊那里會有提醒嗎

消息里面會有提醒,平時我登陸這個網(wǎng)站不多
回復(fù)

使用道具 舉報

11#
ID:446156 發(fā)表于 2025-3-14 07:54 | 只看該作者
發(fā)表于 2025-3-13 18:49
消息里面會有提醒,平時我登陸這個網(wǎng)站不多

@admin為啥我沒有提醒
回復(fù)

使用道具 舉報

12#
ID:33522 發(fā)表于 2025-3-14 10:51 | 只看該作者
qinlu123 發(fā)表于 2025-3-13 16:22
我并沒有系統(tǒng)學(xué)習(xí)過面向?qū)ο缶幊蹋皇窃诠ぷ髦薪?jīng)常遇到很多重復(fù)功能,比如有好多個DS18B20接口(獨立總線 ...

是的,不想被淘汰就要不斷的學(xué)習(xí)新的編程思想和技巧。樓主平時都用什么MCU做方案
回復(fù)

使用道具 舉報

13#
ID:624769 發(fā)表于 2025-3-14 23:35 | 只看該作者
標(biāo)題和內(nèi)容不符,
標(biāo)題是: 關(guān)于如何提高代碼的執(zhí)行效率
而實際是: 反而降低了執(zhí)行效率
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
久久9999久久免费精品国产| 手机福利视频欧美| 在线观看日本黄色| 玩弄中年熟妇正在播放| 国产精品你懂的在线欣赏| 日韩免费看片| 日本免费在线一区| 在线观看国产原创自拍视频| 在线观看的黄色网址| 自拍偷拍第八页| 岛国片在线免费观看| 久久婷婷国产91天堂综合精品| 国产精品视频在线免费观看| 欧美日韩国产91| 欧美一区二区啪啪| 亚洲黄色录像片| 国产一区二区三区高清播放| 欧美日韩国产探花| 免费福利视频一区| 香蕉成人影院| 超碰在线网址| 在线观看的av网站| 成年人免费影院| ㊣最新国产の精品bt7086| 中文字幕一区二区人妻痴汉电车| 国产伦精品一区二区三区视频女| 中文字幕 欧美日韩| 波多野结衣 作品| 国产欧美丝袜| 国产精品91在线观看| 久久成人一区二区| 亚洲天堂男人天堂| 欧美xxx久久| 欧美午夜精品一区二区三区| 一区二区欧美精品| 久久久99久久精品欧美| 韩国欧美国产1区| 午夜亚洲激情| 亚洲精彩视频| 久草在线成人| 波多野结衣一区二区三区免费视频| 爱情岛亚洲播放路线| 国产精品久久久久一区二区国产| 1pon在线| ed2k情侣啪啪91av| 午夜国产精品理论片久久影院| 国产裸体无遮挡| 少妇又紧又色又爽又刺激视频 | 欧美国产日本| 欧美日韩精品一区二区视频| 久久精品亚洲成在人线av网址| 成人精品国产亚洲| 性欧美1819sex性高清| 狠狠操一区二区三区| 18视频在线观看网站| 日本中文字幕电影在线免费观看| 尤物视频在线观看| 亚洲欧洲动漫| 亚洲综合图片| 在线的色视频| 飘雪影院手机免费高清版在线观看 | 毛片电影在线| 黄在线免费看| 免费网站黄在线观看| 淫片在线观看| 麻豆电影在线播放| caopo在线| 成人av影院在线观看| 91禁在线看| 中文不卡1区2区3区| 国产美女精品写真福利视频| 色老头在线一区二区三区| 三级在线观看视频| 成人做爰免费视频免费看| 欧美黑粗硬大| 99国产精品免费网站| 国产在线播放精品| 在线日本制服中文欧美| 成人同人动漫免费观看| 91精品一区二区三区综合在线爱| 婷婷综合五月| 国产欧美日韩亚洲一区二区三区| 日韩精品一级中文字幕精品视频免费观看 | 亚洲二区在线观看| 欧美网站在线观看| 欧美日韩国产美女| 亚洲国产精品va| 一区二区成人精品| 久久久久久久久久久人体| 国产精品7m视频| 999日本视频| 神马影院一区二区| 免费拍拍拍网站| 亚洲欧美在线精品| 黄色片视频免费观看| 超碰人人干人人| 国产成人啪精品午夜在线观看| 无码人妻熟妇av又粗又大| 国产黄色小视频在线观看| 99久久亚洲| 九色视频九色自拍| 亚洲精品无码专区在线播放| 国产福利在线播放麻豆| 色是在线视频| 99香蕉久久| 91精品国产91久久久久久密臀| 亚洲作爱视频| 国产成人啪免费观看软件 | 欧美一区影院| 久久国产精品无码网站| 久久精品一二三| 欧美日韩另类在线| 亚洲精品国精品久久99热一| 欧美激情久久久久久| 国产人妖伪娘一区91| 亚洲二区三区四区| 在线免费观看av的网站| 手机看片福利视频| 做爰视频毛片视频| 精品国产福利一区二区在线| 一本大道香蕉久久| xxx在线免费观看| 欧美大片网址| 久久久久国内| 欧美国产在线观看| 欧美丰满一区二区免费视频 | 欧美日韩怡红院| 欧美xxxx精品| 国产成人a人亚洲精品无码| 国产xxx免费观看| 在线播放网站| 日韩大片欧美大片| 91综合久久| 丁香亚洲综合激情啪啪综合| 性欧美大战久久久久久久久| 日韩黄在线观看| 国产中文欧美精品| 国产96在线 | 亚洲| 国产激情在线免费观看| 中文字幕乱伦视频| 蜜桃传媒入口| 欧美人与性动交α欧美精品图片| 动漫视频在线一区| 美国欧美日韩国产在线播放| 亚洲国产精品久久人人爱蜜臀| 亚洲无限av看| 国产专区一区二区| 日韩av加勒比| 超碰在线97观看| xxxxx性13一14| 青草在线视频| 色婷婷色综合| 国产午夜精品一区二区三区四区| 日韩欧美成人一区| 国产欧美一区二区三区久久| 国产a级一级片| 久操视频免费在线观看| 一本久久精品| 精品麻豆一区二区三区| 国产日产精品一区二区三区四区的观看方式 | 91国产丝袜播放在线| 国产亚洲精品午夜高清影院| 在线视频婷婷| 亚洲第一二三区| 高清在线成人网| 日韩精品最新网址| 91久久精品www人人做人人爽| 无码人妻精品一区二区三区66| 日操夜操天天操| 俺去啦最新地址| 625成人欧美午夜电影| 午夜日韩激情| 夜夜嗨av一区二区三区网页| 日韩在线观看免费高清完整版| 色涩成人影视在线播放| 色噜噜日韩精品欧美一区二区| 天堂网av在线播放| 成人午夜电影在线观看| 色婷婷亚洲mv天堂mv在影片| 国产精品福利影院| 欧美超级免费视 在线| 亚洲一区二区自拍偷拍| 蜜桃av.com| 偷拍国模大尺度视频在线播放| 人人草在线视频| 亚洲影音先锋| 91国产精品成人| 成人激情综合网| 日本性生活一级片| 人xxxx性xxxxx欧美| 阿v视频在线| 日韩福利电影在线| 欧美一区二区三区婷婷月色| 国产不卡一区二区三区在线观看| 在线观看av中文字幕| 亚洲国产日韩在线人成电影| 成人免费观看在线观看| 日本不卡123| 精品国产1区二区| 少妇精品久久久久久久久久| 国模无码国产精品视频| 免费人成网ww777kkk手机| 91精品国产自产观看在线| 成人动漫在线一区| 色yeye香蕉凹凸一区二区av| 精品丰满人妻无套内射| 国产又大又黄又爽| 欧美jizz18性欧美| 羞羞答答国产精品www一本| 欧美美女视频在线观看| 麻豆一区区三区四区产品精品蜜桃| 少妇视频一区二区| bt电影在线| 99精品美女| 91久久奴性调教| 蜜桃传媒视频麻豆一区 | 免费黄色一级网站| 人妻丰满熟妇av无码区hd| 国精一区二区三区| 韩国女主播成人在线观看| 夜夜嗨av色一区二区不卡| 成人免费在线网| 国产 日韩 欧美 综合| 麻豆mv在线看| 26uuu成人网一区二区三区| 欧美大成色www永久网站婷| 粉色视频免费看| 久久综合精品视频| 欧美黄色一级| 亚洲精品高清视频在线观看| 国产精品精品一区二区三区午夜版 | 亚洲综合在线免费| 久草综合在线| 亚洲欧美在线视频观看| 国产综合香蕉五月婷在线| 少妇视频一区二区| 96久久久久久| 一区二区三区四区五区在线| 精品国产免费人成电影在线观看四季| 欧美人与动牲交xxxxbbbb| 国产色综合视频| 55av亚洲| 国产日韩三级在线| 国产男人精品视频| 久草视频免费播放| av电影在线观看网址| 韩国视频一区二区| 欧美激情亚洲视频| 蜜臀av一区二区三区有限公司| 成人免费视频77777| 欧美va亚洲va日韩∨a综合色| 欧美日韩国产成人在线免费| 男人的天堂视频在线| 无码国产精品一区二区免费16 | 在线免费国产视频| 日韩精品福利网| 久久精品2019中文字幕| 香蕉视频1024| 成人三级av| 在线亚洲免费| 久久天天躁日日躁| 中文字幕高清视频| 在线观看免费国产小视频| 麻豆精品视频在线| 欧美一区二区.| 青青草手机在线视频| 韩国中文字幕在线| 91丨九色丨蝌蚪富婆spa| 国产日韩欧美另类| 99久久久久久久久| se01亚洲视频| 黑人与娇小精品av专区| 一区二区三区免费看| 亚洲大香人伊一本线| 色橹橹欧美在线观看视频高清| 538在线一区二区精品国产| www.亚洲天堂网| h视频在线看| 久久夜色精品| 26uuu国产精品视频| 青青草国产在线观看| 免费毛片在线看片免费丝瓜视频 | 91精品国产综合久久久久久丝袜 | 日韩欧美一二三| 欧美 日韩 国产 激情| jizzjizz在线| 日本成人中文字幕在线视频| 91干在线观看| 欧美a视频在线观看| 国产91在线播放精品| 欧美在线观看禁18| 一本久道中文无码字幕av| 2020国内自拍视频| 秋霞成人午夜伦在线观看| 国产成人精品综合久久久| 久草视频一区二区| 欧美日本三级| 亚洲国产精品免费| 精品黑人一区二区三区观看时间| 成人av毛片| 成人欧美一区二区三区| 99热一区二区三区| 天堂免费视频| 秋霞电影网一区二区| 91久久精品国产| 免费av一级片| 五月综合激情| 国语对白做受69| 无码人妻精品一区二区三区蜜桃91 | 污污美女网站| 噜噜噜在线观看免费视频日韩| 国产99久久久欧美黑人| 中文字幕日韩国产| 色一色在线观看视频网站| 自拍偷拍欧美专区| 欧美激情精品久久久久久蜜臀| 午夜影院在线看| 欧一区二区三区| 亚洲人成亚洲人成在线观看| 在线观看黄网址| 欧美日韩免费观看视频| 51午夜精品国产| 玖玖爱在线观看| 韩日毛片在线观看| 欧美日本在线一区| 欧美亚一区二区三区| 成人片免费看| 精品久久免费看| 最新日韩免费视频| 久久91视频| 亚洲天堂av女优| 圆产精品久久久久久久久久久| 在线一区二区三区视频| 色综久久综合桃花网| 国产精品视频一区在线观看| 久久久久观看| 欧美日韩第一页| 国产美女自慰在线观看| 欧美日本中文| 亚洲最大av在线| www.91| 97精品国产97久久久久久久久久久久| 在线看成人av电影| 免费看的毛片| 亚洲精品五月天| 欧美色图校园春色| 色偷偷偷在线视频播放| 国产午夜精品麻豆| 4438国产精品一区二区| 99久久精品网| 91精品国产高清久久久久久91裸体 | 久久久久9999| 99精品国自产在线| 伊人久久综合97精品| 天天干,天天干| 91中文字幕精品永久在线| 国产精品都在这里| 小早川怜子痴女在线精品视频| 国产精品一区二区久久精品爱涩| av磁力番号网| 免费黄色在线视频网站| 欧美在线观看视频一区二区| 美国黄色特级片| 欧美调教在线| 日本欧美中文字幕| 国内精品女同女同一区二区三区| 国产91精品欧美| 日本三级免费观看| a级片免费在线观看| 亚洲欧美一区二区三区情侣bbw| 一级黄色av片| 亚洲激情精品| 亚洲欧美日韩国产yyy| 伊人75在线| 欧美军同video69gay| 久久亚洲AV无码| 欧美在线亚洲| 欧美性天天影院| 在线一级观看| 欧美人与禽zozo性伦| 国产无码精品视频| 国内精品福利| 亚洲欧洲免费无码| av中文字幕一区二区三区| 欧美成人女星排名| 超碰在线免费97| 日韩精品免费专区| 男女私大尺度视频| 国产调教在线| 欧美成人性生活| 欧美色婷婷天堂网站| 成人直播大秀| av在线亚洲男人的天堂| 免费观看a级片| 日韩黄色大片网站| 精品国产一区二区三区麻豆小说 | 国产精品福利在线观看网址| 天堂入口网站| 一区二区三区免费| 夫妇交换中文字幕|