首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于ARM的图形开发

基于ARM的图形开发
EN

Stack Overflow用户
提问于 2011-11-23 20:21:02
回答 1查看 1.1K关注 0票数 1

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

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

另一个问题是图形开发,因为用于LM3S6965EVB的有机发光二极管显示器的分辨率非常低。通过编辑QEMU源代码,我能够将其设置为640x480,但由于我无法让任何示例正常工作,所以我也不知道它是否可以工作。使用SSD0323的调试参数,我所能看到的就是它接受了一些被发送来初始化设备的数据,然后挂起……

我曾考虑过在QEMU中选择另一个主板,但这意味着当我拿到一个真正的设备时,需要从头开始做很多事情,因为对于像这样简单的事情来说,其他的主板太强大了。

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-23 23:14:28

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

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

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

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

另一个完全不同的答案是获得一个GBA (任天堂游戏男孩高级版)。你可以在ebay上花大约30美元买一台GBA SP (有背光显示屏,让整个体验更好)。你可以买到同样数量的SD卡闪存盒。它有一个ARM7TDMI,它运行thumb代码的速度比ARM代码快得多,让你在准备其他/更新的内核时体验到thumb代码,比如cortex-m。再花30美元,你就可以得到一根游戏连接线,把它切碎,接上一个rs232电平移位器(我可以告诉你所有这些),然后做一根gba串行线。我的首选设置是有一个闪存盒,我已经用串行引导加载程序对其进行了预编程,我通过串行将程序下载到ram中,然后从ram运行。这避免了每次重新编译程序时都必须拔出闪存盒和/或SD卡。可行,也是一个更便宜的解决方案,但很快就会变得疲惫。

如果你有一台12到15美元的任天堂DS,你可以得到一个基于sd的闪存盒,同样可以用于开发。我建议首先学习gba,如果你购买了gba端的内存盒(需要一个ds lite,而不是ndsi或3d),你可以在NDS上做。(例如,1GBA大小的ez闪存3是一个很好的闪存,还有内存,你可以用nds闪存那个闪存,并把它带到gba上(这就是我把串行引导加载程序放在上面的方式)。这些加载器会让你把你的.gba文件放在nds cartridge sd卡上,然后把它加载到gba盒中,它会将nds切换到gba模式并作为gba运行。

还有很多其他的解决方案,sparkfun.com可能有许多基于arm的主板,可以驱动lcds和/或附带lcds。你可以去地球的lcd和得到一个串行的液晶面板,使快速开发,稍后当然是一个更便宜的解决方案是期望的。沿着同样的路线,你可以用你的主机模拟一个类似地球的and的东西,让嵌入式微控制器通过串行发送屏幕更新到主机,然后主机显示图形。稍后将该屏幕更新替换为其他内容。

后一种解决方案,你可以花大约20美元买到一块stm32f4发现板,有一个cortex M4,运行频率高达168 m4,有许多串行端口,其中至少有两个端口的针脚不被其他东西使用,你可以很容易地有一个端口用于调试信息,另一个端口用于虚拟串行屏幕。在github上我的stm32vld存储库的stm32f4目录中,我有许多使用该主板的入门示例(以及stm32vld,它便宜几美元,但功能不如这个stm32f4)。同样,您的主机应用程序可以接受击键,并将其转换为用户控制/游戏控制命令,再转换回微控制器上的游戏软件。

当然还有beagleboard、hawkboard或raspberri pi,或者open-rd (我不喜欢即插即用的电脑,但喜欢开放的rd),它有视频处理和视频输出到显示器和/或使用复合或其他任何东西的电视。大约150到200美元,它只是运行它的工作。你绝对不需要在这些平台上运行linux,你可以制作自己的操作系统或者任何你喜欢的东西,然后运行它,非常简单。

有更多的解决方案,你可能有时间和/或金钱去追求,你需要找到一个适合你的舒适区或幸福区,你喜欢如何做开发,并尝试这条道路。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8242106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档