前 言 在嵌入式系统的领域内,不借助ARM CPU难以长期工作。ARM CPU因其较低的耗电量成为理想的移动嵌入式系统。自2012年以来,几乎所有PDA和智能手机都使用了ARM CPU,其占据了32位嵌入式系统75%和嵌入式RISC系统的90%的份额。2005年,售出的10亿多部手机中98%使用至少一个ARM处理器。ARM处理器使用在手机、平板计算机、MP3播放器、手持游戏机、计算器,甚至计算机外围设备,如蓝牙芯片和硬盘驱动器中。 每两个月都有超过10亿的ARM处理器被送到使用者手中。令人惊讶的是,ARM并非作为处理器而是作为设计内核被使用。ARM的合作伙伴们使用这些设计作为基础,添加自己的外部设备、外围设备,或修改ARM的原有速度和功耗功率,从而制成适合自己的处理器。通过与制造商合作,ARM创造了一个巨大的生态系统。结果是诞生了一系列非凡的处理器,可用于所有类型的设备。使用共同的架构,开发人员能够轻松地切换各个处理器。 ARM处理器不是只拥有有限的微型处理器性能。从用于最小系统的微控制器设备到运用64位处理器的服务器都可运用ARM处理器。 本书介绍嵌入式ARM系统,如何启动并运行该系统,如何在该平台上进行开发以及在此巨大的生态系统中可运用的设备。 本书适用对象 本书主要面向初入嵌入式领域的开发人员。对大多数例子来讲,需要基本了解C语言,但不需要掌握汇编语言的知识。 该书也便于开发人员更好地掌握处理器的内部构件和深入理解内核工作。 本书涵盖内容 本书涵盖了ARM处理器技术的高级内容,着重关注运用于Cortex-A、Cortex-R和Cortex-M设备的ARMv7架构。如果使用了Cortex系列处理器,你会感觉运用自如。但如果使用ARM经典内核,你还可以掌握架构和平台之间的区别。 本书结构安排 本书为不具备ARM处理器使用经验的读者提供尽可能丰富的信息。要理解ARM哲学,有必要了解ARM的起源和产生过程。本书涵盖了嵌入式项目的所有方面:理解处理器和扩展处理器,理解汇编程序,用更常见的C语言生成第一个程序,并且继续进行调试和优化。 第1章“ARM发展史”,概述了ARM的传奇历史和起源,以及发展现状。 第2章“ARM嵌入式系统”,介绍了何为嵌入式系统,讲述了嵌入式系统的优势。 第3章“ARM架构”,列举了ARM处理器的组成元件及其有效的使用方法。 第4章“ARM汇编语言”,介绍了ARM汇编语言,并解释了理解汇编语言的重要性。 第5章“ARM 入门”,展示一些模拟器和真实芯片来编写程序,不仅有ARM处理器启动而且包括更复杂程序应用基础的编程。本章还列举了一些真实世界的场景项目。 第6章“Thumb指令集”,介绍了Thumb模式和Thumb-2扩展。Cortex-M处理器仅用于Thumb模式,但在代码密度要求高的地方Thumb可用于每一个现代处理器。 第7章“汇编指令”,列举了ARM统一汇编语言中的一系列汇编指令。用浅显易懂的程序介绍了这一系列汇编指令的用法。 第8章“NEON”,介绍了NEON,ARM先进的单指令多数据处理器,并展示了如何运用它来加速数学密集的例程。 第9章“调试”,通过列举真实案例描述了何为调试、调试程序所需要的以及调试的成效。 第10章“编写优化C程序”,描述了应用程序的最终部分—— 优化。通过简单案例,可以学习如何编写优化代码,并了解处理器内部实施进一步的优化的过程。 附录A“术语”,解释了使用嵌入式系统(具体指ARM嵌入式系统)工作时遇到的词汇和术语。 附录 B“ARM架构版本”,列举了不同的ARM架构并解释了每一个版本架构的技术优点,以及处理器所属的架构。 附录 C“ARM内核版本”,详细介绍ARM内核,介绍每个处理器的变化。重点讨论了始于ARM6 的每个处理器。引入更多细节介绍现代的Cortex-级处理器。 附录 D“NEON内部函数和指令”,列举出可用于ARM NEON引擎的不同指令,同时使用C语言介绍了用于优化NEON计算的内部函数执行方式。 附录 E“汇编语言指令”,列举并详细描述了运用于UAL的不同汇编指令,同时列举了运用于不同Cortex-M处理器的一系列Thumb指令。 使用本书的必要条件 大多数人猜想嵌入式系统被昂贵的电子设备和高价的软件授权所包围,但事实是仅用很少的投入就可以开始嵌入式开发。首先,需要一台开发计算机。本书给出了Linux系统下的例子,也可以在Windows和MacOS系统下使用。本书提供了免费版权的编译器,可以使用免费的ARM模拟器来编写第一个程序,但是稍后使用一个小型的ARM系统将是明智的:不论是来自于一个制造商(指定两个)的评估版,还是使用廉价的小型计算机,如Raspberry Pi(树莓派)或者Arduino Due。 要运行书中的示例,需要具备以下条件: ● Linux 系统开发计算机 ● Mentor 图形编译器套件 ● Atmel SAM D20 Xplained Pro evaluation board ● Silicon Lab’s STK3200 and STK3800 evaluation boards ● Raspberry Pi 示例的源代码可以从Wrox网站上下载,网址如下: 约定 为了有助于你从书中获得最大收获并能跟踪正在发生什么,全书使用了一些约定。 源代码 使用本书中的示例时,你既可以选择手动输入所有的代码也可以使用随书的源代码文件。本书使用的所有源代码可以在上下载。针对本书,代码下载位于如下页面Download Code选项卡: /go/profembeddedarmdev 也可以通过ISBN(本书的ISBN为978-1-118-78894-3)在和http://www.tupwk.com.cn/downpage上搜索本书来找到代码。并且当前所有Wrox图书完整的代码列表可以在/dynamic/books/download.aspx。在第5章的开头,你会发现该章的主要代码文件的列表。在这一章,也会发现引用的可供下载的代码文件的名称。 网页上的大多数代码被压缩成ZIP、RAR格式,或者适合开发平台类似的格式。 下载代码后,用你最喜欢的压缩工具解压缩。另外,你可以去Wrox 代码主下载页面/dynamic/books/download.aspx上去看本书和其他所有Wrox书适用的代码。 勘误表 我们竭尽全力确保本书在文字或代码中没有错误。然而,人无完人,而错误时有发生。如果你在我们任一本书中发现错误,如拼写错误或者代码片段的错误,我们将会感激你的反馈。通过发送勘误表,你可能会节省其他读者数小时的困惑,与此同时,你也可以帮助我们提供更高质量的信息。 请到网址/go/profembeddedarmdev找到本书的勘误表页面,然后单击勘误表链接。在这个页面你能看到由Wrox 编辑为本书提出的所有勘误。如果在本书勘误表页面不能找到“你发现的”错误,登录/contact/techsupport.shtml,在该页面完成表单发送你所找到的错误给我们。我们会核对信息,如果合适,留言到勘误表页面并在随后的图书编辑中解决。 作者和同行可以登录加入 P2P论坛讨论。论坛是一个基于Web的系统,便于你发布关于Wrox图书和相关技术的消息并且与其他读者和技术用户交流。论坛提供了电子邮件订阅功能。Wrox作者、编辑或其他行业专家还有你的读者也在这些论坛上。 在上,不仅当你阅读本书时,而且在你开发自己的应用程序时,会发现许多不同的对你有帮助的论坛。要想加入论坛,只需按照如下步骤: (1) 访问并单击Register链接。 (2) 阅读使用条款并单击Agree。 (3) 完成所需要的信息填写,以及任何你要提供的可选信息并单击Submit。 (4) 你会收到一封电子邮件,邮件描述如何验证你的账户和完成加入过程。 加入后,可以发布新消息和回复其他用户发布的消息。你可以阅读网页上的任何时间的消息。如果你想从一个特定的论坛获取新的消息并发送电子邮件给你,在论坛名单中单击订阅中的本论坛图标。 关于如何使用Wrox P2P论坛获取更多信息,一定要读关于P2P论坛软件是如何工作的常见问题的解答,以及许多针对P2P和Wrox图书的常见问题。要想阅读FAQ,请单击任何P2P页面的FAQ链接。