嵌入式开发面试题2

上传人:kms****20 文档编号:40446345 上传时间:2018-05-26 格式:DOC 页数:21 大小:49KB
返回 下载 相关 举报
嵌入式开发面试题2_第1页
第1页 / 共21页
嵌入式开发面试题2_第2页
第2页 / 共21页
嵌入式开发面试题2_第3页
第3页 / 共21页
嵌入式开发面试题2_第4页
第4页 / 共21页
嵌入式开发面试题2_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《嵌入式开发面试题2》由会员分享,可在线阅读,更多相关《嵌入式开发面试题2(21页珍藏版)》请在金锄头文库上搜索。

1、嵌入式开发面试题嵌入式开发面试题 2 2嵌入式开发面试题 2.txt根网线尽赚了多少人的青春有时候感动的就是身边微不足道的小事。破碎不是最残酷的最残酷的是踩着这些碎片却假装不疼痛 固执的寻找将来就算我遇见再怎么完美的人,都有一个缺点,他不是你,_下辈子要做男生,娶一个像我这样的女生。8086 的堆栈采取向下生长的方式,在压入时_(41)_。 (41) A. SP 先减,再压入数据 B. 先压入数据,SP 再减 C. SP 先加,再压入数据 D. 先压入数据,SP 再加:考查 8086 堆栈的基础知识。个人觉得,堆栈是嵌入式的基础东西,自然就是考试重点,以后或许会多考单片机 ARM 的结构。80

2、86 处理器均采用满递减堆栈。入栈时,先减地址,后进数据;出栈时,先出数据,后减地址。PUSH SRL:先将栈顶指针 SP 向上移两位,即 SP-2,指向一个新的字存储单元,再将操作数的内容存入 SP 所指的字存储单元。POP DST:将当前栈顶指针 SP 所指向字单元内容送向 DST,然后将SP 下移两位,SP-2。参考答案:A。 若对某一寄存器某几位清零,可用一条指令_(42)_处理。 今天老大让我针对一个面试者出些嵌入式方面的面试题,主要是想对他的技术深度进一步了解。我就出了下面这些问题,每个问题背后都是考察一个嵌入式程序员应该具备的相关技能。当然这些只是我的个人理解,不一定正确。在此与

3、大家分享,只是希望朋友们能够得到一点点启发:如何抓住每一个契机展现你的与众不同? 同样的技术问题,很多人可能都能够回答得对,但有些人只是知其然而不知所以然。其实面试官每一个问题背后通常都隐藏着一个考察点。如果我们能够透过问题看到背后的实质,在回答出答案的时候还能够借机发挥,我相信 90 和 100 分的差别就出来了。哪个面试官不喜欢招一个喜欢思考、能透过现象看本质的员工呢 下面我们来看看嵌入式 C 面试题背后到底藏何玄机。以下仅是个人的一些想法,欢迎大家讨论,拍砖的轻点 / 1、 int a=2,b=11,c=a+b+/a+; 则 c 值为多少?【考点】编码规范。表面上考察你对运算符优先级的掌

4、握程度,但实际上优先级这些玩意很难死记硬背得住?大家的疑惑不就是运算符的结合顺序么?那么如何去避免呢?c=a+(b+)/(a+)不就行了么,其实问题背后考察的是你的编码规范,如何写清晰易懂的代码,如何在一个团队中让自己的代码狠容易毫无偏差的让新人看懂2、 Static 用在全局变量定义和函数内部局部变量定义有何区别?【考点】编码规范及模块化设计。Static 变量的两个属性涉及存储位置及可见域。在大型的程序设计中 static 全局变量可以有效的避免名字空间的重复及无意的变量引用,这样可以有效的提高程序设计的安全性,同时也利用模块化作业3、 在程序设计中哪些地方需要使用 define?如何用

5、define 来定义一年内有多少小时的常量?【考点】可移植性。嵌入式程序设计的特点就是软硬件平台可变性,有效利用 define 常量可以提高程序的可移植性,这样改动方便,不易出错4、 Define 宏语句和 inline 函数有什么区别?【考点】时空效率及宏的副作用。嵌入式系统平台通常存储资源有限,但同时又对实时性有一定的要求,二者如何权衡需要考虑。Define 宏语句相对于函数调用能提高运行时间性能,但消耗了空间,并且不标准的宏语句定义在不标准的编码中更容易出现副作用,因此 inline 函数则是 define 语句的完美替代品。小资金干大事正是嵌入式的终极目标!5、 哪些地方可以用到 co

6、nst?const 变量和函数输入参数用 const修饰有哪些作用?【考点】程序设计可靠性。Const 只读变量可以有效克服 define 常量的一些弊端,如无类型安全检查。Const 形参可以有效避免程序内部更改无意的更改。人非圣贤孰能无误,所以我们要将这些可能的失误统统交给智能的编译器,这样就可以将错误扼杀在摇篮中6、 Int,short,char 在 32 位平台下各占几个字节?一个结构体含有 int、short、char 变量各一个,结构体占据的总内存空间多少?【考点】跨平台移植。嵌入式并非 x86,其硬件平台具备很大的差异性,同为 int 在不同的架构体系下可能占据的字节数是不一样的

7、。不同的平台也有不同的编译器,其在变量对齐方面可能有不同的特性。因此在结构体定义时如何设计成员变量的顺序以有效减少占据的内存空间,以及如何填充特定字段保证访问对齐问题,都是嵌入式系统结构体设计时应该考虑的跨平台可移植性问题7、 如何将 unsigned int 明确定义为一个 32 位类型?define 和typedef 有何区别?【考点】跨平台移植。define 和 typedef 都可以实现变量类型重定义,但是 typedef 类型的指针变量可以有效去除变量定义的二义性。在嵌入式的工程项目中,通常为了保证数据类型的统一且便于跨平台移植时修改数据类型方便,通常都会单独定义一个数据类型的头文件

8、,把所有用到的数据类型 typedef 成所熟悉的形式8、 有没有用过 volatile?有哪些典型的适用场合?【考点】编译优化的副作用。通常为了提高程序运行的效率,编译器会自动进行一些优化,如将变量放在寄存器中,以减少存储器访问次数,在数据长期未变时不重新读取内存等等。但是优化有时会带来问题,如硬件寄存器、多任务共享变量、中断和主程序共享变量,优化有可能带来数据访问不一致性的问题,因此对于这些个别变量,我们需要用 volatile 声明告诉编译器取消优化9、 参数传递有哪些形式?寄存器和堆栈传递各有什么优缺点?【考点】编译优化、调用性能、接口设计。每种体系结构及对应的编译器对参数传递都有自己

9、的规定。参数传递并非总是通过堆栈进行的,参数入栈出栈是需要耗费时间的,编译器总是尽量优化利用寄存器来传递参数,因为寄存器的访问效率要高,但当参数过多时,将放弃优化从而用栈传递参数。因此为了提高调用性能,应尽量减少参数个数,太多时可以将所有参数重新定义为一个结构体,利用结构体指针来传递参数。在函数接口设计时应考虑硬件平台和编译器的特性,以灵活定义参数形式10、 中断服务程序设计应注意的问题?中断触发方式的选择?中断处理太长怎么办?中断处理程序如何与主应用程序交互?【考点】中断服务程序设计。嵌入式程序最大的特点是经常需要和硬件打交道,中断是接收外界输入的典型方式,通常都决定了系统运行流程,因此如何

10、高效不丢失的处理中断是每个嵌入式程序员应考虑的问题11、 TCP/IP 和 OSI 七层模型是如何划分的?各层的功能,这么设计有什么好处?【考点】层次化软件设计保证可移植性。分层模型最大的好处就是某一层变化了,只要其提供上层的接口未变,那么上层就无需做任何改动。因此只需要更改本层的实现即可。嵌入式平台因为软硬件多变性,为了最大限度的利用先前的成果,软件设计一定要遵循这种层次化模型,这样才能保证其可移植性12、 TCP 和 UDP 的区别?各种网络互连设备都用在哪一层?如何建立链接?如何进行拥塞控制?【考点】协议设计可靠性及缓冲区设计管理。TCP 和 UDP 的最大区别在于可靠性,TCP 通过三

11、次握手协议及超时机制安全可靠的建立或者释放连接。协议设计最大的问题就是如何保证效率合可靠性,TCP 的设计为我们提供了一个参考。而滑动窗口机制可以有效的进行拥塞控制,但窗口大小的设计则关系到内存利用率及缓冲效率可靠性等问题。在嵌入式的驱动程序设计中,经常会开辟缓冲区来进行流量控制及防止数据覆盖,缓冲区的大小设计则需要更加具体的应用情况设计才能保证可靠性合灵活性(42)A. AND B. OR C. NOT D. XOR :考查汇编语言的基础知识,简单到极点了,这个分数拿不到,基本过不了。AND(与):有 0 为 0。OR(或):有 1 为 1。NOT(非):取反。XOR(异或):相同为 0,不

12、同为 1。要对寄存器的某几位清零,应用 AND。例如对 11011010 的中间四位清零:11011010 AND 11000011 得11000010。个人认为:用 XOR 指令,一条指令是做不到的,实际中不可取。参考答案:A。 指令周期是指_(43)_。 (43) A. CPU 从主存取出一条指令的时间 B. CPU 执行一条指令的时间 C. CPU 从主存取出一条指令加上执行该条指令的时间 D. 时钟周期的时间 :考嵌入式最最基本的概念了,记住就行,这个分数必拿。指令周期:CPU 从内存取出一条指令并执行这条指令的时间总和。包括取指令,分析指令,执行指令整个过程。:时钟周期、机器周期、指

13、令周期的概念辨析。时钟周期:时序中的最小单位,就是 1/fosc。例如:晶振为 12MHz,那么时钟周期为 1/12us。机器周期:完成某一规定操作所需的时间,通常由若干时钟周期构成。例如:单片机是 12 周期的话,那么在 12MHz 晶振的情况下,其机器周期为 1us。指令周期:完成一条指令的所有时间。例如 RET 是一个 2 周期指令,在上述的条件下,它的指令周期为 2us。参考答案:C。在汇编过程中,不产生机器码,只用来指示汇编程序如何汇编的指令是_(44)_。 (44)A. 宏指令 B. 伪指令 C. 汇编指令 D. 机器指令 :考查汇编语言的基础知识。不想多说了,太简单了,自己看看概

14、念吧。或者这样记住:伪指令就是假的指令,假得指令是给人看的,不是给机器看的,所以机器不能产生代码。注意一下宏指令的用法,说不好下次就考了。参考答案:B。在 8086 微处理器中,若(SS) = 2000H,(SP) = 0100H,(AX) = 2107H,执行指令 PUSH AX 后存放数据 21H 的物理地址是_(45)_。 (45)A. 20102H B. 20101H C. 200FEH D. 200FFH :这道题目不容易,需要对 X86 汇编语言有深入的理解,拿不到分就算了。41 题是会做对这道题目的基础。由 41 题可知,8086 的堆栈数据操作是,SP 先减,再压入数据,以字为

15、单位对堆栈操作。因此压入数据时的起始 SP 应为 0100H-2=00FEH。而 8086 中数据采用小端模式存取,即一个字数据中低字节存放低位地址。 (X86 越向上的地址越小)8086 逻辑地址到物理地址的形成机制为:物理地址=段地址*16+偏移地址(或物理地址=段地址左移 4 位+偏移地址)。压栈后,内容存储的物理地址为 2000*16+00FEH=200FE,21H 是 AX 中的高位,其存储位置为 200FFH。参考答案:D。 在串行通信中,根据数据传输方向不同,可以分成三种方式,不包括_(46)_方式。 (46)A. 单工 B. 双工 C. 半单工 D. 半双工 :考查接口通信的基础知识。没有必要多说,是我们搞嵌入式必须知道的基本常识。什么是单工、双工、半双工得搞搞清楚。参考答案:C。 寄存器间接寻址方式中,操作数处在_(47)_。 (47)A. 通用寄存器 B. 主存单元 C. 程序计数器 D. 堆栈:考查寻址方式的基础概念,需要有一点的理解,但是其选项会让很多人答对。简单来说,寄存器间接寻址方式是说,指令的寄存器的内容不是操作数,而是操作数的偏移地址,操作数本身则在存储器中。参考答案:B。 IEEE 1394 具有_(48)_位地址空间,IEEE 1394 的通信协议具有三个协议层,下面不属于这三个协议层的是_(49)_。 (48)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号