女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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},//顯示工作狀態

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

};

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

    關注

    6067

    文章

    44988

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

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

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

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

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

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

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

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

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

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

    【入門必看】從菜鳥到大牛,嵌入式系統完整學習路線!看這篇就夠了!

    ?嵌入式Linux”的順序幫助您從入門到進階,掌握嵌入式開發的精髓。第階段單片機單片機
    的頭像 發表于 02-20 10:53 ?2320次閱讀
    【入門必看】從菜鳥到大牛,<b class='flag-5'>嵌入式</b>系統完整學習路線!看這篇就夠了!

    單片機嵌入式系統的區別

    在現代電子技術領域,單片機嵌入式系統是兩個經常被提及的術語。它們在許多應用中發揮著關鍵作用,如智能家居、工業自動化、汽車電子等。盡管這兩個概念經常被交替使用,但它們之間存在些基本的區別。
    的頭像 發表于 11-01 14:09 ?1849次閱讀

    單片機怎么寫入程序

    單片機(Microcontroller Unit,MCU)是種集成電路芯片,它將計算機的CPU、存儲器、輸入/輸出接口等功能集成在個芯片上。單片機廣泛應用于
    的頭像 發表于 10-21 11:21 ?2410次閱讀

    【「嵌入式Hypervisor:架構、原理與應用」閱讀體驗】+ 了解Hypervisor

    正值舉國歡度國慶佳節之際,我收到了《嵌入式Hypervisor:架構、原理與應用》書,在此感謝電子發燒友論壇!當初申請評測此書之時,我根本就不知道這個Hypervisor是什么,只是看到有
    發表于 10-13 16:47

    目前深圳嵌入式單片機就業環境如何?

    深圳作為中國的科技創新中心之,在嵌入式單片機領域的就業環境相對較好,以下是對該就業環境的詳細分析:
    的頭像 發表于 10-09 11:51 ?1217次閱讀
    目前深圳<b class='flag-5'>嵌入式</b><b class='flag-5'>單片機</b>就業環境如何?

    8位單片機為何不會被高端單片機取代?

    、功耗小、易于使用和編程、適用于小型系統和嵌入式應用等。 8位單片機廣泛應用于各種領域,如家用電器、汽車電子、醫療設備、工業自動化、通信設備等。在嵌入式系統和物聯網領域,8位單片機
    發表于 09-24 16:51

    嵌入式系統的體系結構包括哪些

    嵌入式系統的體系結構通常是個復雜而精細的架構,旨在滿足特定應用需求,同時兼顧系統的可靠性、效率、成本和體積等多方面因素。以下是對嵌入式系統
    的頭像 發表于 09-02 15:25 ?3043次閱讀

    讀懂什么單片機:組成結構與應用

    歡迎來到單片機的世界,這是種微小(但功能強大)的設備,改變了嵌入式系統的面貌。在本文中,您將了解單片機些基本知識、
    的頭像 發表于 08-09 11:49 ?2400次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b>讀懂什么<b class='flag-5'>單片機</b>:組成<b class='flag-5'>結構</b>與應用

    講解單片機、ARM、MCU、DSP、FPGA、嵌入式錯綜復雜的關系!

    不需要的部分裁去。所以嵌入式系統般都具有便攜、低功耗、性能單等特性。 然后,MCU、DSP、FPGA這些都屬于嵌入式系統的范疇,是為了實現某
    發表于 08-06 17:33

    從菜鳥到大牛!嵌入式完整學習路線:STM32單片機-RTOS-Linux

    ?嵌入式linux”的順序幫助您從入門到進階,掌握嵌入式開發的精髓。第階段單片機單片機
    的頭像 發表于 07-23 16:11 ?6488次閱讀
    從菜鳥到大牛!<b class='flag-5'>嵌入式</b>完整學習路線:STM32<b class='flag-5'>單片機</b>-RTOS-Linux