我正在寻找有关ARM设备编程的一些信息,以一种特殊的非特定方式[1]。假设我正在编写ARM处理器的代码,该处理器使用的机器类似于Apple II / Atari“ * *”XL / Commodore 64 / DOS-PC,甚至是运行多任务操作系统的东西像VMS或SUNOs。进一步假设任何外围设备/操作系统特定的东西已被抽象为子例程。这种类型的编程的示例可能是:基于文本/诅咒的游戏,如流氓或莫里亚;基于curses的文字处理程序(或者更确切地说是基于像库这样的curses);或调制解调器/终端程序。
我正在寻找两件事。有助于学习ARM编程的材料,虽然ARM系统开发人员指南可能已经足够,其他资源也会有所帮助我正在寻找能够解释各代处理器软件(以及相关硬件即寄存器)差异的东西。
我正在寻找的另一件事是一个开发环境,包括嵌入,仿真,一个体面的宏汇编程序和一个调试器。除了可以帮助我了解程序内部的任何其他内容。
[1]好的。对不起,我无法抗拒那种特殊的双关语。
答案 0 :(得分:2)
您可以选择使用ARM Cortex M或A系列。如果您要开发高端应用程序,例如在智能手机/平板电脑上运行的应用程序,那么了解ARM A是您的选择。如果你想强调硬件/低级别的东西,比如控制器那么你应该选择ARM Cortex-M。如果你是实时应用程序(我怀疑你的情况,他们使用R系列)。
这些新一代ARM中的大多数基于ARMv7架构和ISA,所以阅读手册可以帮助您入门。最近,一种新的ARMv8架构和ISA已经发布,它支持64位处理。
从ARM站点下载参考和技术手册,以了解硬件/外围设备。
我会选择奥斯伦购买电路板的建议,你可以选择TI的Stellaris发射台,它具有ARM-M4F处理器(支持浮点和SIMD),售价为12.99美元 http://www.ti.com/ww/en/launchpad/stellaris_head.html?DCMP=stellaris-launchpad&HQS=stellaris-launchpad-b
或者您可以使用ST的发现板(基于与上述相同的处理器),但也有音频,加速度计和USB。它卖14.99美元http://www.st.com/internet/evalboard/product/252419.jsp 或STM F3板(10.99 $) http://www.st.com/internet/evalboard/product/254044.jsp
在任何情况下,您都需要检查电路板附带的示例,否则您无法轻易找到。董事会有自己的驱动程序,所有都是抽象的,所以你可以从那里开始!
对于操作系统,如果您感兴趣的是RTOS,ARM会为其M系列处理器提供CMSIS RTOS http://www.arm.com/products/processors/cortex-m/cortex-microcontroller-software-interface-standard.php
本书介绍了几代ARM处理器。然后专注于皮质M3。它涵盖了ISA的大量汇编代码。它还解决了内置外设以及如何使用C启动。 http://www.amazon.ca/Definitive-Guide-ARM-Cortex-M3/dp/185617963X/ref=sr_1_1?ie=UTF8&qid=1352506616&sr=8-1
祝你好运答案 1 :(得分:2)
infocenter.arm.com,查看各种架构和核心的各种ARM ARM(架构参考手册)和TRM(技术参考手册)。这些手册比大多数其他公司的文档更好。除了新的64位内容之外,就指令集而言,从一个架构到下一个架构的区别有些微妙。主要的区别与外围设备有关,mmu是一个缓慢变化的东西,中断管理器已经采取了很大的步骤,fpu已经被替换至少一次,如果不是两次批发(如果你甚至有一个fpu,有一个是例外情况不是它为这么小的回报消耗巨大的房地产的规则)。
我对你的问题感到困惑。我认为在学习架构/指令集和学习操作系统调用之间划清界线很重要,这是两个不同的事情。操作系统的东西你很少需要超越源代码(C / C ++),而有限的asm是手工调优的C库或boostrap代码,以及中断包装器。同样地,架构,寄存器,指令等与外围设备(来自arm的核心通常具有非常少的外围设备,大部分是供应商特定的东西),我将其作为单独的学习曲线分开,与asm和指令集与在任何其他平台上学习外围设备没什么区别,只是你读写的一些地址。
如果您正在寻找非操作系统裸机,那么stm32f0发现是10美元,我强烈推荐它。看起来ti有一个stellaris启动板只是为了多一点(等待我的到达所以我不能谈论它们,并且运费是免费的,所以成本基本上与stm32板相同)stm32f4发现约20美元我几乎不会用带有cortex-m4所有东西的微控制器。
升级到Linux系统或为Linux系统设计有覆盆子pi,beaglebone和open-rd以及up(pandaboard)。虽然你只是在编写另一个Linux C / C ++程序,所以那里没有太多的兴奋(与特定平台有关,所有平台的娱乐都是一样的),如果有的话,需要很少的臂知识。与基于ARM的微控制器相比,使用这些平台进行裸机编程非常容易,从而使您的赛车性能得以提升。
我有一个你可能不感兴趣的拇指模拟器.gdb有一个装甲机,这是该公司当天的基石。 skyeye或类似的东西有一个臂指令集模拟器和qemu一样,除了gdb可以提供的之外,它们都不会给你很好的可见性。 opencores有一个琥珀项目一个armv2克隆,你可以看到与armv4和更新的密切关系,你不会找到rtl没有一个装满现金的盒子。凭借我的手臂和芯片经验(不,我不为手臂工作)我确实找到值得关注的琥珀项目,但许多人不知道如何处理它,并且真的对这种可见度不感兴趣。 (这是指令兼容,一个很好的设计,但不要以为你正在看一个手臂设计,没有秘密)。你可以从中学习基本的臂架构,然后转向硬件,例如......
微控制器基于cortex-m,您可能会发现较旧的微控制器是上端臂核心的更好的垫脚石。基于ARM7tdmi的东西,比如sam7s和其他来自nxp,st,atmel等的东西,你仍然可以在sparkfun和微控制器专业人士和其他地方找到类似价格的arduino。