<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 牛人業(yè)話(huà) > 還在用延時(shí)函數嗎——那你就out了

還在用延時(shí)函數嗎——那你就out了

作者:antonine 時(shí)間:2014-02-25 來(lái)源:電子產(chǎn)品世界 收藏

  就像每一個(gè)開(kāi)始學(xué)習編程語(yǔ)言的人寫(xiě)的第一個(gè)程序都是“Hello World!”一樣,幾乎每一個(gè)學(xué)習單片機的同學(xué)接觸到的第一個(gè)程序都是點(diǎn)燈程序,幾乎每一本介紹單片機學(xué)習的教材也都是從這樣一個(gè)程序開(kāi)始,幾乎每一個(gè)工程師學(xué)習一類(lèi)新的單片機時(shí)也是從這個(gè)程序開(kāi)始的。如下圖所示,就是一個(gè)典型的單片機點(diǎn)燈程序的框架,LED以一秒為周期循環(huán)閃爍下去。還有很多以此程序拓展開(kāi)來(lái)的,如流水燈,呼吸燈等等。

本文引用地址:http://dyxdggzs.com/article/233787.htm

  結構簡(jiǎn)單,條理清晰,這個(gè)程序作為單片機初學(xué)者或者初學(xué)一類(lèi)單片機來(lái)說(shuō),無(wú)疑是非常好的,但在實(shí)際使用過(guò)程中使用這樣的,程序的執行效率肯定不會(huì )很高,程序99%以上的時(shí)間都在忙著(zhù)空轉。

  那么,我們怎樣才能將這些無(wú)用功節省掉,把浪費掉的時(shí)候收回來(lái)做一些有益的事情呢?下面是筆者的一些思路。

  一、前后臺程序

  前后臺模式的程序是大家最常用到的,也是最簡(jiǎn)單的嵌入式程序架構。它分為前臺程序和后臺程序。應用程序采用一個(gè)無(wú)限循環(huán),在循環(huán)中調用相應和函數,來(lái)完成相應的操作,這部分程序可看作是后臺行為。前臺程序通過(guò)中斷來(lái)實(shí)現,即中斷服務(wù)程序。一般情況下,后臺程序也叫任務(wù)級程序,前臺程序也叫事件處理級程序。

  前后臺程序也可以與程序調度相結合,在程序運行時(shí),后臺程序檢查每個(gè)任務(wù)是否具備運行條件,通過(guò)一定的調度算法來(lái)完成相應的操作。對于實(shí)時(shí)性要求特別嚴格的操作通常由中斷來(lái)完成,僅在中斷服務(wù)程序中標記事件的發(fā)生,不再做任何工作就退出中斷,經(jīng)過(guò)后臺程序的調度,轉由前臺程序完成事件的處理,這樣就不會(huì )造成在中斷服務(wù)程序中處理費時(shí)的事件而影響后續和其他中斷。

  二、

  是軟件領(lǐng)域中的一個(gè)重要概念,在嵌入式裸機編程中,的地位尤其重要。幾乎所有的嵌入式任務(wù)都可以被看做狀態(tài)機來(lái)處理。比如一個(gè)按鍵處理過(guò)程,可以看做一個(gè)狀態(tài)機,一個(gè)細小的擊鍵動(dòng)作包含了:釋放、抖動(dòng)、閉合、抖動(dòng)和重新釋放等狀態(tài),每個(gè)狀態(tài)對應不同的處理程序,狀態(tài)切換可以通過(guò)每隔一段時(shí)間()去檢查按鍵狀態(tài)來(lái)實(shí)現。每個(gè)狀態(tài)之間的時(shí)間間隔可以去處理其他任務(wù),而不必采用函數來(lái)等待下一個(gè)狀態(tài)的到來(lái)。

  三、合作式調度器

  調度器,一方面可以看作一個(gè)簡(jiǎn)單的操作系統,允許以周期性或(很少地)單次方式來(lái)調用任務(wù)。另一方面,從底層來(lái)看,調度器可以看作是一個(gè)由許多不同任務(wù)共享的中斷服務(wù)程序,多個(gè)不同的任務(wù),可以使用同一個(gè)調度器來(lái)調度完成。調度器主要分了兩大類(lèi):合作式調度器和搶占式調度器。

  合作式調度器是一種單任務(wù)的系統結構,在任一時(shí)刻只有一個(gè)任務(wù)是活動(dòng)的,直到這一任務(wù)運行完成之后,調度器控制調用下一個(gè)任務(wù)。在合作式調度器中,任務(wù)在特定的時(shí)刻被調度運行;當一個(gè)任務(wù)需要運行時(shí),會(huì )被添加到等待隊列;當CPU空閑時(shí),運行等待隊列中的下一個(gè)任務(wù);任務(wù)一旦被執行,不被中斷,直到任務(wù)執行完成;此后CPU交還調度器控制,去執行下一個(gè)任務(wù)。

  一、搶占式調度器

  搶占式調度器是一種多任務(wù)的系統結構,我們平常接觸到的商用嵌入式操作系統如UCOS等一般屬于搶占式調度系統。在搶占式調度器中,任務(wù)在特定的時(shí)刻被調度運行;當任務(wù)需要運行時(shí),被添加到等待隊列中;等待的任務(wù)運行一段固定的時(shí)間,如果沒(méi)有完成,將被暫停并放回到等待隊列中,然后下一個(gè)等待任務(wù)將運行一段固定的時(shí)間。

  這類(lèi)調度器相對復雜,通常作為一個(gè)獨立的操作系統來(lái)處理,它可以對外部事件快速響應,可“并行地”處理多個(gè)不同任務(wù)。

  本文簡(jiǎn)單介紹了幾種不同的單片機,由于篇幅問(wèn)題,不能一一詳細解釋?zhuān)院笥袡C會(huì )將詳細解釋?zhuān)⒁灰唤o出實(shí)例。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>