内容简介
本书面向想要了解、使用嵌入式技术的读者,全面介绍了嵌入式系统设计与开发技术,秉承理论与实践相结合的指导思路,帮助读者快速跨入嵌入式系统开发的门槛。本书围绕嵌入式系统中的软件开发技术展开讨论。从本的原理和概念入手,介绍嵌入式系统、嵌入式操作系统的原理和概念,并在此基础之上,介绍了嵌入式软件开发人员必须了解的知识,包括基本硬件原理、嵌入式操作系统定制和移植以及嵌入式系统集成和软件调试。本着精简理论,注重实践的原则,本书的许多章节都附有详细的源代码及分析,并且搭建了基于模拟器的实验环境,有助于读者提高实践动手能力。
目录
目 录
译者序
序
前言
第1版前言
网站上的内容
嵌入式软件开发路线图
第1章 嵌入式软件 1
1.1 嵌入式应用的影响 1
1.1.1 来自开发的挑战 1
1.1.2 软件复用 3
1.1.3 实时操作系统 3
1.1.4 文件系统 4
1.1.5 USB 4
1.1.6 图形 5
1.1.7 网络 5
1.1.8 小结 6
1.2 嵌入式系统的存储器 7
1.2.1 存储器 7
1.2.2 软件开发面临的挑战 8
1.2.3 所有东西都会出错 9
1.2.4 好的解决方法 10
1.3 存储器架构 10
1.3.1 选项 10
1.3.2 平面单一地址空间存储器 11
1.3.3 分段空间存储器 11
1.3.4 单元切换空间存储器 12
1.3.5 多地址空间存储器 13
1.3.6 虚拟空间存储器 14
1.3.7 高速缓冲存储器 14
1.3.8 存储器管理单元 14
1.3.9 小结 15
1.4 软件是如何影响硬件设计的 15
1.4.1 谁在设计硬件 15
1.4.2 软件主导硬件 16
1.4.3 软硬件的均衡 16
1.4.4 硬件调试 16
1.4.5 自检 17
1.4.6 小结 18
1.5 将软件移植到新处理器架构上 18
1.5.1 特定目标 19
1.5.2 RTOS问题 21
1.5.3 处理器移植和开放标准 22
1.5.4 小结 24
1.6 汽车电子的嵌入式软件 24
1.6.1 概要 24
1.6.2 汽车电子特征 24
1.6.3 编程问题 25
1.6.4 实时操作系统因素 25
1.6.5 小结 26
1.7 芯片设计时如何选择CPU 27
1.7.1 设计复杂度 27
1.7.2 设计复用性 28
1.7.3 存储器架构和保护 28
1.7.4 CPU性能 29
1.7.5 功耗 29
1.7.6 成本 29
1.7.7 软件问题 29
1.7.8 多核SoC 29
1.7.9 小结 30
1.8 USB软件的介绍 30
1.8.1 什么是USB 30
1.8.2 USB外设 31
1.8.3 USB通信 32
1.8.4 USB软件 32
1.8.5 USB和嵌入式系统 33
1.8.6 小结 33
1.9 走向USB 3.0时代 34
1.9.1 概述 34
1.9.2 总线架构 34
1.9.3 线缆和连接器 34
1.9.4 封包路由 34
1.9.5 双向协议流 35
1.9.6 批量流 35
1.9.7 USB 3.0电源管理 36
1.9.8 USB 3.0集线器 36
1.9.9 xHCI:新型主控制器接口 36
1.9.10 USB的未来应用 36
1.9.11 小结 37
扩展阅读 37
第2章 设计和开发 38
2.1 嵌入式系统软件开发的新兴技术 38
2.1.1 微处理器技术 39
2.1.2 系统架构 39
2.1.3 设计组合性 40
2.1.4 软件内容 40
2.1.5 编程语言 41
2.1.6 软件团队的规模和分布 41
2.1.7 UML和建模 42
2.1.8 关键技术 42
2.1.9 小结 42
2.2 选择开发工具 43
2.2.1 开发工具链 43
2.2.2 编译器特征 44
2.2.3 嵌入式系统的扩展 44
2.2.4 优化 45
2.2.5 构建工具:简要介绍关键问题 46
2.2.6 调试 46
2.2.
摘要与插图
第1章嵌入式软件
本章的文章要么设定一个场景,提供一些关于嵌入式软件究竟是什么的大致观点,要么强调一些在其他章节中不会再涉及的内容。
1.1 嵌入式应用的影响
本文很像是一篇“设定场景”的文章,它基于我2003年后半年为《NewBits》写的一篇文章和我在多个研讨会上的演讲稿完成。本文介绍了许多会在本书其他章节更加详细描述的关于嵌入式软件的话题和概念。
——作者
嵌入式系统无处不在,人们已经无法离开它们了。一个美国家庭平均拥有将近40个微处理器,这个数字还未将个人电脑(一般每台电脑都贡献了额外的5~10个微处理器)或汽车上(典型的情况是含有几十个微处理器)所拥有的微处理器囊括在内。而且有人预言这些数字将在未来10年或20年内呈现几个数量级的增长。然而,相当具有讽刺意味的是,大多数不从事电子设计的人们还不知道“嵌入式”到底意味着什么。
营销人员都喜欢市场分段。这个理论说的是这样的分析以特定的方式通过满足各个分段的需求来生产出更好的产品。对嵌入式来说,我们可以将其分割成通信、军事/航天、过程控制、消费电子和自动化等分段。尽管生产的越来越多的设备并不满足这个模型。比如,一个带有摄像头的手机属于电信产品还是消费产品?有谁在乎么?人们可能只对这样的应用的通用性感兴趣。针对它们,我们所能做出的主要评价就是每台设备上的软件数量正以一种今非昔比的速度在增长。本书中,我们将看一看这些软件的内部工作原理。我们找来做例子的应用是从消费电子分段中得到的——?一台数码相机,之所以选择它是因为无论你是否在用消费电子产品,你多少对它们的功能和操作有所清楚。
1.1.1 来自开发的挑战
消费电子应用具有严格的上市时间约束,并且对成本敏感。这带来了软件开发中的一些有趣的挑战。
多处理器
多处理器的嵌入式系统设计正变得越来越普遍。市场研究表明,在不久的将来,多处理器设计将成为常态。数码相机通常有两个CPU:一个用于图像处理,另一个用于相机的一般操作。多处理器设计面临的挑战在于调试。每个独立设备上的代码可能比较好调试,因为用于调试的工具和技术都很好理解。但当两个处理器之间有交互时,挑战就出现了。显然,这时候需要一种用于解决系统调试问题的技术,即多核调试技术。
有限的存储器
嵌入式系统的存储器往往是有限的。存储器容量可能不小,但通常不会根据需要而增加。对于消费电子应用,综合考虑成本和功耗使得存储器容量受到约束。传统的嵌入式软件工程师已经练就了在有限存储器环境下的编程技能。如今,汇编语言已经不再是一个明智的选择了。全面了解如何充分利用C语言和化的效果和局限性是至关重要的。
如果使用C++(这有可能是一个的选择),开发人员必须充分了解该语言是如何实现的。否则,可能到了截止时间,项目所需的存储器容量和实时性才会很明确,而此时重新设计软件已经不可能了。谨慎选择C++工具相当重要,是为嵌入式系统提供支持的时候。
用户接口
任何设备上的用户界面(User Interface,UI)都是重要的。产品的成功与否直接取决于其质量。对消费产品来说,这是一种势不可挡的影响。如果用户发现用户界面很笨拙或很不方便,他们的坏感觉可能不只针对这款产品,整个品牌都会受到影响。在需要更新产品的时候,消费者就会转而选择其他产品。
所以,一个良好的用户界面并非可有可无。但说得容易做到难。大多数情况下,用户界面并不是由硬件实现的。比如,数码相机的各种功能控制都是由软件来定义的,即便是一个基本模型,都可能会有许多控制操作。因此,理想的开发顺序应该是: