適應(yīng)實(shí)時(shí)多任務(wù)的微控制器高效指令支持
掃描二維碼
隨時(shí)隨地手機(jī)看文章
關(guān)鍵詞:微控制器 實(shí)時(shí)多任務(wù) 指令
微控制器系統(tǒng)即國(guó)內(nèi)通常所稱的單片機(jī)系統(tǒng),主要用于物理設(shè)備的接口和直接控制。雖然控制邏輯相對(duì)微處理機(jī)系統(tǒng)而言比較簡(jiǎn)單,但由于多數(shù)情況下需要實(shí)時(shí)響應(yīng),而且經(jīng)常要同時(shí)處理多個(gè)對(duì)象的協(xié)同工作,因此,不僅對(duì)程序的運(yùn)行效率有較高的要求,還要求微控制器具備較強(qiáng)的多任務(wù)處理能力。另一方面,由于量大面廣,以及具體應(yīng)用條件的限制,希望微控制器的成本要低;而這又只有在微控制器的硬件結(jié)構(gòu)相對(duì)簡(jiǎn)單的前提下才能實(shí)現(xiàn),這就限制了微控制器的指令、程序代碼空間以及數(shù)據(jù)存儲(chǔ)容量。在這樣的局面中,想要實(shí)現(xiàn)較高的運(yùn)行效率,就只有加強(qiáng)微控制器指令的功能和靈活性。
至今,絕大多數(shù)微控制器程序的編制仍使用匯編語(yǔ)言,其優(yōu)缺點(diǎn)已眾所周知。隨著硬件技術(shù)的發(fā)展,器件的性能價(jià)格比顯著提高,各種面向嵌入式應(yīng)用的微控制器系統(tǒng)模塊向商品化發(fā)展。微控制器系統(tǒng)的成本中,軟件比例不斷增加,使用高級(jí)語(yǔ)言編制微控制器應(yīng)用系統(tǒng)的軟件是必然的趨勢(shì);而且微控制器中能進(jìn)行算術(shù)運(yùn)行和邏輯運(yùn)算的運(yùn)算器結(jié)構(gòu)、可以直接與數(shù)據(jù)總線交換數(shù)據(jù)并進(jìn)行關(guān)系運(yùn)算的單元個(gè)數(shù)、間址訪問的能力等因素,將直接影響高級(jí)語(yǔ)言生成機(jī)器代碼的難易程度。為完成某一運(yùn)算,不能只計(jì)算運(yùn)算本身所需的時(shí)間,還要考慮建立本處理環(huán)境所需的時(shí)間、取運(yùn)算對(duì)象與保存運(yùn)算結(jié)果的輔助操作時(shí)間、以及所占用的指令空間。簡(jiǎn)言之,要考慮所有影響6代碼效率和運(yùn)行效率的因素。
轉(zhuǎn)移控制指令是直接影響程序運(yùn)行的,但其前提是狀態(tài)檢測(cè)或者關(guān)系運(yùn)算的結(jié)果;而狀態(tài)檢測(cè)需要位尋址能力的支持,關(guān)系運(yùn)算又必須訪問兩個(gè)對(duì)象,所以,位尋址能力、數(shù)據(jù)訪問能力、數(shù)據(jù)訪問方式都與程序的運(yùn)行效率有關(guān)。根據(jù)作者多年編制實(shí)時(shí)應(yīng)用程序的體會(huì),針對(duì)實(shí)時(shí)多任務(wù)應(yīng)用,就高效率的微控制器數(shù)據(jù)訪問能力、方式與轉(zhuǎn)移控制指令設(shè)計(jì)而言,應(yīng)具備以下四方面性能。
1.指令的關(guān)系運(yùn)算能力
關(guān)系運(yùn)算是控制程序轉(zhuǎn)移的前提,其運(yùn)算能力由兩個(gè)方面組成:一是運(yùn)算功能;二是運(yùn)算單元數(shù)目。
在8位機(jī)系統(tǒng)中,運(yùn)算功能一般都支持無(wú)符號(hào)的大于、小于、等于、不等于比較;在16位機(jī)系統(tǒng)中,還應(yīng)支持有符號(hào)的比較,并且要求有多個(gè)運(yùn)算單元都支持關(guān)系運(yùn)算。如果常用的一些功能單元個(gè)數(shù)較少,則當(dāng)進(jìn)程切換時(shí),要花費(fèi)時(shí)間置換資源。假如微控制器中只有一個(gè)寄存器能進(jìn)行關(guān)系運(yùn)算,必須經(jīng)常進(jìn)行中間結(jié)果的換位存取。這些額外操作的代價(jià)是指令數(shù)目與運(yùn)行時(shí)間的增加,那將極大地影響程序運(yùn)行效率。例如,要根據(jù)兩個(gè)關(guān)系運(yùn)算的結(jié)果決定處理策略,首先,要將第一次關(guān)系運(yùn)算的邏輯結(jié)果保存起來(lái),可能還需要保留運(yùn)算后的數(shù)據(jù)結(jié)果,再裝入第二次需要的運(yùn)算對(duì)象。其最小代價(jià)是多中用一條指令的存儲(chǔ)空間和一次裝入所需的運(yùn)算時(shí)間,而且沒有任何的額外收益。此外,多任務(wù)運(yùn)行時(shí)將頻繁產(chǎn)生中斷,在中斷服務(wù)程序中,必須騰出運(yùn)算器,又要多占用一個(gè)堆??臻g來(lái)保存斷中數(shù)據(jù),以及一次進(jìn)棧、一次出棧的兩條指令的存儲(chǔ)空間和運(yùn)行時(shí)間。這些都是在微控制器應(yīng)用系統(tǒng)中的寶貴資源,因此,這樣的微控制器是不適應(yīng)實(shí)時(shí)多任務(wù)系統(tǒng)應(yīng)用的?,F(xiàn)在,許多微控制器都采用寄存器組的結(jié)構(gòu),每一個(gè)寄存器都可支持關(guān)系運(yùn)算和簡(jiǎn)單的算術(shù)運(yùn)算功能,便于實(shí)現(xiàn)高級(jí)語(yǔ)言中“局部變量”的特性。其主要優(yōu)點(diǎn)是存儲(chǔ)器的利用率高,數(shù)據(jù)完全性好。這就大大緩解了運(yùn)算能力的瓶頸。
2.指令的數(shù)據(jù)訪問能力
(1)運(yùn)算對(duì)象的訪問方式
指令對(duì)運(yùn)算對(duì)象的訪問方式非常重要。如果同類資源只能使用特定名稱區(qū)分訪問。則處理多進(jìn)程時(shí),功能相似的程序段必須書寫不同的代碼段。代碼重用性差,這就增加了總代碼長(zhǎng)度。所以,間址訪問非常重要,它可以用同樣的程序處理不同的對(duì)象,在多任務(wù)處理環(huán)境中能顯著提高系統(tǒng)效益。
位信息是二進(jìn)制中最基本的數(shù)據(jù)。控制系統(tǒng)中,經(jīng)常需要檢測(cè)位信息,例如進(jìn)程的標(biāo)識(shí)、外設(shè)的狀態(tài)等。在多任務(wù)系統(tǒng)中,各進(jìn)程將占用不同物理地址的系統(tǒng)資源。這時(shí),指令能否支持間址的位訪問,就大大影響進(jìn)程之間的切換。如果不支持間址的位訪問,假設(shè)有8位信息點(diǎn),則必須編寫8句直接位檢測(cè)的語(yǔ)句來(lái)判別,增加了代碼的長(zhǎng)度;如果各進(jìn)程要使用同一個(gè)代碼段,必須為各進(jìn)程置換重用的資源,浪費(fèi)時(shí)間;而如果各進(jìn)程使用不同的資源,則必須書寫代碼功能相同、僅僅資源不同的代碼?,F(xiàn)在常用的微控制器,位間接尋址能力都比較差,編寫程序費(fèi)時(shí)費(fèi)力,代碼冗長(zhǎng),修改困難。
對(duì)于字節(jié)數(shù)據(jù),要求提供既可對(duì)數(shù)據(jù)代碼區(qū),又可對(duì)程序代碼區(qū)的間址訪問支持。當(dāng)前常見的微控制器,雖然也提供對(duì)程序代碼區(qū)的間址訪問支持,但限于查表操作。應(yīng)用程序要訪問存放于數(shù)據(jù)內(nèi)的常數(shù),必須先調(diào)用查表程序獲取對(duì)象,再將它放入某個(gè)工作單元,然后才能開始處理。如果能通過(guò)間址直接訪問程序存儲(chǔ)器中的數(shù)據(jù)表,則節(jié)省了時(shí)間與空間的開銷。
(2)數(shù)據(jù)描述能力
隨著人工智能、自適應(yīng)、自學(xué)習(xí)技術(shù)的發(fā)展,參與關(guān)系運(yùn)算的兩個(gè)對(duì)象經(jīng)常都是變量,微控制器指令系統(tǒng)的設(shè)計(jì)必須考慮這一因素。
關(guān)系運(yùn)算的兩個(gè)對(duì)象,應(yīng)該支持運(yùn)算器與立即數(shù)、寄存器、直接尋址或者間接尋址對(duì)象的關(guān)系運(yùn)算;而間接尋址對(duì)象可以放在數(shù)據(jù)存儲(chǔ)區(qū)中,也可以在程序存儲(chǔ)區(qū)中??紤]到數(shù)組、隊(duì)列的運(yùn)算需要,比較理想的是間址寄存器支持指定次數(shù)循環(huán)或者支持循環(huán)隊(duì)列操作。
相對(duì)尋址能力;采用一個(gè)基指針,再與間址寄存器疊加形成訪問地址。既可訪問程序代碼空間。便于查表操作,用空間資源換取時(shí)間,提高非線性運(yùn)算的處理速度;又可訪問數(shù)據(jù)存儲(chǔ)空間,便于計(jì)算機(jī)輔助開發(fā)應(yīng)用程序生成運(yùn)行代碼中數(shù)據(jù)間址訪問。
3.原子操作指令支持
同步與互斥是多進(jìn)程必須處理的問題。多進(jìn)程搶占系統(tǒng)資源時(shí),要先判斷系統(tǒng)資源使用標(biāo)識(shí)。一般用一個(gè)位標(biāo)識(shí),是空閑則占用。這是一種互斥行為,一旦資源被占用,其它進(jìn)程不得使用。為了避免一個(gè)進(jìn)程檢測(cè)到系統(tǒng)資源空閑之后,但在未改變標(biāo)識(shí)位之間,另一個(gè)進(jìn)程也檢測(cè)到該資源空閑,必須將檢測(cè)與改變標(biāo)識(shí)設(shè)計(jì)為原子操作。一般,都通過(guò)禁止系統(tǒng)中斷來(lái)解決。在檢測(cè)之前關(guān)閉中斷,檢測(cè)之后再開啟中斷。如果指令提供對(duì)標(biāo)志位以及對(duì)標(biāo)識(shí)字節(jié)的原子操作支持,將減少程序并提高效率。
(1)標(biāo)識(shí)位操作指令
要求對(duì)標(biāo)識(shí)位的檢測(cè)、清除標(biāo)識(shí)位以及轉(zhuǎn)移,在一條指令內(nèi)完成。這在有些微控制器中已有指令支持。
(2)適應(yīng)信號(hào)燈操作的指令
多進(jìn)程并發(fā)運(yùn)行時(shí),經(jīng)常用到信號(hào)燈技術(shù)。為了適應(yīng)PV操作等同步與互斥操作,微控制器應(yīng)提供減一等于某值轉(zhuǎn)移,以及增一等于某值轉(zhuǎn)移這樣的指令支持。這樣就可免去信號(hào)監(jiān)測(cè)前后的關(guān)閉、開啟中斷操作,而僅在需要保護(hù)臨界區(qū)時(shí)才關(guān)閉中斷。禁止中斷的時(shí)間減少了,相當(dāng)于系統(tǒng)響應(yīng)實(shí)時(shí)事件的能力增強(qiáng)。除了支持與常數(shù)的比較之外,指令還應(yīng)支持與某寄存器或者間址存儲(chǔ)單元的比較,這樣就相當(dāng)靈活。當(dāng)該指令中的比較值取為0時(shí),就是常用于控制循環(huán)的指令。
4.支持多進(jìn)程切換的指令能力
當(dāng)系統(tǒng)資源不能滿足運(yùn)行需要時(shí),就要將進(jìn)程掛起,同時(shí)也需要保留斷點(diǎn)信息。從原理上講,凡是進(jìn)程自用的各種信息,都必須保留,進(jìn)程下次由就緒態(tài)轉(zhuǎn)為運(yùn)行時(shí),要以它們?yōu)橐罁?jù),經(jīng)過(guò)多次判斷后才能恢復(fù)斷點(diǎn)信息??梢姡瑨炱疬^(guò)程和恢復(fù)過(guò)程要無(wú)謂地占用CPU時(shí)間。為解決這一矛盾,應(yīng)設(shè)計(jì)如下指令功能。
(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)該支持以指針間址存儲(chǔ)單元內(nèi)容(數(shù)據(jù))為轉(zhuǎn)移地址的調(diào)用指令,采用類似推棧指針重置PC指令的方法,用間址訪問獲取調(diào)用的入口地址。調(diào)用返回時(shí),帶回下次的入口地址,仍用該間址指針更新轉(zhuǎn)移地址。
下次的入口地址,實(shí)際上并不需要放在哪個(gè)寄存器中帶回,只要執(zhí)行調(diào)用返回指令時(shí),將當(dāng)前程序計(jì)數(shù)器中的PC值(它已經(jīng)含有下條指令首地址)送以用間址指針指向的存儲(chǔ)單元即可,這種方法可以在8位機(jī)系統(tǒng)中方便地實(shí)現(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ī)制,在它之前的語(yǔ)句通常是一條判斷轉(zhuǎn)移指令,當(dāng)不滿足進(jìn)程繼續(xù)運(yùn)行條件就執(zhí)行調(diào)用返回。為提高指令效率,判斷轉(zhuǎn)移指令必須是雙向的:有進(jìn)程轉(zhuǎn)移和無(wú)進(jìn)位轉(zhuǎn)移;零狀態(tài)轉(zhuǎn)移和非零狀態(tài)轉(zhuǎn)移;相等轉(zhuǎn)移和不相等轉(zhuǎn)移;大于轉(zhuǎn)移和小于轉(zhuǎn)移。對(duì)于位操作中的判斷并清除標(biāo)識(shí)位再轉(zhuǎn)移的原子操作指令,則最好再提供判斷并置位標(biāo)識(shí)位再轉(zhuǎn)移指令,以方便使用。
(2)支持可變中斷矢量
實(shí)時(shí)系統(tǒng)普遍采用中斷技術(shù),許多微控制器采用固定中斷矢量的實(shí)現(xiàn)方法。不同情況下的中斷也只能執(zhí)行相的指令段,而必須要在中斷服務(wù)程序中辨別當(dāng)前狀況,一般,編程者都采用增設(shè)狀態(tài)變量的方法,供下次中斷服務(wù)時(shí)指引處理路徑。本次中斷結(jié)束之間的這部分準(zhǔn)備工作以及下次進(jìn)入中斷時(shí)的尋找路徑,都是無(wú)謂消耗CPU資源與時(shí)間;而采用可變中斷矢量的實(shí)現(xiàn)方法,進(jìn)入中斷服務(wù)之后直接到達(dá)任務(wù)處理點(diǎn),可避免上述弊端,提高中斷服務(wù)響應(yīng)速度。具體方法類似調(diào)用返回的處理,保存本次中斷處理服務(wù)程序的終止點(diǎn)地址作為新的中斷向量即可。
(3)組合條件對(duì)進(jìn)程狀態(tài)轉(zhuǎn)移的控制
對(duì)于16位處理器,還可以提供以當(dāng)前指令為基地址,以寄存器內(nèi)容作為偏移地址的直接跳轉(zhuǎn)或者調(diào)用支持。
進(jìn)程需要處理多因素條件 綜合與抉擇,運(yùn)行時(shí)要探測(cè)信息標(biāo)識(shí),依據(jù)多個(gè)狀態(tài)變量決定運(yùn)行路徑。設(shè)有n個(gè)信息標(biāo)識(shí),由它可引導(dǎo)k(k≤2 n)條路徑。采用逐個(gè)辨識(shí)的方法。需n次;而如果將這n個(gè)信息標(biāo)識(shí)作為矢量地址看待,與基地址共同形成物理地址,即可直接轉(zhuǎn)移。當(dāng)k遠(yuǎn)小于2n時(shí),可采用分段的方法,將n個(gè)信息標(biāo)識(shí)中的一部分用作矢量地址,以減少對(duì)程序存儲(chǔ)器的占用。
(4)便于多進(jìn)程切換的指令能力
上述間址移機(jī)制,不但可以支持?jǐn)?shù)據(jù)驅(qū)動(dòng)的程序控制,也適宜于按時(shí)間片分配進(jìn)程運(yùn)行。當(dāng)系統(tǒng)分配給該進(jìn)程的時(shí)間用完,進(jìn)入高優(yōu)先級(jí)的系統(tǒng)定時(shí)器中斷。此時(shí),堆棧頂保存的是被中斷進(jìn)程的斷點(diǎn)地址,只要將其作為該進(jìn)程的下次入口地址保存起來(lái),并執(zhí)行完該進(jìn)程的斷點(diǎn)保護(hù)工作后,再遞增指針,指向下一進(jìn)程的入口地址,即可在定時(shí)器中斷返回之后,自動(dòng)將下進(jìn)程投入運(yùn)行。
(5)支持循環(huán)任務(wù)隊(duì)列的功能
并發(fā)運(yùn)行的多任務(wù),數(shù)目會(huì)發(fā)生變化。微控制器應(yīng)提供支持循環(huán)任務(wù)隊(duì)列的指令,例如前面所說(shuō)的指針增減一等于某值轉(zhuǎn)移指令,可實(shí)現(xiàn)任意位置與長(zhǎng)度的循環(huán)隊(duì)列管理,便于正反雙向遍歷。對(duì)于多任務(wù)處理,各進(jìn)程所需的循環(huán)隊(duì)列長(zhǎng)度會(huì)不同。如果指令格式規(guī)定比較值必須是固定的常數(shù),則必須為不同的進(jìn)程編寫惟有比較值不同而功能完全一樣的代碼段,顯然并合理。較好解決方法是間址寄存器支持訪問變量。
(6)二級(jí)指針管理寄存器塊
一些常用的內(nèi)部存儲(chǔ)單元可組成工作組的形式,用二級(jí)指針指明當(dāng)前工作組。在多進(jìn)程并發(fā)運(yùn)行時(shí),這種方式可加快數(shù)據(jù)切換等斷點(diǎn)保護(hù)和恢復(fù)工作,并減少指令。
上述指令,在有些微控制器的指令集,已有體現(xiàn),在此提出,供編制實(shí)時(shí)多任務(wù)應(yīng)用程序設(shè)計(jì)者在選用微控制器時(shí)參考。有些指令尚未實(shí)現(xiàn),出來(lái)供微控制器設(shè)計(jì)者參考。
隨著微電子技術(shù)的發(fā)展,這些指令的功能并非難以實(shí)現(xiàn),只是要在功能與功能、功能與成本之間進(jìn)行權(quán)衡,或許只能在某些高檔的微控制器中才能支持。隨著專用系統(tǒng)概念的增強(qiáng),適用于實(shí)地多任務(wù)系統(tǒng)應(yīng)用的微控制器,將使得應(yīng)用系統(tǒng)設(shè)計(jì)者更靈活、更迅速地開發(fā)出低成本、高性能的產(chǎn)品。