几道嵌入式面试题

news/2024/7/10 4:37:23 标签: 嵌入式, 编译器, 优化, 面试, 跨平台, 平台

今天老大让我针对一个面试者出些嵌入式方面的面试题,主要是想对他的技术深度进一步了解。我就出了下面这些问题,每个问题背后都是考察一个嵌入式程序员应该具备的相关技能。当然这些只是我的个人理解,不一定正确。在此与大家分享,只是希望朋友们能够得到一点点启发:如何抓住每一个契机展现你的与众不同?

同样的技术问题,很多人可能都能够回答得对,但有些人只是知其然而不知所以然。其实面试官每一个问题背后通常都隐藏着一个考察点。如果我们能够透过问题看到背后的实质,在回答出答案的时候还能够借机发挥,我相信90和100分的差别就出来了。哪个面试官不喜欢招一个喜欢思考、能透过现象看本质的员工呢~

下面我们来看看嵌入式C面试题背后到底藏何玄机~。以下仅是个人的一些想法,欢迎大家讨论,拍砖的轻点~~

1、 int a=2,b=11,c=a+b++/a++; 则c值为多少?

【考点】编码规范。

表面上考察你对运算符优先级的掌握程度,但实际上优先级这些玩意很难死记硬背得住?大家的疑惑不就是运算符的结合顺序么?那么如何去避免呢?c=a+((b++)/(a++))不就行了么,其实问题背后考察的是你的编码规范,如何写清晰易懂的代码,如何在一个团队中让自己的代码狠容易毫无偏差的让新人看懂~

2、 Static用在全局变量定义和函数内部局部变量定义有何区别?

【考点】编码规范及模块化设计。

Static变量的两个属性涉及存储位置及可见域。在大型的程序设计中static全局变量可以有效的避免名字空间的重复及无意的变量引用,这样可以有效的提高程序设计的安全性,同时也利用模块化作业

3、 在程序设计中哪些地方需要使用define?如何用define来定义一年内有多少小时的常量?

【考点】可移植性。

嵌入式程序设计的特点就是软硬件平台可变性,有效利用define常量可以提高程序的可移植性,这样改动方便,不易出错

4、 Define宏语句和inline函数有什么区别?

【考点】时空效率及宏的副作用。

嵌入式系统平台通常存储资源有限,但同时又对实时性有一定的要求,二者如何权衡需要考虑。Define宏语句相对于函数调用能提高运行时间性能,但消耗了空间,并且不标准的宏语句定义在不标准的编码中更容易出现副作用,因此inline函数则是define语句的完美替代品。小资金干大事正是嵌入式的终极目标!

5、 哪些地方可以用到const?const变量和函数输入参数用const修饰有哪些作用?

【考点】程序设计可靠性。

Const只读变量可以有效克服define常量的一些弊端,如无类型安全检查。Const形参可以有效避免程序内部更改无意的更改。人非圣贤孰能无误,所以我们要将这些可能的失误统统交给智能的编译器,这样就可以将错误扼杀在摇篮中

6、 Int,short,char在32位平台下各占几个字节?一个结构体含有int、short、char变量各一个,结构体占据的总内存空间多少?

【考点】平台>跨平台移植。

嵌入式并非x86,其硬件平台具备很大的差异性,同为int在不同的架构体系下可能占据的字节数是不一样的。不同的平台也有不同的编译器,其在变量对齐方面可能有不同的特性。因此在结构体定义时如何设计成员变量的顺序以有效减少占据的内存空间,以及如何填充特定字段保证访问对齐问题,都是嵌入式系统结构体设计时应该考虑的平台>跨平台可移植性问题

7、 如何将unsigned int明确定义为一个32位类型?define和typedef有何区别?

【考点】平台>跨平台移植。

define和typedef都可以实现变量类型重定义,但是typedef类型的指针变量可以有效去除变量定义的二义性。在嵌入式的工程项目中,通常为了保证数据类型的统一且便于平台>跨平台移植时修改数据类型方便,通常都会单独定义一个数据类型的头文件,把所有用到的数据类型typedef成所熟悉的形式

8、 有没有用过volatile?有哪些典型的适用场合?

【考点】编译优化的副作用。

通常为了提高程序运行的效率,编译器会自动进行一些优化,如将变量放在寄存器中,以减少存储器访问次数,在数据长期未变时不重新读取内存等等。但是优化有时会带来问题,如硬件寄存器、多任务共享变量、中断和主程序共享变量,优化有可能带来数据访问不一致性的问题,因此对于这些个别变量,我们需要用volatile声明告诉编译器取消优化

9、 参数传递有哪些形式?寄存器和堆栈传递各有什么优缺点?

【考点】编译优化、调用性能、接口设计。

每种体系结构及对应的编译器对参数传递都有自己的规定。参数传递并非总是通过堆栈进行的,参数入栈出栈是需要耗费时间的,编译器总是尽量优化利用寄存器来传递参数,因为寄存器的访问效率要高,但当参数过多时,将放弃优化从而用栈传递参数。因此为了提高调用性能,应尽量减少参数个数,太多时可以将所有参数重新定义为一个结构体,利用结构体指针来传递参数。在函数接口设计时应考虑硬件平台编译器的特性,以灵活定义参数形式

10、 中断服务程序设计应注意的问题?中断触发方式的选择?中断处理太长怎么办?中断处理程序如何与主应用程序交互?

【考点】中断服务程序设计。

嵌入式程序最大的特点是经常需要和硬件打交道,中断是接收外界输入的典型方式,通常都决定了系统运行流程,因此如何高效不丢失的处理中断是每个嵌入式程序员应考虑的问题

11、 TCP/IP和OSI七层模型是如何划分的?各层的功能,这么设计有什么好处?

【考点】层次化软件设计保证可移植性。

分层模型最大的好处就是某一层变化了,只要其提供上层的接口未变,那么上层就无需做任何改动。因此只需要更改本层的实现即可。嵌入式平台因为软硬件多变性,为了最大限度的利用先前的成果,软件设计一定要遵循这种层次化模型,这样才能保证其可移植性

12、 TCP和UDP的区别?各种网络互连设备都用在哪一层?如何建立链接?如何进行拥塞控制?

【考点】协议设计可靠性及缓冲区设计管理。

TCP和UDP的最大区别在于可靠性,TCP通过三次握手协议及超时机制安全可靠的建立或者释放连接。协议设计最大的问题就是如何保证效率合可靠性,TCP的设计为我们提供了一个参考。而滑动窗口机制可以有效的进行拥塞控制,但窗口大小的设计则关系到内存利用率及缓冲效率可靠性等问题。在嵌入式的驱动程序设计中,经常会开辟缓冲区来进行流量控制及防止数据覆盖,缓冲区的大小设计则需要更加具体的应用情况设计才能保证可靠性合灵活性


转载自http://www.cnblogs.com/xmphoenix/archive/2011/11/21/2257697.html


http://www.niftyadmin.cn/n/1713586.html

相关文章

HTML5期末大作业:网站——个人网站介绍 (7页面带轮播特效)明星赵丽颖 学生DW网页设计作业源码 web课程设计网页规划与设计 大学生个人网站作业模板

HTML5期末大作业:网站——个人网站介绍 (7页面带轮播特效)明星赵丽颖 临近期末, 你还在为HTML网页设计结课作业,老师的作业要求感到头大?HTML网页作业无从下手?网页要求的总数量太多?没有合适的模板?等等一系列问题。…

C语言中volatile的作用

转自http://blog.21ic.com/user1/2949/archives/2007/35599.html一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量…

C语言漂亮的宏定义

转自http://blog.21ic.com/user1/2949/archives/2007/35550.html 写好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性 等等。下面列举一些成熟软件中常用得宏定义。。。。。。 1&…

HTML期末大作业: 关于饮食餐饮HTML网页设计 ~咖啡网站pc端带轮播(5个页面) 学生DW网页设计作业源码

HTML期末大作业: 关于饮食餐饮HTML网页设计 ~咖啡网站pc端带轮播(5个页面) 学生DW网页设计作业源码 临近期末, 你还在为HTML网页设计结课作业,老师的作业要求感到头大?HTML网页作业无从下手?网页要求的总数量太多?没有合适的模板&#xff1f…

Keil编译时出现 Error:Failed to execute 'BIN40/Armcc'

在系统 开始——运行里输入 cmd,然后输入 cd C:\KEIL\ARM\BIN40\ 转到armcc.exe所在的文件夹,然后输入命令: armcc 查看输出,如果编程环境正常,应该输出正常信息。但我的输出是: 可见是License出了问题…

函数中有多个return?C语言中,一个函数可以有几个返回值?

在移植wifi的代码时,遇到了一些与下面类似的函数,这些函数中有不只一个return,这可是个新鲜的玩意儿: int func (int b) {int a5;if (a>b)return a;elsereturn b;return 0; }原来C/C 中,reutrn语句是这样定义的&am…

linux select poll epoll

http://bookjovi.iteye.com/blog/1186736 Linux中异步IO等待无非就三个系统调用:select, poll和epoll。很多人无法理解三种调用的区别,或不够了解,今天就结合Linux kernel code详细描述三个的区别! select: select 的…

HTML期末大作业—— 游戏网页(5个页面) ~ 全屏游戏美术大赛作品征集网页 HTML+CSS+JS ~ web课程设计网页规划与设计

HTML期末大作业—— 游戏网页(5个页面) ~ 全屏游戏美术大赛作品征集网页 HTMLCSSJS ~ web课程设计网页规划与设计 临近期末, 你还在为HTML网页设计结课作业,老师的作业要求感到头大?HTML网页作业无从下手?网页要求的总数量太多?没有合适的模…