<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è) > 嵌入式系統 > 設計應用 > 時(shí)間片輪轉算法在單片機程序設計中的應用

時(shí)間片輪轉算法在單片機程序設計中的應用

作者: 時(shí)間:2007-03-09 來(lái)源:網(wǎng)絡(luò ) 收藏
摘要:提出一種采用時(shí)間片輪轉算法改進(jìn)系統程序設計,實(shí)現多任務(wù)機制的軟件設計方法,并給出了在MCS-51分級分布式系統中應用該算法進(jìn)行程序設計的實(shí)例。 關(guān)鍵詞:時(shí)間片 多任務(wù)機制 系統 傳統的單任務(wù)編程思想對于明顯的順序控制要求編程簡(jiǎn)單、思路清晰、開(kāi)發(fā)周期短;但對于任務(wù)較多、控制功能復雜的問(wèn)題時(shí),卻難以滿(mǎn)足要求。因此,有必要對傳統的單任務(wù)設計思想進(jìn)行改進(jìn)。時(shí)間片輪轉算法是實(shí)現多任務(wù)調度的一種常用算法。在這種算法中,系統將所有的任務(wù)按順序排成一個(gè)隊列,每次調度時(shí)把CPU分配給隊首的任務(wù),并令其執行一個(gè)時(shí)間片,構成微觀(guān)上輪流運行、宏觀(guān)上并執行的多任務(wù)效果。作者在基于的分級分布式控制系統——程控對講系統的用戶(hù)控制器程序中引入多任務(wù)機制,采用時(shí)間片輪轉算法極大地改善了程序結構,實(shí)現了對32個(gè)獨立用戶(hù)的有效控制。這種程序設計思想也可以到其它以單片機為核心的分級分布控制系統軟件設計中。 1 系統組成 程控對講系統是一個(gè)基于MCS-51的多級分布式系統,用戶(hù)控制器是其中的一級,整個(gè)系統總體結構如圖1所示。主控制器以單片機AT89C52為核心擴展非易失性存儲器及其它功能器件,完成系統各用戶(hù)對講關(guān)系的編程和存儲,并根據對講關(guān)系對用戶(hù)模塊進(jìn)行實(shí)時(shí)控制。用戶(hù)控制器以單片機AT89C52為核心擴展用戶(hù)機接口模塊組成,每個(gè)用戶(hù)控制器負責對其下一級的32個(gè)用戶(hù)機進(jìn)行管理與控制。 主控制器與用戶(hù)控制器之間的信息交換采用主從方式的串行通信。主控制器對8個(gè)用戶(hù)控制器輪流查詢(xún),各用戶(hù)控制器只對與本模塊相關(guān)的命令作出反應,用戶(hù)控制器通過(guò)雙絞線(xiàn)與用戶(hù)機相連,以降低系統成本。用戶(hù)機與用戶(hù)控制器之間傳輸距離較遠,最遠可達8km。為保證在復雜的環(huán)境中正確傳輸數據,兩者之間的通信采用DTMF編碼。 2 任務(wù)的分配和時(shí)間片的劃分 2.1 用戶(hù)控制器子任務(wù)的確定 用戶(hù)控制器需要實(shí)時(shí)管理32個(gè)獨立的用戶(hù)機,一方面實(shí)時(shí)接收用戶(hù)機的呼叫信號進(jìn)行處理后傳送給主控制器;另一方面根據系統工作狀況向用戶(hù)機發(fā)送被呼叫信息。 用戶(hù)控制器接收來(lái)自用戶(hù)機的信號有兩類(lèi)。一類(lèi)是DTMF編碼信號,用于檢測用戶(hù)機是否需要呼叫其它用戶(hù)機。用戶(hù)機與控制器之間傳送數據的位數是不等長(cháng)的,每位DTMF編碼數據的發(fā)送至少需要104ms,發(fā)送時(shí)間和空閑時(shí)間各占一半。另一類(lèi)是話(huà),DTMF編碼信號和話(huà)音信號的復用可以降低系統的線(xiàn)路成本。在每次通信結束后,為使用戶(hù)控制器能啟動(dòng)下一輪的DTMF編碼數據的接收,用戶(hù)機需要給用戶(hù)控制器發(fā)送一個(gè)起始信號——掛機信號。用戶(hù)機的工作電源直接從用戶(hù)線(xiàn)路上提取,在話(huà)音和DTMF編碼傳送時(shí)用戶(hù)線(xiàn)路有一定的工作電流(大于20mA),掛機信號使用戶(hù)線(xiàn)路上電流接近于零(小于5mA),用戶(hù)控制器檢測用戶(hù)線(xiàn)路上電路的這種變化后,進(jìn)入新一輪的DTMF編碼數據通信。掛機信號的持續時(shí)間為78ms。 用戶(hù)控制器向用戶(hù)機發(fā)送的只有DTMF編碼數據,用于告訴用戶(hù)機誰(shuí)正在呼叫它。 要完成一個(gè)呼叫過(guò)程(即使通話(huà)時(shí)間為零),至少需要2%26;#215;104ms(接收、發(fā)送DTMF編碼時(shí)間)+78ms(掛機時(shí)間)=286ms;完成一個(gè)被呼叫過(guò)程也至少需要2%26;#215;104ms=208ms。如果每個(gè)用戶(hù)機的請求就不能實(shí)時(shí)作出響應。為解決這個(gè)問(wèn)題,在用戶(hù)控制器程序設計過(guò)程中引入多任務(wù)機制。為便于任務(wù)調度程序的調度,根據用戶(hù)操作流程將用戶(hù)機的操作細分為16個(gè)字操作,每個(gè)子操作構成個(gè)子任務(wù),用戶(hù)子任務(wù)分配表如表1所示。表1 用戶(hù)子任務(wù)分配表 子任務(wù)號功 能執行時(shí)間0等待接收26%26;#215;n1接收預處理262用戶(hù)機查詢(xún)26%26;#215;43應答26%26;#215;44接收第1位數據26%26;#215;45接收第2位數據26%26;#215;46接收第3位數據26%26;#215;47等待上傳26%26;#215;n8確認26%26;#215;n9響應26%26;#215;410通話(huà)26%26;#215;n11掛機26%26;#215;212發(fā)送預處理2613發(fā)送第1位數據26%26;#215;414發(fā)送第2位數據26%26;#215;415發(fā)送第3位數據26%26;#215;42.2 時(shí)間片的劃分 在時(shí)間片的輪轉算法中,時(shí)間片的大小對系統性能有很大影響。如果時(shí)間片太大,大到每個(gè)任務(wù)都能在一個(gè)時(shí)間片內執行完畢,則時(shí)間片輪轉算法便退化為FCFS算法。時(shí)間片的確定通常要考慮三個(gè)因素:任務(wù)的數目、系統對響應時(shí)間的要求、系統的處理能力。 本系統中用戶(hù)控制器需要對32個(gè)用戶(hù)機進(jìn)行管理控制,應劃分成32個(gè)時(shí)間片。在不同時(shí)刻每個(gè)用戶(hù)機處于不同的工作狀況,用戶(hù)控制器需要執行不同的用戶(hù)機任務(wù),其處理時(shí)間也不相同。為縮短程序運行時(shí)間把,時(shí)間片設置為可變的,時(shí)間片的長(cháng)短取決于各個(gè)用戶(hù)機子任務(wù)的工作量。但用戶(hù)控制器與用戶(hù)機之間的通信時(shí)間要求很?chē)?,如DTMF的發(fā)送定時(shí)時(shí)間為104ms,包括52ms發(fā)送時(shí)間和52ms空閑時(shí)間,所以用戶(hù)控制器必須在52ms內對每個(gè)用戶(hù)機巡檢一次,才能正確地接收用戶(hù)機的編碼數據。也就是說(shuō)一個(gè)任務(wù)調度周期不應大于52ms。為滿(mǎn)足用戶(hù)機與控制器之間的通信對時(shí)間要求,對整個(gè)任務(wù)調度周期進(jìn)行精確定時(shí)。 綜合考慮本系統中與時(shí)間片劃分相關(guān)的三種因素:?jiǎn)纹瑱C本身的運算速度、用戶(hù)機數目及用戶(hù)機與控制器之間信號的傳送要求,確定任務(wù)調度周期為26ms。即在26ms內用戶(hù)控制器對其下一級的32個(gè)用戶(hù)機的任務(wù)都要執行一次。一般完成一個(gè)任務(wù)占用一個(gè)時(shí)間片,較長(cháng)任務(wù)可以占用多個(gè)時(shí)間片,如14號子任務(wù)(發(fā)送第2位DTMF編碼數據)需要占用4個(gè)時(shí)間片才能完成。 為實(shí)時(shí)掌握各用戶(hù)機的運行狀態(tài),在用戶(hù)控制器的存儲器開(kāi)辟出一個(gè)緩沖區為任務(wù)記錄表,供任務(wù)調度程序使用。任務(wù)記錄表中設置了三項內容:用戶(hù)編號、子任務(wù)號及時(shí)間片數,如表2所示。表2 任務(wù)記錄表 用戶(hù)編號子任務(wù)號時(shí)間片數0~310~150~163 軟件設計 3.1 任務(wù)調度程序的設計 根據上述分析,可以確定任務(wù)調度程序的功能: (1)按用戶(hù)機編號調用各用戶(hù)子任務(wù); (2)完成一個(gè)調度周期的時(shí)間不超過(guò)26ms,并在每個(gè)周期結束時(shí)對26ms進(jìn)行精確定時(shí); (3)在調度周期開(kāi)始時(shí),讀取所有用戶(hù)的DTMF編碼和摘/掛機狀態(tài),供各用戶(hù)子任務(wù)處理; (4)在調度周期結束前,根據用戶(hù)子任務(wù)處理結果向用戶(hù)機發(fā)送DTMF編碼。 調度程序的流程如圖2所示。3.2 用戶(hù)子任務(wù)的設計 用戶(hù)子任務(wù)根據該用戶(hù)緩沖區的數據進(jìn)行處理,并把處理結果存放于結果單元。各個(gè)子任務(wù)并不與外部輸入輸出接口直接交換數據,對接口的輸入輸出由任務(wù)調度程序在調度周期開(kāi)始和結束時(shí)調用專(zhuān)門(mén)子程序完成。用戶(hù)子任務(wù)的切換工作根據操作流程在各子任務(wù)中完成。用戶(hù)的操作被細分為16個(gè)子操作,相應地有16個(gè)子任務(wù),圖3為14號子任務(wù)的流程圖。 在該子任務(wù)的開(kāi)始(0ms)和中間(52ms)時(shí)刻設置DTMF數據發(fā)送緩沖區,分別允許和禁止DTMF編碼的發(fā)送。在該子任務(wù)結束時(shí)根據該用戶(hù)緩沖區內需發(fā)送的數據計算第2個(gè)的DTMF值,并修改任務(wù)記錄表中該用戶(hù)的調度數據,指向它的下一個(gè)子任務(wù)。其它子任務(wù)的設計思想與此子任務(wù)類(lèi)似。 本文在單片機實(shí)時(shí)控制系統中引入了現代操作系統的多任務(wù)思想,采用時(shí)間片輪轉調度算法對傳統單片機編程思想進(jìn)行了改進(jìn),并應用在基于MCS-51的分級分布式系統中,有效地完成了對32個(gè)獨立用戶(hù)的控制。實(shí)踐證明這種結構清晰、調度靈活,適用于定時(shí)要求復雜、實(shí)時(shí)性要求強的系統。

51單片機相關(guān)文章:51單片機教程


單片機相關(guān)文章:單片機教程


單片機相關(guān)文章:單片機視頻教程


單片機相關(guān)文章:單片機工作原理


雙絞線(xiàn)傳輸器相關(guān)文章:雙絞線(xiàn)傳輸器原理


評論


相關(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>