新聞中心

EEPW首頁(yè) > 光電顯示 > 設(shè)計(jì)應(yīng)用 > 內(nèi)存受限系統(tǒng)的漢字顯示設(shè)計(jì)研究

內(nèi)存受限系統(tǒng)的漢字顯示設(shè)計(jì)研究

作者: 時(shí)間:2009-03-04 來(lái)源:網(wǎng)絡(luò) 收藏

引言
在微電子技術(shù)、計(jì)算機(jī)技術(shù)不斷發(fā)展的推動(dòng)下,儀器儀表工業(yè)也發(fā)生了巨大的變化?,F(xiàn)代儀表將技術(shù)引入到儀器儀表的測(cè)試和控制中,使儀器儀表向著自動(dòng)化智能化的方向發(fā)展,這已經(jīng)成為當(dāng)今儀器儀表的一種趨勢(shì)。新型的儀器儀表設(shè)備將朝著操作簡(jiǎn)便、小型化、便攜式、現(xiàn)場(chǎng)實(shí)時(shí)分析、高速運(yùn)算等方向發(fā)展。由于中文界面友好,適合我國(guó)國(guó)情,特別是對(duì)于一些工業(yè)現(xiàn)場(chǎng)基層用戶(hù)來(lái)說(shuō),中文已經(jīng)成為普遍要求解決的問(wèn)題。出于對(duì)成本等因素的考慮,的存儲(chǔ)器容量有限,這就迫使我們必須從編程上重視的使用效能,運(yùn)用一些節(jié)約的技巧來(lái)程序。

本文引用地址:http://2s4d.com/article/169539.htm

本文通過(guò)分析一般顯示方法,并結(jié)合特點(diǎn),提出了一種能在小容量?jī)?nèi)存系統(tǒng)中使用的顯示的方法。

1漢字顯示的一般原理
要在上顯示漢字,首先需要獲得漢字顯示的代碼。一般方法是從計(jì)算機(jī)中文操作系統(tǒng)擁有的龐大的漢字庫(kù)中提取所需的漢字顯示字庫(kù),存儲(chǔ)在嵌入式應(yīng)用系統(tǒng)中以備使用[1]。

在漢字庫(kù)中,漢字字模大多以國(guó)標(biāo)GN2313-80的區(qū)位碼為索引存放。國(guó)標(biāo)碼與ASCⅡ碼屬同一制式,ASCⅡ碼用一個(gè)字節(jié)編碼,碼值范圍為00H-7FH,其中94個(gè)可見(jiàn)字符的碼值范圍為21H-7EH,國(guó)標(biāo)碼也是以94個(gè)ASCⅡ可見(jiàn)字符代碼為基集(碼值范圍為21H-7EH),用兩個(gè)字節(jié)組成國(guó)標(biāo)碼,其中高字節(jié)表征區(qū),低字節(jié)表征位,共有94個(gè)區(qū),每區(qū)又分94個(gè)位,區(qū)和位編號(hào)均為十進(jìn)制的01-94,對(duì)應(yīng)的國(guó)標(biāo)碼碼值范圍為21H-7EH,因此國(guó)標(biāo)碼與區(qū)位號(hào)之間存在下列關(guān)系:國(guó)標(biāo)碼高字節(jié)=區(qū)號(hào)+20H;國(guó)標(biāo)碼低字節(jié)=位號(hào)+20H。

漢字顯示點(diǎn)陣字庫(kù)是漢字顯示點(diǎn)陣代碼(也稱(chēng)字模)的集合,中文操作系統(tǒng)中最常用的是16*16點(diǎn)陣字庫(kù)(通常文件名為HZK16),其點(diǎn)陣代碼為橫向排列。由于漢字顯示點(diǎn)陣字庫(kù)中的顯示點(diǎn)陣代碼一般按區(qū)位碼順序存放,所以提取字模時(shí)只要求出某漢字的偏移地址(顯示點(diǎn)陣代碼相對(duì)于漢字顯示點(diǎn)陣字庫(kù)首地址的字節(jié)數(shù))即可,偏移地址值與漢字區(qū)位碼有以下轉(zhuǎn)換關(guān)系[2]:

偏移地址=((區(qū)號(hào)-1)*94+(位號(hào)-1))*32。

在嵌入式系統(tǒng)中,為了實(shí)現(xiàn)字符(半個(gè)漢字)、漢字的混合顯示,通常對(duì)提取的橫向字模加以轉(zhuǎn)換形成縱向排列的字模。按照上述規(guī)則將字模從計(jì)算機(jī)中文操作系統(tǒng)提取出來(lái)加以轉(zhuǎn)換存入到嵌入式系統(tǒng)中以供使用[3]。

2嵌入式系統(tǒng)中顯示漢字存在的問(wèn)題及解決方法
嵌入式系統(tǒng)由于受成本、體積等因素的影響,其配置的存儲(chǔ)器容量一般都非常有限。這種存儲(chǔ)器容量受到限制的系統(tǒng)又稱(chēng)為內(nèi)存系統(tǒng)。在小型智能儀器儀表一類(lèi)嵌入式設(shè)備中,內(nèi)存有限,強(qiáng)固耐用的要求高,顯示漢字首先要有包含所有會(huì)被顯示的漢字和字符構(gòu)成的字庫(kù),在前面所提到的漢字顯示的一般原理中,嵌入式系統(tǒng)中存儲(chǔ)的是從計(jì)算機(jī)中文操作系統(tǒng)擁有的龐大的漢字庫(kù)中提取的漢字區(qū)位碼信息,由于漢字?jǐn)?shù)目繁多,導(dǎo)致區(qū)位碼信息占用大量?jī)?nèi)存。為了節(jié)省內(nèi)存空間,需要將字模依照一定的方法存儲(chǔ)在嵌入式系統(tǒng)內(nèi)存中,也就是建立精簡(jiǎn)的字庫(kù)。在建立精簡(jiǎn)的字庫(kù)時(shí)主要面臨兩個(gè)問(wèn)題:

(1)相同的漢字或字符會(huì)反復(fù)被使用,在不同的句子中重復(fù)出現(xiàn)多次,如果以句子字符串為單位存儲(chǔ),雖然會(huì)加快句子輸出速度,但也會(huì)大大增加程序?qū)?nèi)存的需求。為了解決這個(gè)問(wèn)題,使用如下方法:采用單字排列構(gòu)成字庫(kù),一個(gè)漢字字模信息只存儲(chǔ)一次,任何需要使用它的地方,共享同一個(gè)字模。應(yīng)用此方法后,雖然會(huì)增加程序的復(fù)雜程度,但卻極大地節(jié)省了內(nèi)存,提高了內(nèi)存的利用效率。

(2)字庫(kù)在程序中占有很大的比例,需要大量?jī)?nèi)存,并且要顯示的內(nèi)容除漢字外還有一些字符,而字符字模只有16個(gè)字節(jié),是漢字字模的一半。正如編譯器或匯編器往往令數(shù)據(jù)對(duì)齊以使CPU指令集更便捷的訪(fǎng)問(wèn)對(duì)齊數(shù)據(jù)一樣[4],如果存儲(chǔ)字符字模時(shí)把其16個(gè)字節(jié)添零擴(kuò)充為32個(gè)字節(jié),計(jì)算偏移地址直接用字序號(hào)乘上32再加上字庫(kù)首地址即可,但這種方法只適用于字符比較少的情況,當(dāng)字符較多時(shí)將浪費(fèi)大量?jī)?nèi)存。

解決上述問(wèn)題采取如下方法:在符合系統(tǒng)要求的前提下,逐一考慮每個(gè)字和字符,考慮其中有多少信息是真正必須存儲(chǔ)的,也就是說(shuō)盡量精簡(jiǎn)字庫(kù),若有相同意義的字或詞就只保留一種而舍棄其它的同義字詞。此外,將字庫(kù)建在程序末尾,先依次存儲(chǔ)漢字字模,每個(gè)漢字字模占用32個(gè)字節(jié),然后依次存儲(chǔ)字符字模,每個(gè)字符字模占用16個(gè)字節(jié),并給漢字和字符統(tǒng)一編上序號(hào)(見(jiàn)圖1)。并為每一條輸出的漢字信息建立一個(gè)索引,索引由每條漢字信息中各個(gè)漢字和字符的序號(hào)組成。顯示一句話(huà)時(shí),只需獲得這句話(huà)中各個(gè)漢字和字符的序號(hào),根據(jù)序號(hào)Q先判斷需要顯示的是漢字還是字符,如果為漢字,則根據(jù)公式:字模地址=字庫(kù)首地址+32*Q,如果為字符,則根據(jù)公式:字模地址=字庫(kù)首地址+32*X+(Q-X)*16,求得它們的字模地址,依次將它們的字模復(fù)制并存入一個(gè)緩沖區(qū),再根據(jù)原理將緩沖區(qū)字模送到顯示模塊端口[5]。程序流程見(jiàn)圖2。

通過(guò)以上方法給程序員造成一種假象:即他可以擁有同一份數(shù)據(jù)的多份副本,而又不必浪費(fèi)內(nèi)存,使得系統(tǒng)內(nèi)存的總需求量降低,而且相同數(shù)量的數(shù)據(jù)可以隨機(jī)存儲(chǔ)、更新、訪(fǎng)問(wèn)。但是,根據(jù)字序號(hào)找到一句話(huà)的各個(gè)字模再統(tǒng)一存入緩沖區(qū)勢(shì)必降低系統(tǒng)的時(shí)間效率,同時(shí)也需要程序員花費(fèi)心力來(lái)完成不那么直觀的代碼。而且系統(tǒng)需要擴(kuò)充字庫(kù)時(shí),不能直接在字庫(kù)末尾補(bǔ)充,而應(yīng)在漢字字模末尾添加漢字字模,在字符字模末尾添加字符字模,再依次重新編寫(xiě)字序號(hào)。此外,顯示句子的索引也需要修改,這就降低了系統(tǒng)的擴(kuò)展性。不過(guò)在本文討論的節(jié)省內(nèi)存問(wèn)題上,衡量利弊,這種方法還是有效的。

3結(jié)論
在內(nèi)存系統(tǒng)中建立精簡(jiǎn)的字庫(kù)是顯示漢字的關(guān)鍵步驟。本文通過(guò)有關(guān)算法,在分析內(nèi)存字庫(kù)所需存儲(chǔ)信息的特點(diǎn)的基礎(chǔ)上,提出了一種節(jié)省內(nèi)存的字庫(kù)建立方法。依照此法在所的單片機(jī)電路上進(jìn)行編程,能夠?qū)崿F(xiàn)漢字的顯示,且明顯減少了系統(tǒng)的內(nèi)存,滿(mǎn)足了實(shí)用的要求,所以,本文算法具有一定的實(shí)際意義。

linux操作系統(tǒng)文章專(zhuān)題:linux操作系統(tǒng)詳解(linux不再難懂)


評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉