
各種帶寬的對(duì)比如下:

進(jìn)一步分析可知,操作多字節(jié)變量時(shí),重入函數(shù)也只需要計(jì)算一次變量地址。故進(jìn)行單字節(jié)變量存取時(shí),重入堆棧的存取帶寬就是最低值。
綜上所述,相對(duì)重入堆棧,存取單字節(jié)變量過(guò)程中,頁(yè)函數(shù)的帶寬加速比達(dá)到最大值Rmax=3.75,如式(4)所示。這表示相對(duì)于過(guò)去的重入函數(shù),頁(yè)函數(shù)具有更高的執(zhí)行效率和實(shí)時(shí)性。

另外,如果頁(yè)函數(shù)不需要計(jì)算和操作重入堆棧指針,則不需要圖1中函數(shù)入口和出口處的指針操作(C?ADDXBP),可再次節(jié)省22個(gè)(首尾各11)指令周期。
(2)較好的安全性
配置頁(yè)面的工作是由操作系統(tǒng)完成的。在使用基于頁(yè)的多任務(wù)開發(fā)中,任務(wù)本身不能更換頁(yè)面;因此,私有變量的操作只在當(dāng)前頁(yè)進(jìn)行,不會(huì)影響到其他頁(yè)或其他任務(wù)。這樣的程序封裝體現(xiàn)了較好的安全性。
3.2 存在問(wèn)題與解決方法
(1)容量的限制
8051的硬件決定了頁(yè)面大小為256字節(jié),不可變更。這使得“頁(yè)面容量限制”成為基于頁(yè)的多任務(wù)開發(fā)中最需要考慮的問(wèn)題。
存儲(chǔ)器的一頁(yè)為256字節(jié),與最小模式下8051的內(nèi)部數(shù)據(jù)空間(IDATA空間)大小相同。因此,筆者認(rèn)為頁(yè)變量的256字節(jié)能滿足最小模式任務(wù)的需要。
對(duì)于需求超過(guò)256字節(jié)的任務(wù),可在頁(yè)面外的外部存儲(chǔ)器中申請(qǐng)后備空間。只要指向后備空間的指針在頁(yè)面內(nèi),則該后備空間仍是私有的,滿足重入條件,其結(jié)構(gòu)示意圖如圖4所示。雖然后備存取區(qū)使用指針操作,但不需要計(jì)算變量地址,因此后備存儲(chǔ)區(qū)存取速度優(yōu)于重入堆棧。

(2)工具的限制
目前,Keil C51開發(fā)工具不提供多任務(wù)以及多頁(yè)面支持。這主要體現(xiàn)在兩點(diǎn):
①需要新的函數(shù)庫(kù)。現(xiàn)有的大量函數(shù)庫(kù)不支持頁(yè)函數(shù)方式重入。準(zhǔn)確地說(shuō),大部分函數(shù)庫(kù)不支持任何方式的重入——即使使用重入堆棧,函數(shù)庫(kù)問(wèn)題也依然存在。目前的解決方法只有程序員根據(jù)需要編寫新的頁(yè)函數(shù)庫(kù)。
②一個(gè)項(xiàng)目中只允許存在一個(gè)pdata頁(yè)面,不能按任務(wù)將變量安排在不同的邏輯頁(yè)面上。其后果是,多任務(wù)開發(fā)中,編譯鏈接工具只在同一個(gè)頁(yè)面中分配所有任務(wù)的頁(yè)變量,導(dǎo)致存儲(chǔ)器迅速溢出。
問(wèn)題②的解決方案是:為使每個(gè)任務(wù)具有自己的工作頁(yè),為每個(gè)任務(wù)單獨(dú)建立工程,并使用COMPACT方式進(jìn)行編譯。各個(gè)任務(wù)工程之間和操作系統(tǒng)之間使用絕對(duì)地址表傳遞系統(tǒng)調(diào)用和任務(wù)入口地址。絕對(duì)地址表是對(duì)一些系統(tǒng)調(diào)用的約定地址。
這些不便之處是暫時(shí)的、可克服的。
結(jié)語(yǔ)
8051主要應(yīng)用領(lǐng)域?yàn)閷?shí)時(shí)控制,因此努力提高系統(tǒng)實(shí)時(shí)性是開發(fā)者不斷追求的目標(biāo)。筆者從提高實(shí)時(shí)性的角度出發(fā),提出了一種基于頁(yè)的多任務(wù)模型。相對(duì)于目前重入堆棧多任務(wù)模型,它具有較好的實(shí)時(shí)性,也是處理重入問(wèn)題的一種新思路。
本模型已經(jīng)過(guò)Keil C5l仿真工具的一般性測(cè)試,并在W78P438芯片上實(shí)測(cè)成功,相信其結(jié)果適用于全部8051及兼容系列?紤]到8051依然廣泛應(yīng)用在多任務(wù)開發(fā)中,本文中的新模型值得推廣。





