2011-11-23 17 views
1

我打算製作一個小型操作系統,並使用ARM Cortex-M3在其上運行Tetris克隆。不幸的是,我目前無法購買任何開發板,所以我將不得不使用模擬器。ARM上的圖形開發

我已經看過QEMU,它有LM3S6965EVB支持,它包含一個ARM Cortex-M3處理器。但顯然,新版本的版本與QEMU中的模型不兼容,因爲我從TI下載的任何示例似乎都不起作用。即使OLED顯示器也不同。

另一個問題是做圖形開發,因爲LM3S6965EVB的OLED顯示器的分辨率非常低。通過編輯QEMU源代碼,我可以將它提升到640x480,但由於我無法獲得任何示例,所以我不知道它是否可行。使用SSD0323的調試參數,我能看到的是它接受一些發送來初始化設備的數據,然後掛起...

我曾考慮過在QEMU中選擇另一塊電路板,但這意味着重做很多當我把手放在一個真實的設備上時,從頭開始,因爲其他設備對於像這樣簡單的東西來說太強大了。

我該怎麼辦?有沒有其他的模擬器可以幫助我完成我想要做的事情?我想開發一個小型操作系統和一些小遊戲。

在此先感謝。我一直在尋找一個解決方案,我很困難。

回答

3

您必須重做多少,部分與您的軟件/系統工程有關,您可以在需要的地方進行抽象,只需重新編寫抽象層而不是整個軟件包。實際上,您可以在主機系統上執行大部分軟件設計/測試,並且不會交叉編譯,之後才能交叉編譯爲模擬器或真實硬件。

我有一個拇指指令集模擬器,它不難編寫在這個模擬器上工作的代碼,並直接進入硬件。它僅僅是一個處理器核心,如果你希望,顯着簡單地添加外設。 http://github.com/dwelch67/thumbulator

例如,我假設你會構建下一個視頻屏幕在RAM的某個地方,然後根據硬件變化寄存器中的一些位和頁面翻轉或必須從這個幀緩衝區複製到視頻/液晶顯示器它想要什麼樣的形式。使用thumbulator,你可以在ram的某個地方(模擬內存空間)建立你的屏幕,然後當仿真寫入這樣和那樣的寄存器時,將模擬器添加到仿真器中,從ram中獲取這些字節並將它們顯示在主機上(運行仿真)一些硬件。使用sdl或基本的X調用或任何你喜歡的。我通常將快照寫入.bmp文件(非常容易編寫),然後再查看它們。後來,在硬件上,抽象的update_screen()函數將具有硬件特定的代碼來顯示該屏幕。

thumbulator只運行拇指指令,不是ARM,而不是Thumb2,thumb是臂處理器(ARMv4T和更新的除cortex-m之外)和支持thumb2擴展(cortex-m)之間的公分母。除了啓動代碼之外,整個手臂系列的編譯和編程體驗都是相同的。代碼(除了啓動代碼和硬件特定訪問以外)將運行在arm系列以及模擬器上。如果您轉到cortex-m,那麼在命令行中添加架構規範將會將構建從拇指更改爲僅拇指+拇指2指令,從而提高性能。如果您在github上瀏覽我的其他項目,您會發現這個想法一遍又一遍地重複出現,我有許多簡單的cortex-m示例,其中我使用gcc和llvm並使用拇指指令和thumb + thumb2構建相同的.C代碼。

另一種完全不同的答案是得到一個GBA(任天堂遊戲男孩前進)。你可以在ebay上獲得約30美元左右的GBA SP(帶背光顯示屏,使整個體驗更好)。您可以購買大約相同數量的sd卡的閃存卡。它有一個ARM7TDMI,它比ARM代碼更快地運行大拇指代碼,爲您準備其他/更新的內核(如cortex-m)提供拇指體驗。再花30美元購買一根遊戲鏈接線,將其切斷,附上一個rs232電平轉換器(我可以和你談談所有這些),然後製作一個gba串行電纜。我的首選設置是有一個我用串口引導程序預編程的閃存盒,我通過串口將程序下載到RAM中,然後從RAM中運行。這樣可以避免每次重新編譯程序時必須拔出閃存盒和/或SD卡。可行的,更便宜的解決方案,但會變得很累。

如果你有一個任天堂的DS爲$ 12至$ 15,你可以得到你同樣可以用於開發基於SD閃存卡盒。我建議首先學習gba,如果您購買墨盒上的軟件支持的gba側內存盒(需要ds lite而非ndsi或3d),則可以在NDS上執行該操作。 (舉例來說,例如1 gba大小的ez flash 3是一個不錯的內存,你可以使用內存將其中的一個閃存轉移到gba(這是我將串行引導程序放在它上面的方式))。這些加載程序會讓你把你的.gba文件放在磁盤sd卡上,然後將它加載到gba磁盤盒中,並將它切換到gba模式並作爲gba運行。

還有很多其他的解決方案,sparkfun.com可能有一些基於ARM板,可以驅動LCD和/或配有液晶顯示器的。你可以去earthlcd,並獲得一個基於串行的液晶面板,使快速發展,當然後來更便宜的解決方案。沿着同樣的路線,您可以使用主機模擬一個類似於地球的東西,讓嵌入式微控制器通過串行將屏幕更新發送到主機,主機顯示圖形。稍後用別的東西替換屏幕更新。

這後一個解決方案,約20美元,你可以得到一個stm32f4發現板,有一個cortex-m4,運行高達168MHz,有一些串行端口,其中至少有兩個引腳不被別人使用可以很容易地擁有一個用於調試消息的端口,另一個用於該虛擬串行屏幕。在GitHub上我stm32vld回購的STM32F4目錄我公司擁有一批獲得對使用該板啓動實例(以及它是幾塊錢,便宜,但不是因爲這STM32F4強大的stm32vld)。同樣,您的主機應用程序可以將鍵盤輸入並將其轉化爲用戶控制/遊戲控制命令,並返回到微控制器上的遊戲軟件中。

當然,beagleboard或hawkboard或raspberri pi當它出來,或開放(我不喜歡插入式計算機,但喜歡開放RD)有視頻處理和視頻輸出直接到監視器和/或使用複合或其他任何電視。大約150到200美元,它只是工作與它一起運行。你絕對不需要在這些平臺上運行Linux,你可以製作自己的操作系統或任何你喜歡的操作系統,非常簡單。

有更多的解決方案可能比你有時間和/或金錢去追求你需要找到一個你的舒適或當幸福來敲門區內適合你喜歡怎麼做開發,並嘗試路徑。

+0

非常感謝。這真的很有幫助。我會考慮你所說的。 – Emre

+1

哦,也看看embeddedarm.com,可能有東西直接連接到液晶顯示器,基於ARM等。 –

+0

那麼,這些對我的目標來說太強大了。其實我正在考慮用VGA輸出和SD卡作遊戲,所以我可以將它連接到顯示器或投影儀;最終讓它成爲一個家庭遊戲機。 我已經跨越了另一個問題雖然運行,顯然是解決我想(640×480)是太大的籌碼,因爲他們只有64 KB的SRAM;所以我需要找到一個外部存儲器支持的芯片。由於遊戲將駐留在SD卡中,我認爲試圖從它讀取圖形會很慢...感謝無論如何,我認爲我將使用SDL的Thumbulator。 – Emre