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

1.3 延伸阅读
有很多关于设计模式的优秀参考书。以下两本是我最喜欢的。
Gamma, Erich; Richard Helm, Ralph Johnson, and John Vlissides(1995),设计模式:可复用面向对象软件的基础。Boston: Addison-Wesley。有很多关于设计模式的参考资料,但这本书是革命性的著作。由于这四个作者,这本书常称为“四人帮”(GoF)书(标准的设计模式可以称做GoF模式)。
Freeman, Eric T., Elisabeth Robson, Bert Bates, Kathy Sierra (2004). 《Head First Design Patterns》. Cambridge, MA: O'Reilly Media.
面试问题:Hello World
这里有一个装了编译器和编辑器的计算机。请实现“Hello World”程序。在基本版本运行后,增加一个功能,从命令行中获取名字。最后,告诉我在你的代码开始执行之前(main()函数之前)发生了什么(感谢Phillip King提供了这个问题)。
在很多嵌入式系统中,需要从头开始开发。在这个任务的第一部分,我希望面试人能够从一个白板开始,填入基本的功能,即使是在一个不熟悉的开发环境中。我希望他具备解决这个直接明了问题的编程技能。
这是一个基础的编程问题,因此最好能熟悉简历上所述的编程语言。对这个问题来说,任何语言都是一样的。在我要求实现“Hello world”时,我考察语言的细节(如包含哪个头文件,在C和C++中使用命令行参数)。我期望面试者能基于编译错误去发现和解决语法问题(然而,当他能输入整个程序而没有任何错误,即使是拼写错误也没有时,也会给我留下极其深刻的印象)。
注意:我自己是个不错的打字员,但如果有人在旁边看着我,我会每隔一个字母就输错。没有问题,很多人都会这样。所以,不要因为这而乱了方寸。专注在键盘和代码上,而不是在你的打字技巧上。
这个问题的第二部分是关于嵌入式系统的切入点。纯计算机科学家会把计算机看做一个理想的盒子,在其中执行他的完美算法。当问及在main函数之前发生了什么时,他通常会说:“你知道的,程序运行了。”但他并没有理解其中的含义。
但是,如果他提到“start”或者“cstart”,那么他已经在面试中有个不错的开始了。总的说来,我希望他能知道除了我们看到的代码之外,程序还需要初始化,而不管是在什么平台。我期望能听到他说设置异常向量来处理中断、初始化关键外设、初始化栈空间、初始化变量,还有如果有C++对象则调用构造函数。如果他能说清楚编译器隐式地做了什么以及初始化代码显式地做了什么,那就更棒了。
最好的回答就是一步一步描述清楚发生了什么,并且解释为什么这些事情如此重要以及它们如何在嵌入式系统中发生。有经验的嵌入式工程师通常会从向量表开始,从向量表重置到系统加电行为的描述。本书的后面章节将讨论这些问题,因此即使这些名词对大家来说是陌生的也不用担心。
如果电气工程师(EE)来问这个问题,候选人就可以进一步讨论系统加电行为,那么他会给面试额外的分数。比如,解释为什么系统不可能在开关打开后1毫秒之内启动并运行。电气工程师期望听到加电时序、电压上升时间、时钟稳定时间、处理器重置/初始化延时等。

时间: 2024-09-27 08:56:06

《 嵌入式系统设计与实践》一一1.3 延伸阅读的相关文章

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

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

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

前言 我热爱嵌入式系统.当我第一次让马达转动时,我着迷了.我很快从单纯软件开发进入到我可以触摸真实物体的一个领域.在我离开软件开发的时候,设计模式注1开创性的工作已经完成.我和我的团队通读了这本书,讨论这些模式以及可以在哪儿应用这些模式.随着我进一步深入研究嵌入式系统,我发现不能处理C++继承的编译器,在处理器极其有限的内存中去实现模式,以及一系列新的问题使设计模式看起来难以应用.但是我从来没有忘记在工程化方法中存在着模式.通过学习识别模式,我们可以反复地使用这些健壮的解决方案.本书大部分内容着

《 嵌入式系统设计与实践》一一3.2 阅读数据表

3.2 阅读数据表 面对着产品发布的压力,很难让开发速度慢下来以便有足够的时间去阅读组件的数据表.手册和应用说明.更糟糕的是,可能看起来都读过了(因为翻阅了所有的资料页)但是什么都没弄明白,只记得好像是用外语写的.当代码运行不起来时,可能就只能抱怨硬件坏了. 对于软件工程师来说,可以将每个芯片看成独立的软件库.花了多少努力去学习一个软件包(Qt.Gtk.Boost.STL等),就需要花同样多的努力去学习这些芯片和外设.它们甚至都有些方法,能够让我们像使用API一样与它们交流.对于软件库中众多的文

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

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

《 嵌入式系统设计与实践》一一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"或者