在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM Linux的Gameboy模擬器移植和優(yōu)化

            ARM Linux的Gameboy模擬器移植和優(yōu)化

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

            提供Framebuffer支持

            Framebuffer技術(shù)提供了一個(gè)訪問(wèn)物理圖形設(shè)備的定義良好的接口,本文構(gòu)建的平臺(tái)下采用的是Qt系統(tǒng)的嵌入式版本,它是基于Framebuffer的, Gnuboy要在該平臺(tái)下運(yùn)行,必須提供對(duì)Framebuffer的支持。通過(guò)訪問(wèn)/dev/ fb0來(lái)取得系統(tǒng)framebuffer中用于顯示圖像的數(shù)據(jù)和進(jìn)行處理。在Gnuboy中調(diào)用游戲畫面的Framebuffer地址和掃描方法也需要作響應(yīng)的修改。

            修改Framebuffer地址,也就是獲得游戲畫面的開(kāi)始地址在內(nèi)存中的位置。針對(duì)采用的LCD 的分辨率, 需要在Gnuboy中計(jì)算Framebuffer地址處做出相應(yīng)修改。對(duì)于本平臺(tái)中采用的LCD, Gnuboy刷新處理方法是從第一行開(kāi)始,逐行刷新,同時(shí)由于一個(gè)像素采用兩個(gè)字節(jié),因此在逐行刷新時(shí),每次寫兩個(gè)字節(jié)。

            數(shù)據(jù)存儲(chǔ)格式和字符串到64位整數(shù)轉(zhuǎn)換

            在arm 下可配置成大數(shù)端或者小數(shù)端格式來(lái)保存和處理整數(shù)數(shù)值,在Gnuboy中與數(shù)值存儲(chǔ)字節(jié)順序有關(guān)的代碼需要與之對(duì)應(yīng)。

            明顯缺乏用來(lái)把整數(shù)字符串轉(zhuǎn)換為64位整數(shù)的函數(shù),如果字符串參數(shù)突破32位的極限,就有可能出問(wèn)題,因此在Gnuboy需要提供字符串到64位整數(shù)的的轉(zhuǎn)換函數(shù)。

            設(shè)置啟動(dòng)路徑和編譯

            在用戶已經(jīng)選擇好游戲Rom,點(diǎn)擊launch simulator按鈕觸發(fā)啟動(dòng),進(jìn)入游戲功能,因此在Gnuboy代碼中需要獲得rom的絕對(duì)路徑,由于QT操作系統(tǒng)無(wú)法在代碼中直接運(yùn)行qtop iagnuboy命令,因此需要給出該可執(zhí)行文件的絕對(duì)路徑。

            源代碼修改好以后,在Makefile中設(shè)定交叉編譯器: CC= arm - linux - gcc, CXX = arm - linux - g + +。編譯時(shí)要用到針對(duì)的函數(shù)庫(kù)可以把函數(shù)庫(kù)放在一個(gè)自己建的一個(gè)目錄,為了讓gcc 在搜索函數(shù)庫(kù)時(shí)到指定的目錄中尋找,可在Makefile的通過(guò)- L參數(shù)添加存放針對(duì)arm函數(shù)庫(kù)的目錄。例如QTOP IA L IBS = - L $(QPED IR) / lib。

            經(jīng)過(guò)交叉編譯后把得到的可執(zhí)行文件qtop iagnuboy和qtop iagnuboyl燒到嵌入式系統(tǒng)中可以運(yùn)行,然后不足之處是畫面速度有些慢,這正是下面要研究的問(wèn)題。

            Gnuboy在arm L inux下的

            概述

            如果說(shuō)CISC的指導(dǎo)思想之一是為了減輕編譯的負(fù)擔(dān),R ISC則向編譯提出了更高的要求,作為一種R ISC體系結(jié)構(gòu),優(yōu)化問(wèn)題顯得非常重要。從圖4 的抽象層次可以知道,對(duì)Gnuboy的優(yōu)化問(wèn)題,概括來(lái)說(shuō)是對(duì)它一些抽象代碼進(jìn)行硬件相關(guān)代碼替代的過(guò)程,并且越是底層的代碼,速度越快,這里直接用arm匯編語(yǔ)言來(lái)改寫一些原來(lái)的C函數(shù)。前面的運(yùn)行結(jié)果已經(jīng)顯示, Gnuboy的圖像顯示較慢。它的函數(shù)void lcd refreshline ( )的主要功能是使用已經(jīng)解碼好的圖像數(shù)據(jù)來(lái)完成游戲畫面的顯示。對(duì)它的優(yōu)化主要是對(duì)它里面調(diào)用的兩個(gè)用C語(yǔ)言所寫函數(shù)updatepatp ix ( )和bg scan color ( )函數(shù)的優(yōu)化。

            本文采用了與機(jī)器相關(guān)優(yōu)化的優(yōu)化技術(shù),與機(jī)器相關(guān)的優(yōu)化這里主要是寄存器分配問(wèn)題,一般寄存器分配算法是基于一種稱為圖著色技術(shù)的。給定一個(gè)無(wú)向圖G= (V , E ) ,V 是有限節(jié)點(diǎn)的集合,V = { v 1, v 2, ., v n} , E是邊的集合, E = { ( i, j ) | v i∈V , v j∈V , v i和v j相連} , 圖著色問(wèn)題要求找到一個(gè)k盡量小的所有節(jié)點(diǎn)的賦值(也稱“完全賦值”) C: V — > {1.k } , 要求在該完全賦值中, 若( i,j ) ∈E , 則C ( v i) ≠C ( vj) 。

            簡(jiǎn)化的圖著色技術(shù)應(yīng)用

            針對(duì)本文的優(yōu)化,第一階段是把C函數(shù)用偽匯編指令(即用符號(hào)寄存器Ui替代真正ARM寄存器的arm指令)改寫。

            第二階段對(duì)符號(hào)寄存器U1~Un ( n > 15)畫出相干圖并進(jìn)行著色,所謂對(duì)圖進(jìn)行著色是指給圖中的每個(gè)結(jié)點(diǎn)賦予一種顏色,而且所有相鄰的兩個(gè)結(jié)點(diǎn)都具有不同的顏色。這樣,每種顏色就對(duì)應(yīng)于處理器中的一個(gè)實(shí)際的物理寄存器,如此著色保證了所有可能發(fā)生沖突的符號(hào)寄存器都被賦予不同的物理寄存器。

            假設(shè)n + 1個(gè)符號(hào)寄存器的相干圖如圖5 ( a)所示,其中結(jié)點(diǎn)是符號(hào)寄存器,而結(jié)點(diǎn)之間的弧線表示變量的生命周期有重疊,最少需要16種顏色才能避免相連結(jié)點(diǎn)顏色有重疊。由于arm920T只有r0~r14等15個(gè)寄存器可用于存儲(chǔ)程序變量,小于16,也就是存在寄存器沖突問(wèn)題,這個(gè)時(shí)候就可以通過(guò)選擇刪除一個(gè)結(jié)點(diǎn)(如圖中Un + 1) ,也就是把U6對(duì)應(yīng)的數(shù)據(jù)存儲(chǔ)到存儲(chǔ)器中,以后再重裝入寄存器來(lái)達(dá)到對(duì)各寄存器進(jìn)行釋放的目的,見(jiàn)圖5 ( b)所示,虛線圓圈表示符號(hào)寄存器U16對(duì)應(yīng)的數(shù)據(jù)轉(zhuǎn)存到存儲(chǔ)器中。

            U1

            用上面介紹的方法對(duì)updatepatp ix和bg scan color函數(shù)進(jìn)行處理,得到的arm匯編函數(shù),用它們替換掉gnuboy源代碼中原先的C函數(shù)并進(jìn)行編譯生成可執(zhí)行文件,可執(zhí)行文件在構(gòu)建的測(cè)試板上運(yùn)行良好。下面對(duì)上面提到的優(yōu)化來(lái)進(jìn)行一些測(cè)試。

            測(cè)試評(píng)估

            用CodeWarrior forarm Developer Suite和AXD Debugger軟件測(cè)試優(yōu)化前后函數(shù)的運(yùn)行時(shí)間,結(jié)果如表1所示。圖著色技術(shù)強(qiáng)調(diào)實(shí)現(xiàn)活躍變量的100%分配,并且代碼需要寄存器數(shù)量越多,優(yōu)化效果越明顯,這從updatapatp ix和bg scan color函數(shù)的優(yōu)化中可以看出(前者代碼較后者復(fù)雜,需要存放的臨時(shí)變量也多) 。進(jìn)一步優(yōu)化gnuboy,可用類似的方法替換源代碼的另外一些影響速度較大的函數(shù)。

            運(yùn)用圖著色簡(jiǎn)化算法優(yōu)化結(jié)構(gòu)

            總結(jié)

            本文構(gòu)建了一個(gè)基于arm920T嵌入式的實(shí)驗(yàn)平臺(tái)環(huán)境, gnuboy作為一種虛擬機(jī),應(yīng)用到這樣的嵌入式環(huán)境中遇到的問(wèn)題具有一定的代表性,最需要解決的問(wèn)題是速度問(wèn)題,針對(duì)于此,本文實(shí)現(xiàn)了它在所構(gòu)建的平臺(tái)上的和一些優(yōu)化研究。

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

            linux相關(guān)文章:linux教程



            上一頁(yè) 1 2 下一頁(yè)

            評(píng)論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉