且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

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

更新时间:2022-09-15 08:32:01

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毫秒之内启动并运行。电气工程师期望听到加电时序、电压上升时间、时钟稳定时间、处理器重置/初始化延时等。