淺析嵌入式存儲(chǔ)系統(tǒng)設(shè)計(jì)方法
為此,將公共代碼段中的程序單獨(dú)編譯,并且在鏈接、定位目標(biāo)代碼時(shí),給操作系統(tǒng)和公共庫(kù)函數(shù)的每個(gè)函數(shù)在0x0000~0x7FFFH內(nèi)分別指定一個(gè)固定的首地址。鑒于用戶程序可能調(diào)用這些函數(shù),需要為這些函數(shù)分別編寫(xiě)一個(gè)相同類型的同名偽函數(shù),每個(gè)偽函數(shù)僅包含一條到真實(shí)函數(shù)(入口地址已知)的轉(zhuǎn)移指令,所有這些函數(shù)都存放在一個(gè)被稱為虛擬接口的頭文件中。虛擬接口文件與用戶程序一起編譯,完成用戶程序與操作系統(tǒng)兩次編譯的接口。顯然這種方法僅占用了用戶區(qū)的極少量代碼空間,而絲毫沒(méi)有浪費(fèi)用戶數(shù)據(jù)區(qū),同時(shí)又實(shí)現(xiàn)了地址復(fù)用。
公共代碼段和操作系統(tǒng)的數(shù)據(jù)區(qū)特殊的對(duì)應(yīng)關(guān)系(見(jiàn)圖4),很容易通過(guò)P2端口線來(lái)指定。由單片機(jī)外部程序區(qū)訪問(wèn)時(shí)序(圖 5)可知,PSEN的上升沿后數(shù)據(jù)總線A0~A7上開(kāi)始出現(xiàn)指令或指令操作數(shù),此時(shí)的地址線A15指示當(dāng)前訪問(wèn)的是公共代碼段(對(duì)應(yīng)數(shù)據(jù)區(qū)高64k)還是其他程序段(對(duì)應(yīng)數(shù)據(jù)區(qū)低64k),因此在PSEN上升沿鎖存地址線A15,用它可以選擇不同的數(shù)據(jù)存儲(chǔ)器空間。
3 存儲(chǔ)系統(tǒng)的性能分析
本文基于虛擬存儲(chǔ)系統(tǒng)思想實(shí)現(xiàn)了嵌入式存儲(chǔ)系統(tǒng)中大容量存儲(chǔ)器的擴(kuò)展。不難看出系統(tǒng)的擴(kuò)展余地受端口線的限制。由于在同一塊芯片中構(gòu)造圖2所示的結(jié)構(gòu),需要多使用一根端口線,因此對(duì)于8051系列使用整個(gè)P1口可以將系統(tǒng)的程序虛擬空間擴(kuò)展至8M字節(jié)。數(shù)據(jù)存儲(chǔ)區(qū)擴(kuò)展的最大容量還與程序在編譯時(shí)所被分成塊的數(shù)目有關(guān),最大可達(dá)16M字節(jié),這在單片機(jī)嵌入式存儲(chǔ)系統(tǒng)中已經(jīng)是足夠大了。
程序在調(diào)用不同頁(yè)面的函數(shù)時(shí)需要額外的軟件切換周期,頻繁的頁(yè)面切換會(huì)降低系統(tǒng)的性能,因此編譯時(shí)應(yīng)仔細(xì)選擇函數(shù),盡可能將相關(guān)的函數(shù)分配在同一頁(yè)中。
數(shù)據(jù)存儲(chǔ)區(qū)切換是由硬件實(shí)現(xiàn)的,頁(yè)面切換并不降低系統(tǒng)性能。由于操作系統(tǒng)與用戶程序數(shù)據(jù)區(qū)相互獨(dú)立,對(duì)用戶來(lái)說(shuō)整個(gè)64k空間都是可用的,這就增加了操作系統(tǒng)的透明性。
4結(jié)論
嵌入式存儲(chǔ)系統(tǒng)由于它的專用性和特殊性,系統(tǒng)的軟硬件設(shè)計(jì)都與傳統(tǒng)的計(jì)算機(jī)系統(tǒng)設(shè)計(jì)方法有所不同。但進(jìn)行嵌入式系統(tǒng)設(shè)計(jì)時(shí)仍然很有必要借鑒傳統(tǒng)計(jì)算機(jī)系統(tǒng)體系結(jié)構(gòu)成熟的設(shè)計(jì)方法,“量體裁衣”為我所用。作者在進(jìn)行嵌入式存儲(chǔ)系統(tǒng)平臺(tái)設(shè)計(jì)時(shí)借鑒了傳統(tǒng)計(jì)算機(jī)虛擬存儲(chǔ)思想來(lái)擴(kuò)展存儲(chǔ)系統(tǒng),并在實(shí)際項(xiàng)目中得以應(yīng)用,證明這種方法是非常有效的。
評(píng)論