《 嵌入式系统设计与实践》一一导读

前言

我热爱嵌入式系统。当我第一次让马达转动时,我着迷了。我很快从单纯软件开发进入到我可以触摸真实物体的一个领域。在我离开软件开发的时候,设计模式注1开创性的工作已经完成。我和我的团队通读了这本书,讨论这些模式以及可以在哪儿应用这些模式。随着我进一步深入研究嵌入式系统,我发现不能处理C++继承的编译器,在处理器极其有限的内存中去实现模式,以及一系列新的问题使设计模式看起来难以应用。但是我从来没有忘记在工程化方法中存在着模式。通过学习识别模式,我们可以反复地使用这些健壮的解决方案。本书大部分内容着重于阐述在嵌入式系统开发中的标准设计模式,同时也给出了一些新的模式。而且,我还增加了一些章节,这些内容在绝大部分书里都找不到。
关于这本书
在研究了医疗设备、赛车、飞机、儿童玩具以及射击瞄准系统中的嵌入式系统之后,我发现了很多共性。如何为嵌入式系统设计和实现软件,要是那时候懂得很多就好了。本书包含了我所学到的知识。这是一本教授大家如何在资源受限的环境下设计优秀软件的书。
本书告诉你在应聘嵌入式系统开发工作时,了解面试官希望从你身上看到什么。每章的最后都会有一道面试题。这些题通常与具体的语言不相关,而是希望能启发你的思路。好的面试题一般都没有唯一正确的答案,因此我在每道面试题下面给出了提示,没有列举所有可能的答案,而是给出了面试官期望从你的回答中看到什么的一些提示。毕竟,你得凭借你自身的优势去获得工作(和答案)。
有一点需要说明,这里提到的嵌入式系统是没有操作系统的、运行在裸机上的软件。当软件发出打开灯的指令时,它直接向处理器发出而没有经过任何中间层。本书不讨论嵌入式操作系统,但是相关概念可以运用到运行操作系统的处理机上。因此,如果你深入研究,就可以了解操作系统底层的原理。运行在没有操作系统的环境下会让人真正体会并感谢操作系统为我们所做的一切。
本书给出了在设计嵌入式软件时通用的原型和原则。我并没有基于任何特定的平台、处理器、编译器或者编程语言,因为通过本书打下扎实的基础之后,转向特定的平台自然水到渠成。

目录

第1章 导论
1.1 编译器、编程语言以及面向对象编程
1.2 嵌入式系统开发
1.3 延伸阅读
第2章 创建系统架构
2.1 构建系统框图
2.2 从框图到架构
2.3 一个可以实践的沙盒
2.4 延伸阅读
第3章 检视硬件
3.1 硬件/软件集成
3.2 阅读数据表
3.3 处理器是一门语言
3.4 阅读原理图
3.5 调试工具箱(和灭火器)
3.6 测试硬件(和软件)
3.7 处理错误

时间: 2024-10-31 13:47:47

《 嵌入式系统设计与实践》一一导读的相关文章

《 嵌入式系统设计与实践》一一2.2 从框图到架构

2.2 从框图到架构 至此,我们已经有了三种不同的架构设计图,那么下一步怎么做呢?也许会认为开始的时候有些代码没有考虑到,又或者我们会进一步去找出这些模块之间是如何交互的.在开始讨论这些交互(接口)之前,花一些时间讨论一件事情是值得的,那就是:哪些部分将发生变化?在目前这个阶段,所有的事情都是实验性的,因此系统的任何一个部分都可能发生变化. 给出了产品需求规格后,我们可能对系统要实现什么功能比较有信心.在我们的例子里,不管最终要做什么,都需要一个显示器,将位图数据发送给它最好的方式就是闪存.很多

《 嵌入式系统设计与实践》一一2.4 延伸阅读

2.4 延伸阅读 本章中讨论了众多设计模式中的一些模式.本书其他部分也会讨论一些设计模式,但是本书是关于嵌入式系统的,而不是关于设计模式的.试着从以下这些资源中选择一个进行进一步研究,以便更多地了解标准的软件设计模式. Gamma, Erich, Richard Helm, Ralph Johnson和 John Vlissides. 1995. 设计模式: 可复用面向对象软件的基础.Boston: Addison-Wesley. 这是最早的关于设计模式的著作.这本书采用了C++作为参考语言.

《 嵌入式系统设计与实践》一一1.2 嵌入式系统开发

1.2 嵌入式系统开发嵌入式系统是特殊的,因此也给开发者带来一些特殊的挑战.许多嵌入式软件工程师开发了工具箱来处理各种约束.在我们开始构建自己的系统之前,先来看看开发一个嵌入式系统会有哪些困难.在熟悉了嵌入式系统开发会如何受到限制之后,我们再开始讨论一些设计原则并借此指导我们找到更好的解决方案.1.2.1 调试如果在计算机上运行调试软件,就可以在这台计算机上编译和调试.系统有足够的资源在运行程序的同时调试程序.事实上,硬件根本不知道是在调试程序,因为这是由软件完成的.嵌入式系统就不是这样了.除了

《 嵌入式系统设计与实践》一一2.3 一个可以实践的沙盒

2.3 一个可以实践的沙盒前面部分很好地覆盖了底层和中间层的模块,但还有一些算法模块需要考虑.好的架构设计的目标之一就是尽可能地让算法保持独立.常用的模型-视图-控制器(MVC)模式就是解决这个问题很好的方法.这个模式的目的是将应用程序的业务逻辑从用户界面中分离出来,这样可以独立地对它们进行开发和测试.在这个模式中,视图是提供给用户的界面,包括了输入和输出.在我们的设备中,用户可能不是一个人,它可以是一个硬件传感器(输入)和一个屏幕(输出).事实上,如果系统没有屏幕,但是它通过网络传送数据,这时

《 嵌入式系统设计与实践》一一3.5 调试工具箱(和灭火器)

3.5 调试工具箱(和灭火器) 到目前为止,我们对数据表.用户手册.原理图的所讨论都停留在纸上(或电子文件上).让我们在硬件上实践一下吧.等一等,在动手之前,请注意触摸硬件会让它遭受电击并将它损坏(特别是当你刚脱下羊毛外套的时候).3.5.1 保管好电路板 向硬件工程师要一些工具,用以保证电路板的安全.注意电路板应该放在哪儿.在需要移动时,始终将它放在存放电路板的那个袋子里.抗静电垫子很便宜,这也迫使人们不得不在办公桌上为硬件分配一个空间(即使不使用防静电手腕带,防静电垫子仍然是一个较好的改善,

《 嵌入式系统设计与实践》一一3.6 测试硬件(和软件)

3.6 测试硬件(和软件) 虽然我强烈建议准备好工具箱.数字万用表和示波器,但是,如果大家没有准备好独自拥有这些,那么将这些留给硬件工程师也在情理之中.作为一个软件工程师,更重要的是将用于测试硬件的软件尽可能构建得有利于方便调试. 嵌入式系统有3种常见的测试.第一种,在每次系统引导的时候都运行加电自检(POST),即使代码被释放.这个测试验证所有的硬件组件都已经就绪,可以安全地运行系统.加电自检(POST)测试得越多,开机时间就越长,因此需要权衡可能对客户造成的影响.自检完成后,客户就可以使用系

《 嵌入式系统设计与实践》一一3.4 阅读原理图

3.4 阅读原理图 如果你是传统软件世界的开发人员,那么原理图看起来就像是一个充斥着象形文字的视力表,散布着奇怪的方框和复杂的连线.就像数据表一样,知道从哪里着手往往是件令人望而生畏的事情.对于多页的原理图,从第一页开始可能是有风险的,因为很多电气工程师把他们的电源处理硬件放在第一页,而这部分对于软件工程师来说,不是一定要去关注的.图3-9展示了一个原理图的一页片段. 有些原理图中会带有文本块(通常位于图的角落),这些文本是注释,需要仔细阅读,特别是当文本块的标题是"处理器I/O"或者

《 嵌入式系统设计与实践》一一3.7 处理错误

3.7 处理错误 代码的生命周期让我震惊.因为有时侯好像我们总在以不同的方式重写同样的旧代码,有一天我们可能会发现自己在10年前入门阶段写的一段代码正在被一个财富500强公司使用.既然代码工作的如此之好,为什么还要修复其中那些隐藏很深的问题呢? 在某些时候,代码将失效.这一点可能让人会感到可怕.一个错误的发生,要么是由于代码本身,要么是由于环境中一个意想不到的情况.有两种方法来处理错误.首先,该系统可以进入优雅降级的状态,在这个状态中软件会尽可能做到最好.或者,系统可能会优雅地立即失效.长期运行

《 嵌入式系统设计与实践》一一第3章 检视硬件

**第3章 检视硬件**嵌入式系统的设计可能是一件艰巨的任务.大多数软件工程师需要电气工程方面的速成课程,同时大多数电气工程师需要好的软件设计方面的速成课程.与来自不同学科的成员密切配合,可以让嵌入式系统的开发工作容易很多.比如,我有些非常好的朋友就是电气工程师.如果没有从头到尾地经历过一个包括硬件的产品开发周期,那么讨论关于其中的角色和职责可能就有点儿难.但是,我会从一个项目一般的流程开始,然后给出一些关于所需技能的具体建议,以帮助大家在团队中承担起重任,这些技能包括:阅读数据表(datash