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

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

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

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

一文看懂嵌入式單片機程序架構(gòu)之順序結(jié)構(gòu)

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

掃碼添加小助手

加入工程師交流群

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

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

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

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

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

2. 定義一個數(shù)值:

復(fù)制內(nèi)容到剪貼板

代碼:

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

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

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

3. 在定時器中斷服務(wù)函數(shù)中添加:

復(fù)制內(nèi)容到剪貼板

代碼:


void TimerInterrupt(void)
{
uint8 i;

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

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

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

復(fù)制內(nèi)容到剪貼板

代碼:

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

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

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

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

循環(huán)判斷標志位:

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

執(zhí)行其他函數(shù):

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

時間片輪詢法的架構(gòu):

1.設(shè)計一個結(jié)構(gòu)體:

代碼:

//任務(wù)結(jié)構(gòu)

typedefstruct_TASK_COMPONENTS

{

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

uint8Timer;//計時器

uint8ItvTime;//任務(wù)運行間隔時間

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

}TASK_COMPONENTS;//任務(wù)定義

這個結(jié)構(gòu)體的設(shè)計非常重要,一個用4個參數(shù),注釋說的非常詳細,這里不在描述。

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

代碼:

voidTaskRemarks(void)

{

uint8i;

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

{

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

{

TaskComps[i].Timer--;//減去一個節(jié)拍

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

{

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

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

}

}

}

}


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

3. 任務(wù)處理

代碼:

voidTaskProcess(void)

{

uint8i;

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

{

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

{

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

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

}

}

}

此函數(shù)就是判斷什么時候該執(zhí)行那一個任務(wù)了,實現(xiàn)任務(wù)的管理操作,應(yīng)用者只需要在main()函數(shù)中調(diào)用此函數(shù)就可以了,并不需要去分別調(diào)用和處理任務(wù)函數(shù)。

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

下面我就就說說怎樣應(yīng)用吧,假設(shè)我們有三個任務(wù):時鐘顯示,按鍵掃描,和工作狀態(tài)顯示。

1. 定義一個上面定義的那種結(jié)構(gòu)體變量

代碼:

staticTASK_COMPONENTSTaskComps[]=

{

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

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

{0,30,30,TaskDispStatus},//顯示工作狀態(tài)

//這里添加你的任務(wù)。。。。

};

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

    關(guān)注

    6067

    文章

    44992

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

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

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

    Linux嵌入式單片機嵌入式的區(qū)別?

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

    嵌入式單片機在電機控制系統(tǒng)中的應(yīng)用

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

    看懂嵌入式與壁掛工控安裝方式的關(guān)鍵差異

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

    嵌入式單片機的區(qū)別?簡單明了的給你講透兩者的技術(shù)本質(zhì)!

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

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

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

    單片機嵌入式系統(tǒng)的區(qū)別

    在現(xiàn)代電子技術(shù)領(lǐng)域,單片機嵌入式系統(tǒng)是兩個經(jīng)常被提及的術(shù)語。它們在許多應(yīng)用中發(fā)揮著關(guān)鍵作用,如智能家居、工業(yè)自動化、汽車電子等。盡管這兩個概念經(jīng)常被交替使用,但它們之間存在些基本的區(qū)別。
    的頭像 發(fā)表于 11-01 14:09 ?1861次閱讀

    單片機怎么寫入程序

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

    【「嵌入式Hypervisor:架構(gòu)、原理與應(yīng)用」閱讀體驗】+ 了解Hypervisor

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

    目前深圳嵌入式單片機就業(yè)環(huán)境如何?

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

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

    、功耗小、易于使用和編程、適用于小型系統(tǒng)和嵌入式應(yīng)用等。 8位單片機廣泛應(yīng)用于各種領(lǐng)域,如家用電器、汽車電子、醫(yī)療設(shè)備、工業(yè)自動化、通信設(shè)備等。在嵌入式系統(tǒng)和物聯(lián)網(wǎng)領(lǐng)域,8位單片機
    發(fā)表于 09-24 16:51

    嵌入式系統(tǒng)的體系結(jié)構(gòu)包括哪些

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

    讀懂什么單片機:組成結(jié)構(gòu)與應(yīng)用

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

    講解單片機、ARM、MCU、DSP、FPGA、嵌入式錯綜復(fù)雜的關(guān)系!

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

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

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