Graphics 基于ARM的图形开发

Graphics 基于ARM的图形开发,graphics,operating-system,arm,simulator,qemu,Graphics,Operating System,Arm,Simulator,Qemu,我计划制作一个小型操作系统,并使用ARM Cortex-M3在上面运行一个俄罗斯方块克隆。不幸的是,到目前为止,我无法购买任何开发板,因此我将不得不使用模拟器 我实际上已经研究过QEMU,它支持LM3S6965EVB,它包含一个ARM Cortex-M3处理器。但显然,新版本的董事会与QEMU中的模型不兼容,因为我从TI下载的示例似乎都不起作用。甚至OLED显示器也不同 另一个问题是进行图形开发,因为LM3S6965EVB的OLED显示器的分辨率非常低。通过编辑QEMU源代码,我可以使其达到64

我计划制作一个小型操作系统,并使用ARM Cortex-M3在上面运行一个俄罗斯方块克隆。不幸的是,到目前为止,我无法购买任何开发板,因此我将不得不使用模拟器

我实际上已经研究过QEMU,它支持LM3S6965EVB,它包含一个ARM Cortex-M3处理器。但显然,新版本的董事会与QEMU中的模型不兼容,因为我从TI下载的示例似乎都不起作用。甚至OLED显示器也不同

另一个问题是进行图形开发,因为LM3S6965EVB的OLED显示器的分辨率非常低。通过编辑QEMU源代码,我可以使其达到640x480,但由于我无法获得任何示例,因此我也不知道它是否有效。使用SSD0323的调试参数,我所能看到的只是它接受一些发送来初始化设备的数据,然后挂起

我曾考虑过在QEMU中选择另一块板,但这意味着当我在一台真正的设备上动手时,我会从头开始重做很多事情,因为其他板的功能太强大,无法完成像这样简单的事情

我该怎么办?有没有其他模拟器可以帮助我完成我想做的事情?我想开发一个小操作系统和一些小游戏


提前谢谢。我已经寻找解决方案好几天了,我真的被卡住了。

你需要重做多少,部分与你的软件/系统工程有关,你可以在需要的地方进行抽象,只需重新编写抽象层而不是整个包。实际上,您可以在主机系统上进行大部分软件设计/测试,而不会交叉编译,只会在以后交叉编译到模拟器或真实硬件

例如,我假设您将在ram中的某个位置构建下一个视频屏幕,然后根据硬件更改寄存器中的一些位和页面翻转,或者必须以任何形式将此帧缓冲区复制到视频/lcd。使用thumbulator,您可以在ram中的某个位置(在模拟内存空间中)构建屏幕,然后在模拟写入某个寄存器时添加到模拟器中,从ram中获取这些字节并在主机上显示(运行模拟)基本上模拟一些硬件。使用sdl或基本X调用或任何您喜欢的方式。我通常将快照拍摄到.bmp文件(非常容易编写),然后稍后再查看它们

稍后,在硬件上,抽象的update_screen()函数将具有显示该屏幕的硬件特定代码

thumbulator只运行thumb指令,而不是ARM和Thumb2,thumb是ARM处理器(ARMv4T和除cortex-m之外的更新版本)和支持Thumb2扩展(cortex-m)的处理器之间的共同点。除了启动代码之外,arm系列的编译和编程体验是相同的。代码(除了启动代码,当然还有特定于硬件的访问)将在arm系列和模拟器中运行。如果转到cortex-m,那么在命令行中添加架构规范将使构建从thumb only更改为thumb+thumb2指令,从而提高性能。如果你在github上浏览我的其他项目,你会发现这个想法被反复重复,我有许多简单的cortex-m示例,其中我使用gcc和llvm,并使用thumb指令和thumb+thumb2构建相同的.C代码

另一个完全不同的答案是获得GBA(任天堂游戏男孩前进)。你可以在易趣上花大约30美元买到一个GBA SP(有背光显示屏,让整个体验更好)。你可以用大约相同的价格购买带sd卡的闪存盒。它有一个ARM7TDMI,它运行thumb代码的速度比ARM代码快得多,为其他/新的内核(如cortex-m)提供了thumb体验。再花30美元,你就可以得到一根游戏链接电缆,把它切碎,连接一个rs232电平转换器(我可以告诉你所有这些),然后制作一根gba串行电缆。我的首选设置是使用串行引导加载程序预先编程的闪存盒带,通过串行下载程序到ram中,然后从ram运行。这避免了每次重新编译程序时都必须猛拉闪存盒和/或sd卡。这是可行的,而且是一个更便宜的解决方案,但很快就会让人疲惫不堪

如果你的任天堂DS售价在12美元到15美元之间,你可以得到一个基于sd的闪存盒带,同样可以用于开发。我建议您先学习gba,如果您购买的gba侧内存盒带(需要ds lite而不是ndsi或3d)受盒带上的软件支持,您可以在NDS上进行学习。(例如,1 gba大小的ez flash 3是一款不错的产品,您可以使用nds闪存该产品并将其传送到gba(这就是我如何将串行引导加载程序放在其上的方式))。这些加载程序将允许您将.gba文件放在nds盒带sd卡上,然后将其加载到gba盒带中,它将nds切换到gba模式并作为gba运行

还有很多其他解决方案,sparkfun.com可能有许多基于arm的板,可以驱动lcd和/或随lcd一起提供。你可以去EarthCD买一个基于串行的lcd面板,这样可以快速开发,当然,以后需要一个更便宜的解决方案。按照同样的思路,你可以用你的主机模拟一个类似EarthCD的东西,让嵌入式微控制器通过串行方式向主机发送屏幕更新,主机显示图形。稍后用其他内容替换屏幕更新

后一种解决方案,大约20美元,你可以得到一个stm32f4发现板,有一个cortex-m4,运行频率高达168MHz,有多个串行端口,其中至少有两个引脚未被其他设备使用。你可以很容易地拥有一个端口用于调试消息,另一个用于此虚拟串行屏幕。在github上我的stm32vld repo的stm32f4目录中,我有许多入门示例可供使用