国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

一文看懂嵌入式單片機程序架構之順序結構

電子工程師 ? 2018-04-15 11:39 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

時間片輪詢法,在很多書籍中有提到,而且有很多時候都是與操作系統一起出現,也就是說很多時候是操作系統中使用了這一方法。不過我們這里要說的這個時間片輪詢法并不是掛在操作系統下,而是在前后臺程序中使用此法。也是本貼要詳細說明和介紹的方法。

對于時間片輪詢法,雖然有不少書籍都有介紹,但大多說得并不系統,只是提提概念而已。下面本人將詳細介紹本人模式,并參考別人的代碼建立的一個時間片輪詢架構程序的方法,我想將給初學者有一定的借鑒性。

記得在前不久本人發帖《1個定時器多處復用的問題》,由于時間的問題,并沒有詳細說明怎樣實現1個定時器多處復用。在這里我們先介紹一下定時器的復用功能。。。

使用1個定時器,可以是任意的定時器,這里不做特殊說明,下面假設有3個任務,那么我們應該做如下工作:

1. 初始化定時器,這里假設定時器的定時中斷為1ms(當然你可以改成10ms,這個和操作系統一樣,中斷過于頻繁效率就低,中斷太長,實時性差)。

2. 定義一個數值:

復制內容到剪貼板

代碼:

#define TASK_NUM(3)//這里定義的任務數為3,表示有三個任務會使用此定時器定時。

uint16 TaskCount[TASK_NUM];//這里為三個任務定義三個變量來存放定時值

uint8TaskMark[TASK_NUM];//同樣對應三個標志位,為0表示時間沒到,為1表示定時時間到。

3. 在定時器中斷服務函數中添加:

復制內容到剪貼板

代碼:


void TimerInterrupt(void)
{
uint8 i;

for (i=0; i
{
if (TaskCount[i])
{
TaskCount[i]--;
if (TaskCount[i] == 0)
{
TaskMark[i] = 0x01;
}
}
}
}

代碼解釋:定時中斷服務函數,在中斷中逐個判斷,如果定時值為0了,表示沒有使用此定時器或此定時器已經完成定時,不著處理。否則定時器減一,知道為零時,相應標志位值1,表示此任務的定時值到了。

4. 在我們的應用程序中,在需要的應用定時的地方添加如下代碼,下面就以任務1為例:

復制內容到剪貼板

代碼:

TaskCount[0] = 20;// 延時20ms

TaskMark[0]= 0x00;// 啟動此任務的定時器

到此我們只需要在任務中判斷TaskMark[0]是否為0x01即可。其他任務添加相同,至此一個定時器的復用問題就實現了。用需要的朋友可以試試,效果不錯哦。。。。。。。。。。。

通過上面對1個定時器的復用我們可以看出,在等待一個定時的到來的同時我們可以循環判斷標志位,同時也可以去執行其他函數。

循環判斷標志位:

那么我們可以想想,如果循環判斷標志位,是不是就和上面介紹的順序執行程序是一樣的呢?一個大循環,只是這個延時比普通的for循環精確一些,可以實現精確延時。

執行其他函數:

那么如果我們在一個函數延時的時候去執行其他函數,充分利用CPU時間,是不是和操作系統有些類似了呢?但是操作系統的任務管理和切換是非常復雜的。下面我們就將利用此方法架構一直新的應用程序。

時間片輪詢法的架構:

1.設計一個結構體:

代碼:

//任務結構

typedefstruct_TASK_COMPONENTS

{

uint8Run;//程序運行標記:0-不運行,1運行

uint8Timer;//計時器

uint8ItvTime;//任務運行間隔時間

void(*TaskHook)(void);//要運行的任務函數

}TASK_COMPONENTS;//任務定義

這個結構體的設計非常重要,一個用4個參數,注釋說的非常詳細,這里不在描述。

2. 任務運行標志出來,此函數就相當于中斷服務函數,需要在定時器的中斷服務函數中調用此函數,這里獨立出來,并于移植和理解。

代碼:

voidTaskRemarks(void)

{

uint8i;

for(i=0;i//逐個任務時間處理

{

if(TaskComps[i].Timer)//時間不為0

{

TaskComps[i].Timer--;//減去一個節拍

if(TaskComps[i].Timer==0)//時間減完了

{

TaskComps[i].Timer=TaskComps[i].ItvTime;//恢復計時器值,從新下一次

TaskComps[i].Run=1;//任務可以運行

}

}

}

}


大家認真對比一下次函數,和上面定時復用的函數是不是一樣的呢?

3. 任務處理

代碼:

voidTaskProcess(void)

{

uint8i;

for(i=0;i//逐個任務時間處理

{

if(TaskComps[i].Run)//時間不為0

{

TaskComps[i].TaskHook();//運行任務

TaskComps[i].Run=0;//標志清0

}

}

}

此函數就是判斷什么時候該執行那一個任務了,實現任務的管理操作,應用者只需要在main()函數中調用此函數就可以了,并不需要去分別調用和處理任務函數。

到此,一個時間片輪詢應用程序的架構就建好了,大家看看是不是非常簡單呢?此架構只需要兩個函數,一個結構體,為了應用方面下面將再建立一個枚舉型變量。

下面我就就說說怎樣應用吧,假設我們有三個任務:時鐘顯示,按鍵掃描,和工作狀態顯示。

1. 定義一個上面定義的那種結構體變量

代碼:

staticTASK_COMPONENTSTaskComps[]=

{

{0,60,60,TaskDisplayClock},//顯示時鐘

{0,20,20,TaskKeySan},//按鍵掃描

{0,30,30,TaskDispStatus},//顯示工作狀態

//這里添加你的任務。。。。

};

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6076

    文章

    45501

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    嵌入式單片機開發學習路徑

    嵌入式系統是現代科技的重要組成部分,廣泛應用于智能家居、汽車電子、工業控制、醫療設備等領域。學習嵌入式單片機開發不僅能提升個人技能,還能開拓職業發展路徑。本文將為你提供條詳細的
    發表于 02-09 15:42

    如何入門單片機/嵌入式

    學的單片機,本科玩了幾年嵌入式,做過智能家居,智能小車,示波器,開關電源等等,后來工作(本人芯片行業)以后就沒搞了,但是這段時間積累的經驗,可以讓整個職業生涯受益。 單片機相對來
    發表于 02-02 06:57

    arm嵌入式主板優缺點

    。   二、強大的擴展功能和網絡傳輸功能:隨著更多的行業開始使用到嵌入式主板,導致市場對主板功能的要求的差異化越來越大。嵌入式主板ARM的出現,恰恰滿足了這個個性化的需求。從擴展性上來講,8位單片機的擴展
    發表于 01-08 07:08

    個面向單片機、事件驅動的嵌入式開發平臺介紹

    EventOS,是個面向單片機、事件驅動的嵌入式開發平臺。它主要有兩大技術特色:是事件驅動,二是超輕量。EventOS以及其母項目EventOS,目標是開發
    發表于 12-05 06:26

    分享嵌入式開發學習路線

    法,這些語法在嵌入式開發中至關重要。 2. 技能進階期(2-3個月) 從51單片機過渡到主流的ARM Cortex-M系列(嵌入式就業核心平臺),學會使用STM32單片機,掌握
    發表于 12-04 11:01

    嵌入式單片機定義及區別

    ,我們將深入探討這些不同類型的嵌入式處理器的定義、特性及其在各種應用領域中的作用。 我們的單片機,即嵌入式微控制器MCU,是種高度集成的電子器件。它內部融合了ROM/RAM、總線邏
    發表于 11-17 08:11

    單片機嵌入式,到底是什么關系?

    很多人初次接觸嵌入式開發時,都會聽到句話:“嵌入式其實就是單片機。”可當你真正開始學習時,會發現嵌入式
    的頭像 發表于 11-14 10:28 ?1553次閱讀
    <b class='flag-5'>單片機</b>和<b class='flag-5'>嵌入式</b>,到底是什么關系?

    嵌入式達到什么水平才能就業?

    搭建開發環境并解決依賴包沖突熟悉計算機組成原理核心知識點:能說清 CPU 架構、內存尋址、IO 映射的基本原理,能看懂簡單的硬件電路圖 (二)實操要求能獨立完成 51/STM32 單片機項目開發
    發表于 09-15 10:20

    嵌入式從入門到進階,怎么學?

    、位操作(直接決定代碼效率),通過 串口通信程序 練手(如單片機與 PC 數據互傳)。 硬件基礎懂數電模電(邏輯門、放大電路)、常用元件(電阻 / 電容 / 三極管),能看懂 51 單片機
    發表于 09-02 09:44

    飛凌嵌入式RK3576多模態大模型圖像理解助手,讓嵌入式設備“看懂”世界

    (LLM)+視覺語言模型(VLM)多模態架構,推出多模態大模型圖像理解助手,為嵌入式設備打造 “智能視覺中樞”,讓終端設備能夠真正 “看懂” 復雜的世界 。
    的頭像 發表于 07-25 11:09 ?1686次閱讀
    飛凌<b class='flag-5'>嵌入式</b>RK3576多模態大模型圖像理解助手,讓<b class='flag-5'>嵌入式</b>設備“<b class='flag-5'>看懂</b>”世界

    嵌入式單片機,是同個東西嗎?

    程序控制各種外部設備,完成特定的操作。 總結來說,單片機嵌入式系統中的種重要硬件組件,而嵌入式系統則是
    發表于 07-09 10:20

    Linux嵌入式單片機嵌入式的區別?

    :使用Linux操作系統,可以運行各種復雜的應用程序和驅動程序。 4. 資源需求 : 單片機嵌入式 :對硬件資源的需求較低,通常只需要
    發表于 06-20 09:46

    嵌入式單片機在電機控制系統中的應用

    有效提升電機控制系統的性能,這也是建立高速實時電機控制系統的前提。 純分享帖,需要者可點擊附件免費獲取完整資料~~~*附件:嵌入式單片機在電機控制系統中的應用.pdf【免責聲明】本文系網絡轉載,版權歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權問題,請第
    發表于 06-11 15:07

    看懂嵌入式與壁掛工控安裝方式的關鍵差異

    技術人員根據實際需求,制定出科學合理的安裝方案。 、安裝前期規劃差異 (嵌入式工控 嵌入式工控
    的頭像 發表于 05-14 14:40 ?1025次閱讀

    嵌入式單片機的區別?簡單明了的給你講透兩者的技術本質!

    上周有個做智能硬件創業的朋友問我:"我們產品用的是STM32單片機,但方案商總說要做嵌入式系統,這兩者到底有啥區別?"這個問題其實戳中了大多數電子工程師的認知盲區。作為深耕物聯網
    的頭像 發表于 04-21 16:10 ?2876次閱讀
    <b class='flag-5'>嵌入式</b>和<b class='flag-5'>單片機</b>的區別?<b class='flag-5'>一</b><b class='flag-5'>文</b>簡單明了的給你講透兩者的技術本質!