新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 適應(yīng)實時多任務(wù)的微控制器高效指令支持

適應(yīng)實時多任務(wù)的微控制器高效指令支持

作者: 時間:2004-12-10 來源:網(wǎng)絡(luò) 收藏
摘要:開發(fā)系統(tǒng),除了采用高速器件之外,適當(dāng)?shù)?a class="contentlabel" href="http://butianyuan.cn/news/listbylabel/label/指令">指令能簡化控制結(jié)構(gòu),減少程序代碼,增強(qiáng)響應(yīng)能力。本文提出了一些的微功能設(shè)計。

關(guān)鍵詞: 實時多

微控制器系統(tǒng)即國內(nèi)通常所稱的單片機(jī)系統(tǒng),主要用于物理設(shè)備的接口和直接控制。雖然控制邏輯相對微處理機(jī)系統(tǒng)而言比較簡單,但由于多數(shù)情況下需要實時響應(yīng),而且經(jīng)常要同時處理多個對象的協(xié)同工作,因此,不僅對程序的運(yùn)行效率有較高的要求,還要求微控制器具備較強(qiáng)的多任務(wù)處理能力。另一方面,由于量大面廣,以及具體應(yīng)用條件的限制,希望微控制器的成本要低;而這又只有在微控制器的硬件結(jié)構(gòu)相對簡單的前提下才能實現(xiàn),這就限制了微控制器的指令、程序代碼空間以及數(shù)據(jù)存儲容量。在這樣的局面中,想要實現(xiàn)較高的運(yùn)行效率,就只有加強(qiáng)微控制器指令的功能和靈活性。

至今,絕大多數(shù)微控制器程序的編制仍使用匯編語言,其優(yōu)缺點(diǎn)已眾所周知。隨著硬件技術(shù)的發(fā)展,器件的性能價格比顯著提高,各種面向嵌入式應(yīng)用的微控制器系統(tǒng)模塊向商品化發(fā)展。微控制器系統(tǒng)的成本中,軟件比例不斷增加,使用高級語言編制微控制器應(yīng)用系統(tǒng)的軟件是必然的趨勢;而且微控制器中能進(jìn)行算術(shù)運(yùn)行和邏輯運(yùn)算的運(yùn)算器結(jié)構(gòu)、可以直接與數(shù)據(jù)總線交換數(shù)據(jù)并進(jìn)行關(guān)系運(yùn)算的單元個數(shù)、間址訪問的能力等因素,將直接影響高級語言生成機(jī)器代碼的難易程度。為完成某一運(yùn)算,不能只計算運(yùn)算本身所需的時間,還要考慮建立本處理環(huán)境所需的時間、取運(yùn)算對象與保存運(yùn)算結(jié)果的輔助操作時間、以及所占用的指令空間。簡言之,要考慮所有影響6代碼效率和運(yùn)行效率的因素。

轉(zhuǎn)移控制指令是直接影響程序運(yùn)行的,但其前提是狀態(tài)檢測或者關(guān)系運(yùn)算的結(jié)果;而狀態(tài)檢測需要位尋址能力的,關(guān)系運(yùn)算又必須訪問兩個對象,所以,位尋址能力、數(shù)據(jù)訪問能力、數(shù)據(jù)訪問方式都與程序的運(yùn)行效率有關(guān)。根據(jù)作者多年編制實時應(yīng)用程序的體會,針對實時多任務(wù)應(yīng)用,就率的微控制器數(shù)據(jù)訪問能力、方式與轉(zhuǎn)移控制指令設(shè)計而言,應(yīng)具備以下四方面性能。

1.指令的關(guān)系運(yùn)算能力

關(guān)系運(yùn)算是控制程序轉(zhuǎn)移的前提,其運(yùn)算能力由兩個方面組成:一是運(yùn)算功能;二是運(yùn)算單元數(shù)目。

在8位機(jī)系統(tǒng)中,運(yùn)算功能一般都無符號的大于、小于、等于、不等于比較;在16位機(jī)系統(tǒng)中,還應(yīng)支持有符號的比較,并且要求有多個運(yùn)算單元都支持關(guān)系運(yùn)算。如果常用的一些功能單元個數(shù)較少,則當(dāng)進(jìn)程切換時,要花費(fèi)時間置換資源。假如微控制器中只有一個寄存器能進(jìn)行關(guān)系運(yùn)算,必須經(jīng)常進(jìn)行中間結(jié)果的換位存取。這些額外操作的代價是指令數(shù)目與運(yùn)行時間的增加,那將極大地影響程序運(yùn)行效率。例如,要根據(jù)兩個關(guān)系運(yùn)算的結(jié)果決定處理策略,首先,要將第一次關(guān)系運(yùn)算的邏輯結(jié)果保存起來,可能還需要保留運(yùn)算后的數(shù)據(jù)結(jié)果,再裝入第二次需要的運(yùn)算對象。其最小代價是多中用一條指令的存儲空間和一次裝入所需的運(yùn)算時間,而且沒有任何的額外收益。此外,多任務(wù)運(yùn)行時將頻繁產(chǎn)生中斷,在中斷服務(wù)程序中,必須騰出運(yùn)算器,又要多占用一個堆??臻g來保存斷中數(shù)據(jù),以及一次進(jìn)棧、一次出棧的兩條指令的存儲空間和運(yùn)行時間。這些都是在微控制器應(yīng)用系統(tǒng)中的寶貴資源,因此,這樣的微控制器是不實時多任務(wù)系統(tǒng)應(yīng)用的?,F(xiàn)在,許多微控制器都采用寄存器組的結(jié)構(gòu),每一個寄存器都可支持關(guān)系運(yùn)算和簡單的算術(shù)運(yùn)算功能,便于實現(xiàn)高級語言中“局部變量”的特性。其主要優(yōu)點(diǎn)是存儲器的利用率高,數(shù)據(jù)完全性好。這就大大緩解了運(yùn)算能力的瓶頸。

2.指令的數(shù)據(jù)訪問能力

(1)運(yùn)算對象的訪問方式

指令對運(yùn)算對象的訪問方式非常重要。如果同類資源只能使用特定名稱區(qū)分訪問。則處理多進(jìn)程時,功能相似的程序段必須書寫不同的代碼段。代碼重用性差,這就增加了總代碼長度。所以,間址訪問非常重要,它可以用同樣的程序處理不同的對象,在多任務(wù)處理環(huán)境中能顯著提高系統(tǒng)效益。

位信息是二進(jìn)制中最基本的數(shù)據(jù)??刂葡到y(tǒng)中,經(jīng)常需要檢測位信息,例如進(jìn)程的標(biāo)識、外設(shè)的狀態(tài)等。在多任務(wù)系統(tǒng)中,各進(jìn)程將占用不同物理地址的系統(tǒng)資源。這時,指令能否支持間址的位訪問,就大大影響進(jìn)程之間的切換。如果不支持間址的位訪問,假設(shè)有8位信息點(diǎn),則必須編寫8句直接位檢測的語句來判別,增加了代碼的長度;如果各進(jìn)程要使用同一個代碼段,必須為各進(jìn)程置換重用的資源,浪費(fèi)時間;而如果各進(jìn)程使用不同的資源,則必須書寫代碼功能相同、僅僅資源不同的代碼?,F(xiàn)在常用的微控制器,位間接尋址能力都比較差,編寫程序費(fèi)時費(fèi)力,代碼冗長,修改困難。

對于字節(jié)數(shù)據(jù),要求提供既可對數(shù)據(jù)代碼區(qū),又可對程序代碼區(qū)的間址訪問支持。當(dāng)前常見的微控制器,雖然也提供對程序代碼區(qū)的間址訪問支持,但限于查表操作。應(yīng)用程序要訪問存放于數(shù)據(jù)內(nèi)的常數(shù),必須先調(diào)用查表程序獲取對象,再將它放入某個工作單元,然后才能開始處理。如果能通過間址直接訪問程序存儲器中的數(shù)據(jù)表,則節(jié)省了時間與空間的開銷。

(2)數(shù)據(jù)描述能力

隨著人工智能、自、自學(xué)習(xí)技術(shù)的發(fā)展,參與關(guān)系運(yùn)算的兩個對象經(jīng)常都是變量,微控制器指令系統(tǒng)的設(shè)計必須考慮這一因素。

關(guān)系運(yùn)算的兩個對象,應(yīng)該支持運(yùn)算器與立即數(shù)、寄存器、直接尋址或者間接尋址對象的關(guān)系運(yùn)算;而間接尋址對象可以放在數(shù)據(jù)存儲區(qū)中,也可以在程序存儲區(qū)中??紤]到數(shù)組、隊列的運(yùn)算需要,比較理想的是間址寄存器支持指定次數(shù)循環(huán)或者支持循環(huán)隊列操作。

相對尋址能力;采用一個基指針,再與間址寄存器疊加形成訪問地址。既可訪問程序代碼空間。便于查表操作,用空間資源換取時間,提高非線性運(yùn)算的處理速度;又可訪問數(shù)據(jù)存儲空間,便于計算機(jī)輔助開發(fā)應(yīng)用程序生成運(yùn)行代碼中數(shù)據(jù)間址訪問。

3.原子操作指令支持

同步與互斥是多進(jìn)程必須處理的問題。多進(jìn)程搶占系統(tǒng)資源時,要先判斷系統(tǒng)資源使用標(biāo)識。一般用一個位標(biāo)識,是空閑則占用。這是一種互斥行為,一旦資源被占用,其它進(jìn)程不得使用。為了避免一個進(jìn)程檢測到系統(tǒng)資源空閑之后,但在未改變標(biāo)識位之間,另一個進(jìn)程也檢測到該資源空閑,必須將檢測與改變標(biāo)識設(shè)計為原子操作。一般,都通過禁止系統(tǒng)中斷來解決。在檢測之前關(guān)閉中斷,檢測之后再開啟中斷。如果指令提供對標(biāo)志位以及對標(biāo)識字節(jié)的原子操作支持,將減少程序并提高效率。

(1)標(biāo)識位操作指令

要求對標(biāo)識位的檢測、清除標(biāo)識位以及轉(zhuǎn)移,在一條指令內(nèi)完成。這在有些微控制器中已有指令支持。

(2)適應(yīng)信號燈操作的指令

多進(jìn)程并發(fā)運(yùn)行時,經(jīng)常用到信號燈技術(shù)。為了適應(yīng)PV操作等同步與互斥操作,微控制器應(yīng)提供減一等于某值轉(zhuǎn)移,以及增一等于某值轉(zhuǎn)移這樣的指令支持。這樣就可免去信號監(jiān)測前后的關(guān)閉、開啟中斷操作,而僅在需要保護(hù)臨界區(qū)時才關(guān)閉中斷。禁止中斷的時間減少了,相當(dāng)于系統(tǒng)響應(yīng)實時事件的能力增強(qiáng)。除了支持與常數(shù)的比較之外,指令還應(yīng)支持與某寄存器或者間址存儲單元的比較,這樣就相當(dāng)靈活。當(dāng)該指令中的比較值取為0時,就是常用于控制循環(huán)的指令。

4.支持多進(jìn)程切換的指令能力

當(dāng)系統(tǒng)資源不能滿足運(yùn)行需要時,就要將進(jìn)程掛起,同時也需要保留斷點(diǎn)信息。從原理上講,凡是進(jìn)程自用的各種信息,都必須保留,進(jìn)程下次由就緒態(tài)轉(zhuǎn)為運(yùn)行時,要以它們?yōu)橐罁?jù),經(jīng)過多次判斷后才能恢復(fù)斷點(diǎn)信息??梢?,掛起過程和恢復(fù)過程要無謂地占用CPU時間。為解決這一矛盾,應(yīng)設(shè)計如下指令功能。

(1)帶回下次入口地址的調(diào)用返回指令

程序運(yùn)行到某點(diǎn),即隱含了條件的滿足。進(jìn)程掛起點(diǎn)的空間位置,隱含著進(jìn)程運(yùn)行的軌跡,即包含了掛起的原因。進(jìn)程再次獲得CPU資源,只要回到該點(diǎn),再配以新狀態(tài)條件,即可迅速恢復(fù)運(yùn)行,而不需要重新再判別歷史條件。因此,微處理器應(yīng)該支持以指針間址存儲單元內(nèi)容(數(shù)據(jù))為轉(zhuǎn)移地址的調(diào)用指令,采用類似推棧指針重置PC指令的方法,用間址訪問獲取調(diào)用的入口地址。調(diào)用返回時,帶回下次的入口地址,仍用該間址指針更新轉(zhuǎn)移地址。

下次的入口地址,實際上并不需要放在哪個寄存器中帶回,只要執(zhí)行調(diào)用返回指令時,將當(dāng)前程序計數(shù)器中的PC值(它已經(jīng)含有下條指令首地址)送以用間址指針指向的存儲單元即可,這種方法可以在8位機(jī)系統(tǒng)中方便地實現(xiàn)。它與常規(guī)的調(diào)用返回恢復(fù)調(diào)用點(diǎn)地址的做法不同之處在于先做了一步保存PC值的工作。調(diào)用返回指令有兩種:其一是保存當(dāng)前PC值并返回,下次調(diào)用直接轉(zhuǎn)向指定入口;另一種則不保存當(dāng)前PC值而返回,下次調(diào)用仍舊進(jìn)入原入口。

為支持這種調(diào)用返回機(jī)制,在它之前的語句通常是一條判斷轉(zhuǎn)移指令,當(dāng)不滿足進(jìn)程繼續(xù)運(yùn)行條件就執(zhí)行調(diào)用返回。為提高指令效率,判斷轉(zhuǎn)移指令必須是雙向的:有進(jìn)程轉(zhuǎn)移和無進(jìn)位轉(zhuǎn)移;零狀態(tài)轉(zhuǎn)移和非零狀態(tài)轉(zhuǎn)移;相等轉(zhuǎn)移和不相等轉(zhuǎn)移;大于轉(zhuǎn)移和小于轉(zhuǎn)移。對于位操作中的判斷并清除標(biāo)識位再轉(zhuǎn)移的原子操作指令,則最好再提供判斷并置位標(biāo)識位再轉(zhuǎn)移指令,以方便使用。

(2)支持可變中斷矢量

實時系統(tǒng)普遍采用中斷技術(shù),許多微控制器采用固定中斷矢量的實現(xiàn)方法。不同情況下的中斷也只能執(zhí)行相的指令段,而必須要在中斷服務(wù)程序中辨別當(dāng)前狀況,一般,編程者都采用增設(shè)狀態(tài)變量的方法,供下次中斷服務(wù)時指引處理路徑。本次中斷結(jié)束之間的這部分準(zhǔn)備工作以及下次進(jìn)入中斷時的尋找路徑,都是無謂消耗CPU資源與時間;而采用可變中斷矢量的實現(xiàn)方法,進(jìn)入中斷服務(wù)之后直接到達(dá)任務(wù)處理點(diǎn),可避免上述弊端,提高中斷服務(wù)響應(yīng)速度。具體方法類似調(diào)用返回的處理,保存本次中斷處理服務(wù)程序的終止點(diǎn)地址作為新的中斷向量即可。

(3)組合條件對進(jìn)程狀態(tài)轉(zhuǎn)移的控制

對于16位處理器,還可以提供以當(dāng)前指令為基地址,以寄存器內(nèi)容作為偏移地址的直接跳轉(zhuǎn)或者調(diào)用支持。

進(jìn)程需要處理多因素條件 綜合與抉擇,運(yùn)行時要探測信息標(biāo)識,依據(jù)多個狀態(tài)變量決定運(yùn)行路徑。設(shè)有n個信息標(biāo)識,由它可引導(dǎo)k(k≤2 n)條路徑。采用逐個辨識的方法。需n次;而如果將這n個信息標(biāo)識作為矢量地址看待,與基地址共同形成物理地址,即可直接轉(zhuǎn)移。當(dāng)k遠(yuǎn)小于2n時,可采用分段的方法,將n個信息標(biāo)識中的一部分用作矢量地址,以減少對程序存儲器的占用。

(4)便于多進(jìn)程切換的指令能力

上述間址移機(jī)制,不但可以支持?jǐn)?shù)據(jù)驅(qū)動的程序控制,也適宜于按時間片分配進(jìn)程運(yùn)行。當(dāng)系統(tǒng)分配給該進(jìn)程的時間用完,進(jìn)入高優(yōu)先級的系統(tǒng)定時器中斷。此時,堆棧頂保存的是被中斷進(jìn)程的斷點(diǎn)地址,只要將其作為該進(jìn)程的下次入口地址保存起來,并執(zhí)行完該進(jìn)程的斷點(diǎn)保護(hù)工作后,再遞增指針,指向下一進(jìn)程的入口地址,即可在定時器中斷返回之后,自動將下進(jìn)程投入運(yùn)行。

(5)支持循環(huán)任務(wù)隊列的功能

并發(fā)運(yùn)行的多任務(wù),數(shù)目會發(fā)生變化。微控制器應(yīng)提供支持循環(huán)任務(wù)隊列的指令,例如前面所說的指針增減一等于某值轉(zhuǎn)移指令,可實現(xiàn)任意位置與長度的循環(huán)隊列管理,便于正反雙向遍歷。對于多任務(wù)處理,各進(jìn)程所需的循環(huán)隊列長度會不同。如果指令格式規(guī)定比較值必須是固定的常數(shù),則必須為不同的進(jìn)程編寫惟有比較值不同而功能完全一樣的代碼段,顯然并合理。較好解決方法是間址寄存器支持訪問變量。

(6)二級指針管理寄存器塊

一些常用的內(nèi)部存儲單元可組成工作組的形式,用二級指針指明當(dāng)前工作組。在多進(jìn)程并發(fā)運(yùn)行時,這種方式可加快數(shù)據(jù)切換等斷點(diǎn)保護(hù)和恢復(fù)工作,并減少指令。

上述指令,在有些微控制器的指令集,已有體現(xiàn),在此提出,供編制實時多任務(wù)應(yīng)用程序設(shè)計者在選用微控制器時參考。有些指令尚未實現(xiàn),出來供微控制器設(shè)計者參考。

隨著微電子技術(shù)的發(fā)展,這些指令的功能并非難以實現(xiàn),只是要在功能與功能、功能與成本之間進(jìn)行權(quán)衡,或許只能在某些高檔的微控制器中才能支持。隨著專用系統(tǒng)概念的增強(qiáng),適用于實地多任務(wù)系統(tǒng)應(yīng)用的微控制器,將使得應(yīng)用系統(tǒng)設(shè)計者更靈活、更迅速地開發(fā)出低成本、高性能的產(chǎn)品。



評論


相關(guān)推薦

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

關(guān)閉