新聞中心

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

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

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

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

本文引用地址:http://m.butianyuan.cn/article/233787.htm

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

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

  一、前后臺程序

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

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

  二、

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

  三、合作式調(diào)度器

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

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

  一、搶占式調(diào)度器

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

  這類調(diào)度器相對復(fù)雜,通常作為一個獨立的操作系統(tǒng)來處理,它可以對外部事件快速響應(yīng),可“并行地”處理多個不同任務(wù)。

  本文簡單介紹了幾種不同的單片機(jī),由于篇幅問題,不能一一詳細(xì)解釋,以后有機(jī)會將詳細(xì)解釋,并一一給出實例。



評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉