资源预览内容
第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
亲,该文档总共3页全部预览完了,如果喜欢就下载吧!
资源描述
嵌入式面试试题附答案2016 年嵌入式面试试题(附答案)嵌入式系统中,动态分配内存可能发生的问题是什么尽管不像非嵌入式计算机那么常见,嵌入式系统还是有从堆 (heap) 中动态分配内存的过程的。那么嵌入式系统中,动态分配内 存可能发生 的问题是什么?这里,我期望应试者能提到内存碎片,碎片收集的问题,变量的 持 行时间等等。这个主题己经在ESP杂志中被广泛地讨论过了(主要是P. J. Plauger,他的解释远远超过我这里能提到的任何解释),所 有回过头看 一下这些杂志吧!让应试者进入一种虚假的安全感觉后, 我拿出这么一个 小节目:下面的代码片段的输出是什么,为什么?char*ptr;辻(p tr=(char *)malloc(0)=NULL)puts ( 4Gotanullpoi nt er” );elseputs ( uGotavalidpointer n ;这是一个有趣的问题。最近在我的一个同事不经意把0 值传给了 函 数 malloc, 得到了一个合法的指针之后,我才想到这个问题。这 就是上 面的代码,该代码的输出是Gotavalidpointer。我用这个来开始讨论 这样的一问题,看看被面试者是否想到库例程这样做 是正确。得到正确 的答案固然重要,但解决问题的方法和你做决定 的基本原理更重要些。关键字 volatile 有什么含意并给出三个不同的例子一个定义为 volatile 的变量是说这变量可能会被意想不到地改 变, 这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在 用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用 保存在寄存器里的备份。下面是 volatile 变量的几个例子:1) .并行设备的硬件寄存器(如:状态寄存器)2) .个中断服务子程序中会访问到的非自动变量(Nonautomat icvariables)3) .多线程应用中被几个任务共享的变量嵌入式系统中经常要用到无限循环,你怎么样用 C 编写死循环呢?这个问题用几个解决方案。我首选的方案是:while(1) 一些程序员更喜欢如下方案:for(;)这个实现方式让我为难,因为这个语法没有确切表达到底怎么回事。 如果一个应试者给出这个作为方案,我将用这个作为一个机会去探究他 们这样做的基木原理。如果他们的基本答案是:“我被教着这样做,但 从没有想到过为什么。”这会给我留下一个坏卬象。第三个方案是用 gotoLoop:gotoLoop;应试者如给出上而的方案,这说明或者他是一个汇编语言程序员 (这 也许是好事)或者他是一个想进入新领域的BASIC/FORTRAX程序 员。嵌入式系统中关于中断的问题中断是嵌入式系统中重要的组成部分,这导致了很多编译开发商提 供一种扩展一让标准C支持中断。具代表事实是,产生了一个新的关键 字_interrupto下面的代码就使用了一interrupt关键字去定义了一个 中断服务子程序(ISR),请评论一下这段代码的。_interruptdoublecompute_area(doubletadius)doublearea PI radius radius;printf( Area=%f n ,area);returnarea;这个函数有太多的错误了,以至让人不知从何说起了:1) .ISR 不能返回一个值。如果你不懂这个,那么你不会被雇用 的。2) .ISR 不能传递参数。如果你没有看到这一点,你被雇用的机 会等 同第一项。3) .在许多的处理器/编译器中,浮点一般都是不可重入的。有些 处 理器/编译器需要让额处的寄存器入栈,有些处理器/编译器就是 不允许 在ISR中做浮点运算。此外,ISR应该是短而有效率的,在ISR中做浮 点运算是不明智的。4) .与第三点一脉相承,printf ()经常有重入和性能上的问题。如 果你丢掉了第三和第四点,我不会太为难你的。不用说,如果你 能得到 后两点,那么你的被雇用前景越来越光明了。
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号