国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

利用實時內核開發嵌入式多任務程序

發布時間:2010-11-17 12:38    發布者:designer
關鍵詞: 程序 , 多任務 , 內核 , 嵌入式 , 實時
嵌入式系統應用日益復雜化,傳統的前臺/后臺程序開發機制已經不能滿足需求,目前更多地采用搶占式實時內核開發嵌入式多任務系統。實時內核為多任務應用程序提供最基本和最重要的服務。本文介紹實時內核和多任務,并提出利用實時內核進行系統開發時,根據系統功能合理構成任務的方法。

隨著嵌入式系統的廣泛使用,傳統的前臺/后臺程序開發機制已經不能滿足日益復雜和多樣化的嵌入式應用需求,因而常常采用嵌入式實時操作系統內核(簡稱實時內核)開發實時多任務程序。嵌入式實時內核提供多任務、任務管理、時間管理、任務間通信和同步、內存管理等重要服務,使嵌入式應用程序容易設計和擴展。內核是管理微處理器或者微控制器時間的軟件,確保所有時間關鍵的事件盡可能高效地得到處理;允許將系統分成多個獨立的任務,每個任務處理程序的一部分,從而簡化系統的設計過程。  

一、非搶占式內核和搶占式內核  

實時內核分為兩種:非搶占式內核和搶占式內核。這兩種內核都由中斷服務例程(ISR)處理異步事件。在非搶占式內核中,一個ISR使優先級更高的任務就緒,并不立即將CPU控制權交給優先級高的任務,而是返回到被中斷的當前任務。只有當前任務執行某種操作明確放棄CPU時,優先級高的新任務才得到CPU控制權。非搶占式內核對實時事件的響應時間不確定,因而極少在實時應用中使用。圖1所示為非搶占式內核程序流程:①低優先級任務(LPT)執行;②低優先級任務被中斷;③執行中斷服務例程,使高優先級任務(HPT)就緒;



④中斷服務例程返回到被中斷的低優先級任務;⑤低優先級任務繼續執行;⑥低優先級任務放棄CPU;⑦高優先級任務運行。  
目前在大多數嵌入式實時多任務系統應用中,對系統實時響應要求很高,因此采用搶占式內核確保時間關鍵的任務最先執行,使優先級最高的就緒任務總是最先得到CPU控制權。優先級低的當前任務能夠被優先級更高的任務搶占,暫時掛起執行,將CPU控制權交給優先級高的任務。圖2所示為搶占式內核程序流程:①低優先級任務執行;②異步事件使任務中斷;③響應異步事件,運行中斷服務例程,使高優先級任務就緒;④中斷服務例程返回到高優先級任務;⑤高優先級任務執行,直到它被中斷轉向執行優先級更高的任務;⑥高優先級任務結束,內核切換到低優先級任務;⑦低優先級任務繼續執行。  

二、多任務  

利用實時內核開發嵌入式多任務系統程序,要根據明確的設計目的確認系統功能,將系統功能合理分解,構造不同的任務,使每個任務負責完成應用要求的一部分功能;并根據任務相對于其他任務的重要性決定其優先級。多個任務彼此獨立運行,具有獨立的私有堆棧空間,在被其他進程搶占時能夠保持任務執行線程的上下文。  

1.任務  

任務是單線程序列指令形成的一個無限循環,在系統程序中用函數表示(如下)。任務執行時要調用內核提供的服務,以等待某個事件發生。事件可以是定時間,或者是另一個任務、一個中斷服務例程發出事件通知。  

Void Task (void)  
{  
While (true) {  
Run Application-specific codes;  
Wait for event by calling a service provided by the kernel;  
Run Application - specific codes;  
}  
}  

2.任務管理  

每個任務有5種狀態;休眠、就緒、運行、等待、中斷。圖3所示為任務之間的狀態轉換。休眠狀態的任務駐留在存儲器中,還未被內核使用;就緒狀態的任務準備執行,優先級低于當前執行的任務,沒有得到CPU控制權;任務得到CPU控制權后就處于運行狀態;等待事件發生的任務處于等待狀態,事件可以是I/O操作完成、



共享資源可以利用、時鐘脈沖發生等;任務執行過程被中斷服務例程中斷,任務就處于中斷狀態。  

實時內核通過任務控制塊(TCB)管理任務。TCB數據結構中包括任務的狀態、優先、指向任務棧頂的指針、以及其他與內核有關的信息。程序調用內核服務(如調用內核函數OSTaskCreate)創建任務,為此任務在內存中分配一個TCB、進行初始化,使任務從休眠狀態轉變到就緒狀態。任務可以在多任務執行之前靜態創建,也可以在多任務執行過程動態創建。  

內核為實時多任務應用程序提供任務調度和轉換、任務間通信、定時順等服務,并作為系統調用提供給任務使用。實時內核以事件為基礎、根據任務執行狀態對任務進行切換,任務的狀態也隨之相應改變。在實時多任務程序中,內存中存在多個任務控制塊以及各個任務獨立的私有堆棧。進行任務切換首先要保存CPU寄存器內容到當前任務堆棧,將堆棧指針保存到當前任務的TCB中,然后從新任務的TCB中裝載堆棧指針,并將新任務上下文裝載到CPU寄存器中。這樣就從一個任務轉換到另一個任務運行。任務使用這時內核提供的定時器系統調用,可以保持休眠狀態一段時間,或者等待一段時間后成為就緒狀態。在實時嵌入式系統中,外部中斷事件產生的任務具有高優先級,因而以搶占方式獲得CPU控制權。  

三、任務構造  

1.I/O任務構造  

根據3種不同的I/O事件;中斷驅動事件、輪詢事件、輸出事件來構造I/O任務。輪詢事件通常由1個任務實現,實時內核以固定周期對此任務進行調度,輸出事件常被設計為可重入程序而不是任務;中斷驅動事件是一類典型的異步事件。  

下面將以1個簡單的串行設備驅動程序來說明I/O分解,突出I/O任務構造的重要特征。此設備分配得到1個中斷向量,在3種情況下產生中斷:接收到字符、輸出就緒、設備出錯。因為采用搶占式內核,在I/O中斷發生進入中斷處理例程以后,程序要保存處理器狀態,并根據不同的中斷原因進行任務調度;在中斷處理完成退出中斷處理例程之前,還要恢復處理器狀態。  

設備中斷處理:  
IF 接收到字符THEN  
將字符放入字符接收隊列;  
執行接收任務;  
IF 輸出就緒 THEN  
IF 繼續輸出 THEN  
送下一個字符;  
ELSE  
保存"設備輸出就緒"情況;  
IF 設備出錯 THEN  
將錯誤狀態放入錯誤隊列;  
執行出錯處理任務;  

接收任務:  
Void Task_receive()  
{  
While (true){  
Wait on input char queue;  
If end of input string then  
Process input string;  
Else  
Save input;  
}  
}  

對于中斷事件要合理劃分事件的處理級別,盡可能多地在任務級處理,從而最小化系統中斷延遲。對這個串行設備驅動中斷的處理就是一個劃分事件到中斷級和任務級處理的例子。中斷服務例程及時響應實時中斷,將實時要求相對低一些的事件(如字符出錯、出錯狀態處理)交給不同的任務處理。隊列是內核提供的一種任務間通信結構,支持消息發送者和接收者異步訪問。在這里用于驅動程序和任務之間的通信,為驅動程序進程和任務進程提供消息緩沖。設備驅動程序負責及時響應中斷事件,并不關心接收任務的狀態。為了簡化接收任務的結構,減小系統延遲,這里將出錯處理劃分為獨立的任務,分配不同的優先級。





2.內部任務構造  

系統內部任務可以分為:①周期性任務--實時內核基于固定周期調度的任務;②異步任務--非周期或事件驅動的任務,內核根據需要進行調度,用于處理系統內部產生的事件;③控制對象--為狀態機創建的控制任務,用于實現狀態轉換;④用戶接口⑤--對應于用戶任務,在用戶驅動的系統中,用戶任務是具有高優先級。  

在嵌入式實時多任務系統中,大部分任務是非周期或事件驅動的異步任務,其函數形式如下:  

Void Task_aperiodic ()  
{  
While (true){  
Wait on an async data structure;  
Process input;  
Process output;  
}  
}  

在異步任務中,驅動任務的異步數據是由實時內核提供的任務間通信數據。內核為應用程序提供信號量、消息隊列、消息郵箱、插口或管道等結構,進行事件管理和任務間通信。設計這些異步任務時采用合適的數據結構、正確定義數據能夠節省寶貴的調試時間,而且任務處理的函數不能太多,過于復雜,否則會增加調試的難度。  

3.任務合并  

利用任務的共同特征進行適當的任務合并,可以簡化系統任務模型、減小系統復雜度、消除某些任務的切換開銷從而減少系統總體開銷。任務合并可分為:①根據時間一致合并,將同一事件激活的優先級相同的函數合并在1個任務中;②根據控制一致合并,③根據函數一致合并,將幾個使用相同數據的函數合并,使原來共享的數據成為任務內的局部數據,從而減少互斥。  

結束語  

目前有許多廠商提供面向嵌入式應用領域的實時操作系統(RTOS),提供實時內核、輸入/輸出管理器、窗口系統、文件系統、網絡、語言接口庫、調試器和交叉平臺編譯器的軟件包。其中實時內核為嵌入式多任務程序提供最基本和最重要的功能。本文從利用實時內核開發多任務應用程序的角度,對實時內核和任務進行介紹,提出合理構造任務的方法。可以看到,利用實時內核提供的服務,采用正確的開發方法,可以增加嵌入式實時多任務系統的功能,降低開發方法,可以增加嵌入式實時多任務系統的功能,降低開發難度。
本文地址:http://m.qingdxww.cn/thread-40048-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 使用SAM-IoT Wx v2開發板演示AWS IoT Core應用程序
  • 使用Harmony3加速TCP/IP應用的開發培訓教程
  • 集成高級模擬外設的PIC18F-Q71家族介紹培訓教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿澤電子(Mouser)專區

相關在線工具

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩美女va毛片在线播放| 亚洲婷婷丁香| 色偷偷亚洲女人天堂观看欧| 亚洲成a| 午夜一级免费视频| 在线免费观看亚洲视频| 久久欧洲视频| 无码乱人伦一区二区亚洲| 亚洲精品tv久久久久| 色综合成人| 四虎库| 特黄特色大片免费| 在线影院精品私人| 好想被狂躁A片免费久99| 无码精品AV久久久奶水| 一本久道久久综合多人| 色综合久久中文字幕网| 午夜精品久久久久久久| 99re在这里只有精品| 精品国产中文字幕在线视频| 午夜电影三级还珠格格| 一本之道久久| 天天狠天天天天透在线| 我和校花在教室里啪啪| 囯产精品久久久久免费蜜桃| 飘雪在线观看免费高清完整版韩国 | 伊人久久综合影院| 侵犯希崎中文字幕在线| 亚洲狠狠成人综合网| 亚洲美女色成人综合| 国产欧美日韩国产高清| 双性大乳浪受噗呲噗呲h总| 欧洲亚洲一区| 日本精品一区| 五月综合视频| 国产精品成人不卡在线观看| 桃隐社区最新最快地址| 亚洲一级毛片中文字幕| 亚洲日本天堂| 91次元黄色观看| 老妇xxxxbbbb|