嵌入式经典面试题 - 范文中心

嵌入式经典面试题

05/10

嵌入式经典面试题六:

关键字static的作用是什么?

这个简单的问题很少有人能回答完全。在C语言中,关键字static有三个明显的作用:

1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。

2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。

3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。

嵌入式经典面试题八:

关键字volatile有什么含意?并给出三个不同的例子。

一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:

1) 并行设备的硬件寄存器(如:状态寄存器)

2) 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)

3) 多线程应用中被几个任务共享的变量

1)一个参数既可以是const还可以是volatile吗?解释为什么。

2); 一个指针可以是volatile 吗?解释为什么。

下面是答案:

1)是的。一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。

2); 是的。尽管这并不很常见。一个例子是当一个中服务子程序修该一个指向一个buffer的指针时。

1.static变量和static 函数各有什么特点?

static变量分两种,局部变量和全局变量,他们都放在全局数据区(我觉得表达不准确。全局静态变量本文件可见,局部静态变量在在定义的block内可见;static函数也放在全局数据区,外部文件不可见;

3.描述一下嵌入式基于ROM的运行方式基于ram的运行方式有什么区别

rom运行方式是指指令从rom中取出,首先对rom有一定要求(例如按 block进行读写nand flash就不支持rom运行,同时由于rom读写的限制,无法完成异常处理,即异常处理函数肯定放在ram中)。在有区别就是片选不一样。

4.task 有几种状态?就绪、挂起、阻塞、睡眠、运行

5.task 有几种通讯方式?共享内存、信号量、消息队列和管道、socket

6.C函数允许重入吗?函数的重入和不可重入是和函数本省有关的,例如一个字符串拷贝的函数就是可重入的,而一个在函数中调用了I/O,分配内存是就可能是不重入的,是否重入要看调用的库函数是否重入的.现在Windows平台下的C库已经支持多线程了,所以如果你调用的是多线程版的C运行库,应该都是可重入的.

7.嵌入式操作系统和通用操作系统有什么差别?多优先级,抢占型,实时操作系统。嵌入式操作系统一

般没有UI,体积小,实时性强,对稳定性要求更高。嵌入式操作系统强调实时性,并且可裁减。要求系统资源的消耗要尽可能的小。

如何在C中初始化一个字符数组。

这个问题看似很简单,但是我们要将最简单的问题用最严谨的态度来对待。关键的地方:初始化、字符型、数组。最简单的方法是char array[];。这个问题看似解决了,但是在初始化上好像还欠缺点什么,个人认为:char array[5]={'1','2','3','4','5'};或者char array[5]={"12345"};或者char array[2][10]={"China","Beijing"};也许更符合“初始化”的意思。

2、 如何在C中为一个数组分配空间。

最简单的方法是:char array[5];意思是分配给数组array一个5个字节的空间。但是我们要知道在C中数组其实就是一个名字,其实质含义就是指针,比如char array[];是到底分配的多少空间?所以我们要将其分成为两种不同的形式给出答案:

一种是栈的形式:char array[5];

一种是堆的形式:char *array; array=(char *)malloc(5);//C++: array=new char[5]; 堆和栈的含义其实我也没弄太透彻,改天明白了再发一篇。

我们要明白的是,第一种形式空间分配的大小可能会受操作系统的限制,比如windows会限制在2M;第二种形式成空间分配很灵活,想分配多少分配多少,只要RAM够大。

3、 如何初始化一个指针数组。

首先明确一个概念,就是指向数组的指针,和存放指针的数组。

指向数组的指针:char (*array)[5];含义是一个指向存放5个字符的数组的指针。 存放指针的数组:char *array[5];含义是一个数组中存放了5个指向字符型数据的指针。

按照题意,我理解为初始化一个存放指针的数组,char

*array[2]={"China","Beijing"};其含义是初始化了一个有两个指向字符型数据的指针的数组,这两个指针分别指向字符串"China"和"Beijing"。

4、如何定义一个有10个元素的整数型指针数组。

既然只是定义而不是初始化,那就很简单且没有争议了:int *array[10];。

5、 s[10]的另外一种表达方式是什么。

前面说过了,数组和指针其实是数据存在形态的两种表现形式,如果说对于数组s[],我们知道*s=s[0],那么s[10]的另一种表达方式就是:*(s+10)。

6、 GCC3.2.2版本中支持哪几种编程语言。

这个问题实在变态,就像问你#error的作用是什么一样。不可否认,gcc是linux下一个亮点,是一个备受无数程序员推崇的编译器,其优点省略1000字,有兴趣可以自己查,我翻了翻书,书上曰:支持C,C++,Java,Obj-C,Ada,Fortran,Pascal,Modula-3等语言,这个“等”比较要命,不过我认为已经很全了,如果认为还是不全,干脆把ASM也加上算了,不过那已经不算是编译了。

7、 要使用CHAR_BIT需要包含哪个头文件。

如果结合上面的问题,答题的人估计会认为自己撞鬼了,这个问题实在是„„搜索了一下,应该是limits.h。

8、 对(-1.2345)取整是多少?

其实不同的取整函数可能有不同的结果,不过这个数没有太大的争议,答案是-1。

9、 如何让局部变量具有全局生命期。

具体的生命期的概念我觉得我还要好好深入的学习一下,但是这个题目还算比较简单,即用static修饰就可以了,但是只是生命期延长,范围并没有扩大,除非把这个变量定义在函数体外的静态区,不过那样就变成全局变量了,仿佛不符合题目要求。

10、C中的常量字符串应在何时定义?

这个问题说实话不是很理解题干的意思,据我理解,有两种情况,一种是预处理阶段,用#define定义;还有就是使用const修饰词,不过const修饰的是一个变量,其含义是“只读”,称之为常量并不准确,但是确实可以用操作变量的方法当常量用。所以还是第一种比较靠谱。

11、如何在两个.c文件中引用对方的变量。

这个问题也问的挺含糊的,怎么说呢,最简单最直接的方法是为变量添加extern修饰词,当然,这个变量必须是全局变量。还有一种就是利用函数调用来进行变量的间接引用,比如这个C文件中的一个函数引用另外一个C中的函数,将变量通过实参的形式传递过去。不过题目既然说是引用,那么还是用第一个答案好了。

12、使用malloc之前需要做什么准备工作。

其实准备工作很多啊,比如你需要一台计算机之类的。玩笑话,我们首先要知道malloc的用途,简单的说就是动态的分配一段空间,返回这段空间的头指针。实际的准备工作可以这么分:需要这段空间的指针是否存在,若不存在,则定义一个指针用来被赋值,还要清楚要返回一个什么类型的指针,分配的空间是否合理;如果指针已经存在,那么在重新将新的空间头地址赋值给这个指针之前,要先判断指针是否为NULL,如果不是要free一下,否则原来的空间就会被浪费,或者出错,free之后就按照前一种情形考虑就可以了。

13、realloc函数在使用上要注意什么问题。

这个函数我也才知道的,汗一个。据我的初步理解,这个函数的作用是重新分配空间大小,返回的头指针不变,只是改变空间大小。既然是改变,就有变大、变小和为什么改变的问题。变大,要注意不能大到内存溢出;变小,那变小的那部分空间会被征用,原有数据不再存在;为什么改变,如果是想重新挪作他用,还是先free了吧。

14、strtok函数在使用上要注意什么问题。

这个问题我不知道能不能回答全面,因为实在是用的很少。这个函数的作用是分割字符串,但是要分割的字符串不能是常量,这是要注意的。比如先定义一个字符串:char

array[]="part1,part2";,strtok的原形是char *strtok(char *string, char *delim);,我们将","作为分隔符,先用pt=strtok(array,",");,得到的结果print出来就是"part1",那后面的呢,要写成pt=strtok(NULL,",");,注意,要用NULL,如果被分割的字符串会被分成N段,那从第二次开始就一直要用NULL。总结起来,需要注意的是:被分割的字符串和分隔符都要使用变量;除第一次使用指向字符串的指针外,之后的都要使用NULL;注意使用这个函数的时候千万别把指针跟丢了,不然就全乱了。

15、gets函数在使用上要注意什么问题。

这是一个键盘输入函数,将输入字符串的头地址返回。说到要注意的问题,我还是先查

了一下网上的一些情况,需要注意的就是gets以输入回车结束,这个地球人都知道,但是很多人不知道的是,当你输入完一个字符串后,这个字符串可能依然存在于这个标准输入流之中,当再次使用gets的时候,也许会把上次输入的东西读出来,所以应该在使用之后用fflush(stdin);处理一下,将输入流清空。最后也还是要注意溢出的问题。关于这个答案我比较含糊,不知道有没有高人高见?

16、C语言的词法分析在长度规则方面采用的是什么策略?

我无语„„闻所未闻啊„„还是搜索了一下,有一篇文章,地址是:http://202.117.80.9/jp2005/20/kcwz/wlkc/wlkc/03/3_5_2.htm,是关于词法分析器的。其中提到了两点策略: (1) 按最长匹配原则确定被选的词型;(2) 如果一个字符串能为若干个词型匹配,则排列在最前面的词型被选中。不知道是不是题干的要求,还是其他什么。我乃一介草民,望达人指点迷津!

17、a+++++b所表示的是什么意思?有什么问题?

这个东西(称之为东西一点都不过分)其实并没有语法错误,按照C对运算符等级的划分,++的优先级大于+,那么这句话会被编译器看做:(a++)+(++b),这回明白了吧。有什么问题,语法上没有问题,有的是道德上的问题!作为一个优秀的程序员,我们要力求语句的合法性和可读性,如果写这句的人是在一个team里,那么他基本会被打的半死„„最后讨论一下结果:假设a之前的值是3,b是4,那么运行完这个变态语句后,a的值是4,b是5,语句的结果是8。

18、如何定义Bool变量的TRUE和FALSE的值。

不知道这个题有什么陷阱,写到现在神经已经大了,一般来说先要把TURE和FALSE给定义了,使用#define就可以:

#define TURE 1

#define FALSE 0

如果有一个变量需要定义成bool型的,举个例子:bool a=TURE;就可以了。

19、C语言的const的含义是什么。在定义常量时,为什么推荐使用const,而不是#define。 首先,这个题干抽了10题回答的一个大嘴巴。关于常量的概念看来我要好好看看书了„„我说过了,const修饰词可以将一个变量修饰为“只读”,这个就能称为常量么?姑且认为可以。回到题目中,const是只读的意思,它限定一个变量不允许被改变,谁都不能

改!既然是修饰变量,那么变量的类型就可以丰富多彩,int啊,char啊,只要C认识的都可以;但是#define就不可以了,在预处理阶段缺乏类型检测机制,有可能会出错。还有就是变量可以extern,但是#define就不可以。貌似const还可以节省RAM,这个我倒是没有考证过。至于const的用法和作用,有很多,我会总结后发上来。


相关内容

  • 单片机硬件工程师面试试题
    单片机硬件工程师面试试题 一.现代通讯网络中广泛使用的交换方式有那两种? 分组和电路 二.通常所说的TCP/IP协议对应于OSI模型的哪层?你认为网络模型分层有什么好处?如果让你来制订网络体系架构,你认为应该遵循什么原则? 第四(传输)和第 ...
  • 6个面试的经典英文问题
    [楼主] 标题: 6个面试的经典英文问题[顶][精] "work experience" is the type of work you've done in the past. If you haven't start ...
  • 检测复试全攻略(口语中先是自我介绍,)
    检测技术与自动化装置复试全攻略 各位通过初试的检测师弟师妹们大家好,在此向你们道贺,但是初试过了不代表复试就安全了,不过不用太紧张.作为受益与11,12级师兄师姐的帮助,我在此为大家写一下13年检测复试的一些流程和细节提供给大家参考(仅仅参 ...
  • 某一公司的招聘计划书
    某一公司的招聘计划书 一.招聘的目的及遵循的原则 1.目的: 1.为新成立的组织各岗位输送所需要的人才: 2.为组织填补现有的岗位空缺: 3.撤换现有岗位上的不称职人员,提高工作效率和工作质量: 4.填补由于原有岗位人员晋升而形成的空缺: ...
  • 微博营销技巧
    微博营销技巧 共21页-第1页 一. 网络营销的变革 1. 微博营销是网络营销的变革 微博营销与传统网络营销的核心不同在于, 微博信息的人际传播取代了网站编辑(版主)主导的信息传播. (1) 落后的门户网站的广告模式 先说门户网站的广告营销 ...
  • 幼儿园课程与活动设计01
    试卷代号:1 335 中央广播电视大学2011-2012学年度第二学期"开放本科"期末考试 幼儿园课程与活动设计 试题 一.单项选择题 1."课程是指学生体验到的意义",对课程的这种定义是认为( ). ...
  • 常见嵌入式笔试题
    常见入嵌笔试题式一( ) 1)将一字符串个序逆 代 : #码nclide&utlst;id.o>h inc#uled&lts;rtin.h≫ toiv s_badck(harc* a ) { niti=0 c;ha t ...
  • 金地1903橱柜 招标技术要求20**年
    武汉金地1903项目 橱柜招标技术文件 有限公司 二〇一三年四月 目录 1适用范围............................................................................... ...
  • [职场英语学习]外企面试最常用的八大英文问题及高分回答
    外企面试最常用的八大英文问题及高分回答 英语口语学习,英语口语培训,商务英语学习,职场英语学习,外企面试最常用的八大英文问题及高分回答 面试, 外企, 英语, 英语面试 外企面试最常用的八大英文问题及高分回答 每年的12月到次年2月都是职场 ...