1 引言 隨著(zhù)人們物質(zhì)生活的極大豐富,旅行已經(jīng)成為了日常生活中重要的一部分。在戶(hù)外旅行中最重要的信息莫過(guò)于位置信息,于是地理信息系統(GIS)、衛星定位系統(GPS)、導航系統逐漸開(kāi)始走入人們的視線(xiàn),GPS車(chē)輛導航系統,腕表式GIS系統等都為人們的出行提供了極大的方便。這些產(chǎn)品在外形上要滿(mǎn)足體積小、便于攜帶的要求;在性能上要滿(mǎn)足信息完備、實(shí)時(shí)性強、處理速度快的要求。綜合考慮以上因素,嵌入式應用成為這些產(chǎn)品的首選。嵌入式芯片體積小,耗電低,適合開(kāi)發(fā)功能單一的便攜式產(chǎn)品,但是和臺式機的CPU相比,嵌入式處理器的速度要慢得多。在嵌入式芯片上開(kāi)發(fā)GIS系統時(shí),信息完備性要求使得系統的數據處理量非常大,因此處理器速度的限制將使系統的性能受到嚴重的影響。例如,在嵌入式GIS系統的應用中,地圖漫游速度是衡量系統性能優(yōu)劣的一項重要指標,地圖漫游的速度在很大程度上受限于嵌入式CPU的處理速度,因此在嵌入式GIS設計中,如何提高地圖的瀏覽速度就成為一個(gè)重要課題。 提高地圖瀏覽速度應該從以下幾個(gè)方面著(zhù)手: (1)提高芯片的處理速度 這是從選型時(shí)就應該考慮的問(wèn)題,一旦芯片選定,這種方法就失去了作用 (2)設計地圖數據結構時(shí)對數據的有效性和冗余性進(jìn)行綜合考慮 這種方法是從減小地圖數據量從而減小處理器的工作負荷考慮的,但地圖信息完備性要求使這種改進(jìn)對于地圖漫游速度的提高有限 (3)提高對芯片的利用率 本文即從這個(gè)方面考慮,采用雙緩存技術(shù),利用芯片的空閑時(shí)間進(jìn)行數據的預處理,達到提高芯片利用率的目的,從而加快地圖漫游速度 2 雙緩存技術(shù)實(shí)現地圖快速漫游的基礎 基于對圖像的開(kāi)窗處理顯示矢量地圖是很多臺式機上的GIS系統采用的方法之一,這種算法的主要思想是:從數字地圖數據庫中提取出顯示范圍內的地圖要素,將描述這些地理要素的坐標轉換成屏幕坐標,用顯示窗口對這些數據進(jìn)行剪裁,將剪裁后的地理要素直接繪制在屏幕窗口內。這種算法的優(yōu)點(diǎn)是算法簡(jiǎn)單,實(shí)現方便。同時(shí),由于臺式機CPU處理速度能夠滿(mǎn)足實(shí)時(shí)剪裁圖像的要求,使得用該算法實(shí)現的GIS系統在臺式機上的實(shí)時(shí)性不受影響。但是對于嵌入式系統來(lái)說(shuō),速度限制是不容忽視的問(wèn)題。如果仍然用同樣的方法實(shí)現地圖漫游,則會(huì )發(fā)現地圖的漫游成為難以忍受的過(guò)程,在屏幕上將地圖移動(dòng)實(shí)際距離為兩公里的路程,需要的時(shí)間是在臺式機上實(shí)現同樣過(guò)程的十倍多。究其原因,可以發(fā)現速度的瓶頸在于兩點(diǎn):1:嵌入式GIS產(chǎn)品從便攜式角度考慮,大多采用液晶顯示屏,液晶屏的顯示是由其自帶的緩存和顯示處理器存儲處理的,屏幕顯示數據通過(guò)異步方式和系統處理器間實(shí)現通信,導致液晶屏顯示緩存的讀寫(xiě)慢,產(chǎn)生系統速度的瓶頸,這使得直接在顯示緩存上繪制地圖需要花費很長(cháng)的時(shí)間;2:預處理數據量大,預處理包括對地理要素的讀取、坐標的轉換以及裁剪,因此預處理活動(dòng)占用系統時(shí)間長(cháng)。這兩點(diǎn)使得在單任務(wù)嵌入式操作系統中,地圖漫游的過(guò)程不僅很緩慢而且常常需要停頓下來(lái)等待數據的處理和顯示。因此,要實(shí)現嵌入式系統中地圖的平滑快速漫游,必須首先解決好這兩個(gè)問(wèn)題。 讀寫(xiě)顯示緩存的速度極大的影響了地圖的繪圖速度。在筆者開(kāi)發(fā)的車(chē)載導航系統中,使用分辨率為640*480的液晶顯示屏,在這樣的屏幕上繪制一幅地圖數據經(jīng)測試平均需要400毫秒;而系統RAM的讀寫(xiě)速度是幾十Mbytes/s的速度,也就是說(shuō)在系統RAM上繪制同樣大小的區域僅需要幾十毫秒甚至幾毫秒。因此,我們采用這樣的方法加快繪圖過(guò)程的速度:首先在系統內存中開(kāi)辟專(zhuān)門(mén)用于繪制地圖圖像的空間,稱(chēng)之為虛擬屏幕,虛擬屏幕的范圍應遠大于實(shí)際顯示屏的顯示范圍,同時(shí),我們在顯示緩存中開(kāi)辟和虛擬屏幕大小相同的空間用于緩存地圖圖像。這樣,我們首先用開(kāi)窗法在虛擬屏幕上繪制地圖,繪制操作是對于系統RAM的讀寫(xiě),速度很快,然后從虛擬屏幕上將實(shí)際屏幕上應該顯示的地圖圖像拷貝到緩存空間,圖像拷貝要花費一定的時(shí)間,但是虛擬屏幕遠大于實(shí)際屏幕范圍,這樣的拷貝工作不需要每移動(dòng)一步都進(jìn)行一次,而是積累一段時(shí)間以后才進(jìn)行一次拷貝。顯示屏幕上的圖像實(shí)際上是顯示緩存的一個(gè)窗口,也就是從顯示緩存的某個(gè)地址開(kāi)始的一塊連續空間。因此,使用了顯示緩存后,地圖的移動(dòng)過(guò)程就是在緩存空間上移動(dòng)圖像的起始指針的過(guò)程(見(jiàn)圖1)。我們知道,指針移動(dòng)是幾乎沒(méi)有時(shí)間消耗的,因此,這樣的方法使得當虛擬屏幕上的一幅地圖組織好并拷貝到顯示緩存空間之后,地圖的移動(dòng)滿(mǎn)足快速、實(shí)時(shí)的要求。此時(shí)速度的問(wèn)題就轉移到在虛擬屏幕上組織地圖和將虛擬屏幕的圖像拷貝到顯示緩存空間的過(guò)程中,也就是說(shuō),此時(shí)地圖的移動(dòng)是快速但并不平滑的,因為虛擬屏幕的組織和圖像拷貝將引起地圖移動(dòng)的停頓。雖然對于屏幕的顯示緩存來(lái)說(shuō),圖像拷貝的速度遠大于單點(diǎn)讀寫(xiě)的速度,但是,我們仍然無(wú)法滿(mǎn)意它所造成的地圖移動(dòng)的不連續的后果。因此,我們仍然需要進(jìn)一步采取措施解決組織虛擬屏幕和圖像拷貝的時(shí)間消耗,這使得我們在緩存法的基礎上研究了一種新的顯示技術(shù)——雙緩存法——來(lái)實(shí)現地圖的快速漫游。 3 利用雙緩存技術(shù)實(shí)現地圖快速漫游 3.1 雙緩存技術(shù)實(shí)現地圖平滑漫游的基本原理 雙緩存技術(shù)實(shí)現地圖平滑漫游是在緩存法的基礎上提出的一種為解決嵌入式系統下,使用遙控器連續移動(dòng)地圖,地圖漫游速度慢或不連續的問(wèn)題的新方法。雙緩存的方法解決了緩存法實(shí)現地圖漫游中遺留下來(lái)的問(wèn)題:移動(dòng)過(guò)程中的停頓問(wèn)題。它的實(shí)現基礎在于:即使是連續發(fā)送移動(dòng)命令,在遙控器的兩個(gè)命令脈沖之間,仍然存在一定的時(shí)間間隔,根據地圖移動(dòng)的方向趨勢,利用命令脈沖之間的時(shí)間間隔進(jìn)行數據組織和圖像拷貝工作是雙緩存法的實(shí)現依據。圖2是遙控器連續移動(dòng)命令脈沖的時(shí)序和單緩存實(shí)現地圖移動(dòng)過(guò)程的對應。 圖1 移動(dòng)命令時(shí)序 從上圖我們可以看出: (1)兩次連續的移動(dòng)命令之間的時(shí)間至少為190ms, 實(shí)際顯示圖像在虛擬屏幕的范圍之內時(shí),圖像的移動(dòng)是顯示緩存指針移動(dòng)的過(guò)程,處理器在這段時(shí)間內空閑。 (2)實(shí)際顯示圖像達到虛擬屏幕的邊界時(shí),如果連續接收到移動(dòng)的命令,則只能在以新的顯示中心重新組織虛擬屏幕上的地圖并將虛擬屏幕上的圖像拷貝到顯示緩存之后,才能繼續移動(dòng)顯示緩存的指針,在此過(guò)程中,起碼有三個(gè)移動(dòng)命令沒(méi)有及時(shí)處理。 從以上兩點(diǎn)可以得出,在單緩存法實(shí)現地圖移動(dòng)的過(guò)程中,處理器的并不總處于忙狀態(tài),而是時(shí)忙時(shí)閑,因此如果將虛擬屏幕數據的組織和圖像的拷貝工作平均分配到各個(gè)移動(dòng)命令脈沖之間的處理器空閑時(shí)段,就能解決達到移動(dòng)邊界時(shí),要長(cháng)時(shí)間等待數據處理的問(wèn)題。 3.2 雙緩存實(shí)現地圖平滑移動(dòng)的方法及實(shí)現 利用雙緩存技術(shù)實(shí)現地圖平滑移動(dòng)的內存空間分配圖如下: 圖2 雙緩存實(shí)現地圖平滑移動(dòng) 如上圖所示,雙緩存實(shí)現地圖漫游的方法是:將顯示緩存劃分為兩個(gè)和虛擬屏幕顯示范圍相同的緩存空間,我們稱(chēng)之為緩存A,和緩存B。定義預處理邊界為范圍小于虛擬屏幕范圍的一個(gè)內邊界。當顯示屏幕的圖像移動(dòng)到預處理邊界時(shí),如果仍然接受到同一方向的連續移動(dòng)命令,則開(kāi)始在虛擬屏幕組織移動(dòng)方向上的新圖像,并拷貝該圖像到緩存B;同時(shí),在緩存A上,屏幕指針移動(dòng)的過(guò)程仍在進(jìn)行,當顯示屏幕移動(dòng)到緩存A的實(shí)際邊界時(shí),緩存B上已經(jīng)準備好了顯示方向上的新地圖,此時(shí)將屏幕指針跳到緩存B相應位置的地址,就可以保證地圖移動(dòng)動(dòng)作的連續性。 雙緩存法實(shí)現地圖平滑移動(dòng)的過(guò)程流程圖描述如圖4所示。 圖3雙緩存法實(shí)現地圖移動(dòng)過(guò)程示意圖 在采用雙緩存法實(shí)現地圖的平滑漫游的處理過(guò)程中,預處理邊界的選取是一個(gè)決定其效果的重要因素,預處理邊界如果和實(shí)際邊界離得太近,則預留的時(shí)間不足以完成所有的預處理任務(wù),無(wú)法滿(mǎn)足平滑移動(dòng)的要求,而如果預處理邊界范圍太小,則使得預測方向可信度降低,有可能使預處理過(guò)程無(wú)效。該邊界的選取和系統讀寫(xiě)屏幕的速度以及遙控器的靈敏度都是相關(guān)的,選取方法同時(shí)和預測方向的算法也有一定的聯(lián)系,因此仁者見(jiàn)仁智者見(jiàn)智,可以根據各自系統設計的不同進(jìn)行選擇。 4 實(shí)驗與結論 筆者在開(kāi)發(fā)嵌入式環(huán)境下車(chē)載導航系統的軟件中使用了雙緩存法實(shí)現地圖漫游,在使用該方法之前,對開(kāi)窗法、緩存法和雙緩存法實(shí)現的地圖移動(dòng)的速度的進(jìn)行了比較試驗,表1是試驗結果。該試驗是在同一幅地圖數據,同樣的數據量下,移動(dòng)同樣的距離得出的: 表1幾種漫游方法顯示速度試驗 移動(dòng)距離(地圖距離) 2KM 5KM 開(kāi)窗法 11.3S 25.5S 緩存法 4.6S 9.9S 雙緩存法 1.2S 2.8S 在我們的地圖漫游軟件采用了這種雙緩存法來(lái)實(shí)現地圖的平滑移動(dòng)后,人們從視覺(jué)上幾乎感覺(jué)不到地圖移動(dòng)的停頓,因此系統的整體性能得以提高。 雙緩存法是在嵌入式系統中實(shí)現地圖平滑顯示的一種實(shí)用方法,但用此法是以犧牲內存為代價(jià)提高地圖的漫游速度,因此采用這種算法的系統必須有足夠的內存(包括系統內存和顯示緩存),預處理邊界也需要根據系統要求科學(xué)選取。同時(shí)這個(gè)算法的實(shí)現代碼也比前兩種復雜,因此,大家可以根據自己系統的實(shí)際情況進(jìn)行算法的選擇。 |