嵌入式面试最常用的307个试题和答案(一)

更新时间:2024-06-14 08:12:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

嵌入式面试最常用的307个试题和答案(一)

经典嵌入式面试题总结

C语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法。这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为带面试者和被面试者提供许多有用信息,此外,撇开面试的压力不谈,这种测试也是相当有趣的。

从被面试者的角度来讲,你能了解许多关于出题者或监考者的情况。这个测试只是出题者为显示其对ANSI标准细节的知识而不是技术技巧而设计吗?这个愚蠢的问题吗?如要你答出某个字符的ASCII值。这些问题着重考察你的系统调用和内存分配策略方面的能力吗?这标志着出题者也许花时间在微机上而不上在嵌入式系统上。如果上述任何问题的答案是\是\的话,那么我知道我得认真考虑我是否应该去做这份工作。

从面试者的角度来讲,一个测试也许能从多方面揭示应试者的素质:最基本的,你能了解应试者C语言的水平。不管怎么样,看一下这人如何回答他不会的问题也是满有趣。应试者是以好的直觉做出明智的选择,还是只是瞎蒙呢?当应试者在某个问题上卡住时是找借口呢,还是表现出对问题的真正的好奇心,把这看成学习的机会呢?我发现这些信息与他们的测试成绩一样有用。

有了这些想法,我决定出一些真正针对嵌入式系统的考题,希望这些令人头痛的考题能给正在找工作的人一点帮住。这些问题都是我这些年实际碰到的。其中有些题很难,但它们应该都能给你一点启迪。

这个测试适于不同水平的应试者,大多数初级水平的应试者的成绩会很差,经验丰富的程序员应该有很好的成绩。为了让你能自己决定某些问题的偏好,每个问题没有分配分数,如果选择这些考题为你所用,请自行按你的意思分配分数。

预处理器(Preprocessor)

1 . 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)

#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情:

?; #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)

?; 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。

?; 意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。 ?; 如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点。记住,第一印象很重要。

2 . 写一个\标准\宏MIN ,这个宏输入两个参数并返回较小的一个。

#define MIN(A,B) ( (A) <= (B) ? (A) : (B) )

这个测试是为下面的目的而设的:

?; 标识#define在宏中应用的基本知识。这是很重要的,因为直到嵌入(inline)操作符变为标准C的一部分,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能达到要求的性能,嵌入代码经常是必须的方法。

?; 三重条件操作符的知识。这个操作符存在C语言中的原因是它使得编译器能产生比if-then-else更优化的代码,了解这个

用法是很重要的。

?; 懂得在宏中小心地把参数用括号括起来

?; 我也用这个问题开始讨论宏的副作用,例如:当你写下面的代码时会发生什么事?least = MIN(*p++, b);

3. 预处理器标识#error的目的是什么? #error 停止编译并显示错误信息

如果你不知道答案,请看参考文献1。这问题对区分一个正常的伙计和一个书呆子是很有用的。只有书呆子才会读C语言课本的附录去找出象这种问题的答案。当然如果你不是在找一个书呆子,那么应试者最好希望自己不要知道答案。 死循环(Infinite loops)

4. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢? 这个问题用几个解决方案。我首选的方案是: while(1) { ;}

一些程序员更喜欢如下方案: for(;;) { ;}

这个实现方式让我为难,因为这个语法没有确切表达到底怎么回事。如果一个应试者给出这个作为方案,我将用这个作为一个机会去探究他们这样做的基本原理。如果他们的基本答案是:\我被教着这样做,但从没有想到过为什么。\这会给我留下一个坏印象。

第三个方案是用 goto Loop: ... goto Loop;

应试者如给出上面的方案,这说明或者他是一个汇编语言程序员(这也许是好事)或者他是一个想进入新领域的BASIC/FORTRAN程序员。

数据声明(Data declarations) 5. 用变量a给出下面的定义

a) 一个整型数(An integer) int a

b)一个指向整型数的指针( A pointer to an integer) int *a

c)一个指向指针的的指针,它指向的指针是指向一个整型数( A pointer to a pointer to an intege)r *(int *a) int**a d)一个有10个整型数的数组( An array of 10 integers)int a[10]

e) 一个有10个指针的数组,该指针是指向一个整型数的。(An array of 10 pointers to integers) int *a[10] f) 一个指向有10个整型数数组的指针( A pointer to an array of 10 integers) *(int a[10]) int (*a)[10] g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that takes an integer as an argument and returns an integer) fun(*int a ) int (*max_function)(int a)

h)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数( An array of ten pointers to functions that take an integer argument and return an integer )fun(*int a[10])

int (*a[10])(int) 答案是:

a) int a; // An integer

b) int *a; // A pointer to an integer

c) int **a; // A pointer to a pointer to an integer d) int a[10]; // An array of 10 integers

e) int *a[10]; // An array of 10 pointers to integers 等价于int *(a[10]);

f) int (*a)[10]; // A pointer to an array of 10 integers

g) int (*max_function)(int a); // A pointer to a function a that takes an integer argument and returns an integer

h) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer

人们经常声称这里有几个问题是那种要翻一下书才能回答的问题,我同意这种说法。当我写这篇文章时,为了确定语法的正确性,我的确查了一下书。但是当我被面试的时候,我期望被问到这个问题(或者相近的问题)。因为在被面试的这段时间里,我确定我知道这个问题的答案。应试者如果不知道所有的答案(或至少大部分答案),那么也就没有为这次面试做准备,如果该面试者没有为这次面试做准备,那么他又能为什么出准备呢?

6. 关键字static的作用是什么?

在C语言中,关键字static有三个明显的作用:

一旦声明为静态变量,在编译时刻开始永远存在,不受作用域范围约束,但是如果是局部静态变量,则此静态变量只能在局部作用域内使用,超出范围不能使用,但是它确实还占用内存,还存在.

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

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

大多数应试者能正确回答第一部分,一部分能正确回答第二部分,很少人能懂得第三部分。这是一个应试者的严重的缺点,因为他显然不懂得本地化数据和代码范围的好处和重要性。

7.关键字const有什么含意?

总结:1)只读。2)使用关键字const也许能产生更紧凑的代码。3)使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。

我只要一听到被面试者说:\意味着常数\,我就知道我正在和一个业余者打交道。去年Dan Saks已经在他的文章里完全概括了const的所有用法,因此ESP(译者:Embedded Systems Programming)的每一位读者应该非常熟悉const能做什么和不能做什么.如果你从没有读到那篇文章,只要能说出const意味着\只读\就可以了。尽管这个答案不是完全的答案,但我接受它作为一个正确的答案。(如果你想知道更详细的答案,仔细读一下Saks的文章吧。)

如果应试者能正确回答这个问题,我将问他一个附加的问题: 下面的声明都是什么意思?

const int a; int const a; const int *a; int * const a; int const * a const;

/******/

前两个的作用是一样,a是一个常整型数。

第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)。

第四个意思a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)。

最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)。

如果应试者能正确回答这些问题,那么他就给我留下了一个好印象。顺带提一句,也许你可能会问,即使不用关键字const,也还是能很容易写出功能正确的程序,那么我为什么还要如此看重关键字const呢?我也如下的几下理由:

?; 关键字const的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的。如果你曾花很多时间清理其它人留下的垃圾,你就会很快学会感谢这点多余的信息。(当然,懂得用const的程序员很少会留下的垃圾让别人来清理的。)

?; 通过给优化器一些附加的信息,使用关键字const也许能产生更紧凑的代码。

?; 合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少bug的出现。

总计工业控制消费电子的多个领域嵌入式工程师面试题以及答案总结

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

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

下面是volatile变量的几个例子:

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

?; 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables) ?; 多线程应用中被几个任务共享的变量

回答不出这个问题的人是不会被雇佣的。我认为这是区分C程序员和嵌入式系统程序员的最基本的问题。搞嵌入式的家伙们经常同硬件、中断、RTOS等等打交道,所有这些都要求用到volatile变量。不懂得volatile的内容将会带来灾难。

假设被面试者正确地回答了这是问题(嗯,怀疑是否会是这样),我将稍微深究一下,看一下这家伙是不是直正懂得volatile完全的重要性。

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

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

?; 下面的函数有什么错误:int square(volatile int *ptr){return *ptr * *ptr;}

下面是答案:

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

?; 是的。尽管这并不很常见。一个例子是当一个中断服务子程序修改一个指向一个buffer的指针时。 ?; 这段代码有点变态。这段代码的目的是用来返回指针*ptr指向值的平方,但是,由于*ptr指向一个volatile型参数,编译器将产生类似下面的代码: int square(volatile int *ptr) { int a,b; a = *ptr; b = *ptr; return a * b; }

由于*ptr的值可能被意想不到地该变,因此a和b可能是不同的。结果,这段代码可能返不是你所期望的平方值!正确的代码如下: long square(volatile int *ptr) { int a; a = *ptr; return a * a; }

位操作(Bit manipulation)

9. 嵌入式系统总是要用户对变量或寄存器进行位操作。给定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清除a 的bit 3。在以上两个操作中,要保持其它位不变。

对这个问题有三种基本的反应

?; 不知道如何下手。该被面者从没做过任何嵌入式系统的工作。

?; 用bit fields。Bit fields是被扔到C语言死角的东西,它保证你的代码在不同编译器之间是不可移植的,同时也保证了的你的代码是不可重用的。我最近不幸看到Infineon为其较复杂的通信芯片写的驱动程序,它用到了bit fields因此完全对我无用,因为我的编译器用其它的方式来实现bit fields的。从道德讲:永远不要让一个非嵌入式的家伙粘实际硬件的边。

?; 用 #defines 和 bit masks 操作。这是一个有极高可移植性的方法,是应该被用到的方法。最佳的解决方案如下:

#define BIT3 (0x1 << 3) static int a;

void set_bit3(void) {a |= BIT3;} void clear_bit3(void) {a &= ~BIT3;}

一些人喜欢为设置和清除值而定义一个掩码同时定义一些说明常数,这也是可以接受的。我希望看到几个要点:说明常数、|=和&=~操作。

访问固定的内存位置(Accessing fixed memory locations)

10. 嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点。在某工程中,要求设置一绝对地址为0x67a9的整型变量的值为0xaa55。

编译器是一个纯粹的ANSI编译器。写代码去完成这一任务。

这一问题测试你是否知道为了访问一绝对地址把一个整型数强制转换(typecast)为一指针是合法的。这一问题的实现方式随着个人风格不同而不同。典型的类似代码如下:

int *ptr;

ptr = (int *)0x67a9; *ptr = 0xaa55;

A more obscure approach is: 一个较晦涩的方法是:

*(int * const)(0x67a9) = 0xaa55;

即使你的品味更接近第二种方案,但我建议你在面试时使用第一种方案。

中断(Interrupts)

11. 中断是嵌入式系统中重要的组成部分,这导致了很多编译开发商提供一种扩展——让标准C支持中断。具代表事实是,产生了一个新的关键字__interrupt。下面的代码就使用了__interrupt关键字去定义了一个中断服务子程序(ISR),请评论一下这段代码的。

__interrupt double compute_area (double radius) {

double area = PI * radius * radius; printf(\return area; }

这个函数有太多的错误了,以至让人不知从何说起了:

?; ISR 不能返回一个值。如果你不懂这个,那么你不会被雇用的。

?; ISR 不能传递参数。如果你没有看到这一点,你被雇用的机会等同第一项。

?; 在许多的处理器/编译器中,浮点一般都是不可重入的。有些处理器/编译器需要让额处的寄存器入栈,有些处理器/编译器就是不允许在ISR中做浮点运算。此外,ISR应该是短而有效率的,在ISR中做浮点运算是不明智的。

?; 与第三点一脉相承,printf()经常有重入和性能上的问题。如果你丢掉了第三和第四点,我不会太为难你的。不用说,如果你能得到后两点,那么你的被雇用前景越来越光明了。

*****

代码例子(Code examples)

12 . 下面的代码输出是什么,为什么? void foo(void) {

unsigned int a = 6; int b = -20;

(a+b > 6) ? puts(\}

这个问题测试你是否懂得C语言中的整数自动转换原则,我发现有些开发者懂得极少这些东西。不管如何,这无符号整型问题的答案是输出是 \。

原因是当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。

因此-20变成了一个非常大的正整数,所以该表达式计算出的结果大于6。这一点对于应当频繁用到无符号数据类型的嵌入式系统来说是丰常重要的。如果你答错了这个问题,你也就到了得不到这份工作的边缘。

13. 评价下面的代码片断: unsigned int zero = 0;

unsigned int compzero = 0xFFFF; //1's complement of zero

对于一个int型不是16位的处理器为说,上面的代码是不正确的。应编写如下: unsigned int compzero = ~0;

这一问题真正能揭露出应试者是否懂得处理器字长的重要性。在我的经验里,好的嵌入式程序员非常准确地明白硬件的细节和它的局限,然而PC机程序往往把硬件作为一个无法避免的烦恼。

到了这个阶段,应试者或者完全垂头丧气了或者信心满满志在必得。如果显然应试者不是很好,那么这个测试就在这里结束了。但如果显然应试者做得不错,那么我就扔出下面的追加问题,这些问题是比较难的,我想仅仅非常优秀的应试者能做得不错。提出这些问题,我希望更多看到应试者应付问题的方法,而不是答案。不管如何,你就当是这个娱乐吧...

动态内存分配(Dynamic memory allocation)

14. 尽管不像非嵌入式计算机那么常见,嵌入式系统还是有从堆(heap)中动态分配内存的过程的。那么嵌入式系统中,动态分配内存可能发生的问题是什么?

这里,我期望应试者能提到内存碎片,碎片收集的问题,变量的持行时间等等。这个主题已经在ESP杂志中被广泛地讨论过了(主要是 P.J. Plauger, 他的解释远远超过我这里能提到的任何解释),所有回过头看一下这些杂志吧!让应试者进入一种虚假的安全感觉后,我拿出这么一个小节目: 下面的代码片段的输出是什么,为什么?

char *ptr;

if ((ptr = (char *)malloc(0)) == NULL) puts(\else puts(\

这是一个有趣的问题。最近在我的一个同事不经意把0值传给了函数malloc,得到了一个合法的指针之后,我才想到这个问题。这就是上面的代码,该代码的输出是\。我用这个来开始讨论这样的一问题,看看被面试者是否想到库例程这样做是正确。得到正确的答案固然重要,但解决问题的方法和你做决定的基本原理更重要些。

15 Typedef 在C语言中频繁用以声明一个已经存在的数据类型的同义字。也可以用预处理器做类似的事。例如,思考一下下面的例子: #define dPS struct s * typedef struct s * tPS;

以上两种情况的意图都是要定义dPS 和 tPS 作为一个指向结构s指针。哪种方法更好呢?(如果有的话)为什么?这是一个非常微妙的问题,任何人答对这个问题(正当的原因)是应当被恭喜的。答案是:typedef更好。思考下面的例子: dPS p1,p2; tPS p3,p4;

第一个扩展为struct s * p1, p2;

上面的代码定义p1为一个指向结构的指针,p2为一个实际的结构,这也许不是你想要的。

第二个例子正确地定义了p3 和p4 两个指针。

晦涩的语法

16 . C语言同意一些令人震惊的结构,下面的结构是合法的吗,如果是它做些什么?

int a = 5, b = 7, c; c = a+++b;

这个问题将做为这个测验的一个愉快的结尾。不管你相不相信,上面的例子是完全合乎语法的。问题是编译器如何处理它?水平不高的编译作者实际上会争论这个问题,根据最处理原则,编译器应当能处理尽可能所有合法的用法。因此,上面的代码被处理成:c = a++ + b; 因此, 这段代码持行后a = 6, b = 7, c = 12。

如果你知道答案,或猜出正确答案,做得好。如果你不知道答案,我也不把这个当作问题。我发现这个问题的最大好处是这是一个关于代码编写风格,代码的可读性,代码的可修改性的好的话题。

好了,伙计们,你现在已经做完所有的测试了。这就是我出的C语言测试题,我怀着愉快的心情写完它,希望你以同样的心情读完它。如果是认为这是一个好的测试,那么尽量都用到你的找工作的过程中去吧。

memcmp

Compare characters in two buffers. 比较两块内存中的字符

int memcmp( const void *buf1, const void *buf2, size_t count );

memset

Sets buffers to a specified character 将内存块设置为指定的字符

sprintf

Write formatted data to a string 将格式化的数据写到字符串

总计工业控制消费电子的多个领域嵌入式工程师面试题以及答案总结

一、单项选择题

1、如下哪一个命令可以帮助你知道shell命令的用法( A )

A. man B.pwd C. help D. more 2、Linux分区类型默认的是:( B )

A. vfat B. ext2/ext3 C. swap D. dos 3、在大多数Linux发行版本中,以下哪个属于块设备 ( B ) A. 串行口 B. 硬盘 C. 虚拟终端 D. 打印机 4、下面哪个命令行可用来马上重新启动正在运行的Linux系统?( D ) A. restart --delay=0 B. reboot -w C. halt -p D. shutdown -r now

5、在Linux系统,默认的shell是什么( A ) A.bash B.ash C.csh D.gnush

6、下面哪条命令可用来确保文件“myfile”存在( B ) A. cp myfile /dev/null B. touch myfile C. create myfile D. mkfile myfile 7、 LILO的配置文件是:( B )

A. /etc/conf B. /etc/lilo.conf C. /proc/kcore D. /usr/local/

8、用“useradd jerry”命令添加一个用户,这个用户的主目录是什么( A ) A./home/jerry B./bin/jerry C./var/jerry D./etc/jerry

9、Linux文件权限一共10位长度,分成四段,第三段表示的内容是( D ) A.文件类型 B.文件所有者的权限 C.文件所有者所在组的权限 D.其他用户的权限

10、某文件的组外成员的权限为只读;所有者有全部权限;组内的权限为读与写,则该文件的权限为( D ) A.467 B.674 C.476 D.764 11、不是shell具有的功能和特点的是 ( A )

A.管道 B.输入输出重定向 C.执行后台进程 D.处理程序命令 12、如何从当前系统中卸载一个已装载的文件系统( A ) A. umount B. dismount

C. mount –u D. 从 /etc/fstab 中删除这个文件系统项

13、你用vi编辑器编写了一个脚本文件shell.sh,你想将改文件名称修改为shell2.sh,下列命令( B )可以实现。

A. cp shell.sh shell2.sh B. mv shell.shshell2.sh C. ls shell.sh >shell2.sh D. ll shell.sh>shell2.sh

14、在/home/stud1/wang目录下有一文件file,使用 ( D )可实现在后台执行命令,此命令将file文件中的内容输出到file.copy文件中。

A. cat file >file.copy B. cat file file.copy C. &cat file file.copy D. &cat file >file.copy 15、字符设备文件类型的标志是 ( B ) A. p B. c C. s D. l 16、删除文件命令为( D )

A. mkdir B. rmdir C.mv D. rm 17、( B )命令可更改一个文件的权限设置?

A. attrib B. chmod C. change D. file

18、用命令ls -al显示出文件ff的描述如下所示,由此可知文件ff的类型为( A )。

69、在Linux系统中,驱动程序注册中断处理程序的函数是_B____ A、trap_init B、request_irq C、enable_irq D、register_irq

70、在ARM Linux系统中,中断处理程序进入C代码以后,ARM的处于__A__工作模式 A、超级用户(SVC) B、中断(IRQ)

C、快速中断(IRQ) D、和进入中断之前的状态有关系

71、在ARM体系构建的嵌入式系统中,由电平模式触发的中断,其对应的中断标准应该在何时被清除?A A、当中断处理程序结束以后,才可以清除 B、进入相应的中断处理程序,即可以清除 C、产生IRQ中断的时候,处理器自动清除 D、任何时候都可以清除

72、在操作系统中,Spooling技术是用一类物理设备模拟另一类物理设备的技术,实现这种技术的功能模块称做( B )。

A、可林斯系统 B、斯普林系统 C、图灵机系统 D、 虚拟存储系统

73、通过修改下面文件哪个文件 ,可以设定开机时候自动安装的文件系统(C ) A. /etc/mta B. /etc/fastboot C. /etc/fstab D. /etc/inetd.conf 74、下面关于Shell的说法,不正确的是: (D) A. 操作系统的外壳

B. 用户与Linux内核之间的接口程序 C. 一个命令语言解释器 D. 一种和C类似的程序语言

75、init可执行文件通常存放在( C )目录中。 A./etc B./boot C./sbin D./root 76、假设root用户执行“init 0”命令,系统将会( B )。

A.暂停 B.关机 C.重新启动 D.初始化

77、嵌入式系统应用软件一般在宿主机上开发,在目标机上运行,因此需要一个( B )环境。 A、交互操作系统 B、交叉编译 C、交互平台 D、分布式计算 78、已知有变量data1定义如下:C union data { int i; char ch; float f; } data1;

则变量data1所占的内存存储空间可表示为。

A、sizeof(int) B、sizeof(char)

C、sizeof(float) D、sizeof(int)+sizeof(char)+sizeof(float) 79、软件开发模型给出了软件开发活动各阶段之间的关系,( D )不是软件开发模型。 A、瀑布模型 B、螺旋模型 C、原型模型 D、程序模型

80、实时操作系统(RTOS)内核与应用程序之间的接口称为( C )。 A、输入/输出接口 B、文件系统 C、API D、图形用户接口

81、在操作系统中,除赋初值外,对信号量仅能操作的两种原语是( C )。 A、存操作、取操作 B、读操作、写操作 C、P操作、V操作 D、输入操作、输出操作

82、在下列ARM处理器的各种模式中,只有__A___模式不可以自由地改变处理器的工作模式。 A、用户模式(User) B、系统模式(System) C、终止模式(Abort) D、中断模式(IRQ)

83、32位体系结构的ARM处理器有_B___种不同的处理器工作模式,和__B__个主要用来标识CPU的工作状态和程序的运行状态的状态寄存器。

A、7、7 B、7、6 C、6、6 D、6、7

总计工业控制消费电子的多个领域嵌入式工程师面试题以及答案总结

84、已知Linux系统中的唯一一块硬盘是第一个IDE接口的master设备,该硬盘按顺序有3个主分区和一个扩展分区,这个扩展分区又划分了3个逻辑分区,则该硬盘上的第二个逻辑分区在Linux中的设备名称是( D )

A. /dev/hda2 B. /dev/hda3 C. /dev/hda5 D. /dev/hda6

85、为了查看Linux启动信息,可以用:( B )

A、cat /etc/lilo.conf B、dmesg C、 cat/proc/cpuinfo D、lilo

86、某文件的组外成员的权限为只写;所有者有读写权限;组内的权限为只读,则该文件的权限为( B ) A 467 B 642 C 476 D 764 87、下面哪个命令行可用来马上重新启动正在运行的Linux系统?( D ) A. restart --delay=0 B. reboot -w C. halt -p D. shutdown -r now 88、在bash命令中,当用( B )参数时,表示bash是交互的。 A、-c B、-i C、-s D、-d 89、重定向的符号“>>\ A )

A、输出追加 B、输入追加 C、输出重定向,原来的文件被改写 D、管道 90、Linux文件权限一共10位长度,分成四段,第一段表示的内容是( A ) A 文件类型 B 文件所有者的权限

C 文件所有者所在组的权限 D 其他用户的权限 91、( B )命令可更改一个文件的权限设置?

A. attrib B. chmod C. change D. file

92、你用vi编辑器编写了一个脚本文件shell.sh,你想将该文件名称修改为shell2.sh,下列命令( B )可以实现。

A. cp shell.sh shell2.sh B. mv shell.sh shell2.sh C. ls shell.sh >shell2.sh D. ll shell.sh >shell2.sh

93、在使用GCC编译器的过程中,以下(B)选项可用来指定生成的目标文件名 A.-c B.-o C.-S D.-E

94、假设当前目录下有文件Makefile,下面是其内容: pr1: prog.o subr.o gcc –o pr1 prog.o subr.o prog.o: prog.c prog.h gcc –c –l prog.o prog.c subr.o: subr.c

gcc –c –o subr.o subr.c clear: rm –f pr1*.o

现在执行命令make subr.o,实际执行的命令是(C): A. gcc –o pr1 prog.o subr.o B. gcc –c –l prog.o prog.c C. gcc –c –o subr.o subr.c D. 都执行

95、为了使用生成的目标文件能够用于gdb调试,在编译时GCC应使用(C)选项。 A.-c B.-w C.-g D.-o 96、存盘并退出vi的指令是( D )。 A、q B、q! C、w D、wq

97. 下列关于/etc/fstab文件描述,正确的是( D )。 A. fstab文件只能描述属于linux的文件系统 B. CD_ROM和软盘必须是自动加载的 C. fstab文件中描述的文件系统不能被卸载 D 启动时按fstab文件描述内容加载文件系统

98. ARM嵌入式系统中,PC指向的是正在(C )的指令地址。 A 执行 B 译码 C 取指 D 都不是

99. ARM系统处理16-bit数据时,对应的数据类型是( B )。

A Byte B Halfword C Word D 三者都不是 100. 实时系统是指( B )

A 响应快的系统 B 时间约束的系统 C 单任务系统 D 内核小的系统 101. 下面属于blob运行过程第一阶段的是(C) A 外围的硬件初始化(串口,USB等);

B 根据用户选择,进入命令行模块或启动kernel。 C 寄存器的初始化 D 堆栈的初始化

答案:C第一阶段的代码在start.s中定义,大小为1KB,它包括从系统上电后在0x00000000地址开始执行的部分。这部分代码运行在Flash中,它包括对S3C44B0的一些寄存器的初始化和将Blob第二阶段代码从Flash拷贝到SDRAM中。

102.下列几种流行的嵌入式GUI中,没有采用分层设计的一种是: B A.MiniGUI B. Qt/Embedded C. Nano-XWindow D. OpenGUI 103. Qt/Embedded的底层图形引擎基于一下哪种接口技术: A A.framebuffer B.GAL C.IAL D.GFX

总计工业控制消费电子的多个领域嵌入式工程师面试题以及答案总结

104.在Linux使用GCC编译器时有如下命令:Gcc–g test.c –o test,其中参数-g的作用是(D) A .生成目标文件test.o B.生成汇编文件test.s C .进行预编译 D .包含调试信息

105. LINUX支持网络文件系统NFS,下列哪个命令实现了将位于 192.168.1.4机器上的 /opt/sirnfs 目录挂载到本机/mnt/sirnfs下: A

A.mount -t nfs 192.168.1.4:/opt/sirnfs/mnt/sirnfs B.mount -t nfs /mnt/sirnfs 192.168.1.4:/opt/sirnfs C.mount nfs –t 192.168.1.4:/opt/sirnfs/mnt/sirnfs D.mount nfs –t /mnt/sirnfs192.168.1.4:/opt/sirnfs

106、同CISC相比,下面哪一项不属于RISC处理器的特征___D_____ A、采用固定长度的指令格式,指令规整、简单、基本寻址方式有2~3种。 B、减少指令数和寻址方式,使控制部件简化,加快执行速度。

C、数据处理指令只对寄存器进行操作,只有加载/存储指令可以访问存储器,以提高指令的执行效率,同时简化处理器的设计。 D、RISC处理器都采用哈佛结构

107、32位数0x12345678用小端格式表示,则在AXD调试器下观察数据在内存中分布的情况是(B)

A 12 34 56 78 B 78 56 34 12 C 21 43 65 87 D 87 65 43 21 108、RISC是指(C)

A 复杂指令计算机 B 并行机 C 精简指令计算机 D 多处理器计算机

109、在ARM体系结构中,__C__寄存器作为连接寄存器,当进入子程序时或者处理器响应异常的时候,用来保存PC的返回值;_C___寄存器作为处理器的程序计数器指针。

A、R0,R14 B、R13,R15 C、R14,R15 D、R14,R0

110、在ARM体系结构中,要从主动用户模式(User)切换到超级用户模式(Supervisor),应采用何种方法?C

A、直接修改CPU状态寄存器(CPSR)对应的模式

B、先修改程序状态备份寄存器(SPSR)到对应的模式,再更新CPU状态 C、使用软件中断指令(SWI) D、让处理器执行未定义指令 111、表达式A⊕B实现的功能是(C)

A 逻辑与 B 逻辑非 C 逻辑异或 D逻辑或

112、嵌入式系统的开发通常是在交叉开发环境实现的,交叉开发环境是指( A ) A 在宿主机上开发,在目标机上运行 B在目标机上开发,在宿主机上运行 C 在宿主机上开发,在宿主机上运行 D在目标机上开发,在目标机上运行 113、在ARM系统结构中,MMU映射最小的单元空间是__D__ A、64KB B、16KB C、4KB D、1KB

114、在ARM Linux启动的过程中,开启MMU的时候,如何实现从实地址空间到虚拟地址空间的过度?D A、开启MMU,在内存中创建页表(映射内核到3G以上的虚拟地址空间)并继续运行。

B、开启MMU,在内存中创建页表(映射内核到3G以上的虚拟地址空间),跳转到虚拟地址空间继续运行。 C、在内存中创建页表(映射内核到3G以上的虚拟地址空间),开启MMU,跳转到虚拟地址空间继续运行。 D、在内存中创建页表(映射内核到3G以上的虚拟地址空间,同时把内核所在的前1MB空间到和其实地址相同的虚拟地址空间),开启MMU,跳转到虚拟地址空间继续运行。

115、在ARM体系中,MMU的第一级描述符有___项,每个描述符占用____字节 A、1024,32 B、4096,4 C、4096,4 D、1024,32 答案:C(B和C一样的,A和D是一样的)

116、在ARM体系中,下面MMU的一级描述符中,是节描述符的是_A___ A、0xA0000C0E B、0xA0000C0F C、0x00000000 D、0xC0000C01

117、在ARM Linux体系中,用来处理外设中断的异常模式是_C_____ A、软件中断(SWI) B、未定义的指令异常 C、中断请求(IRQ) D、快速中断请求(FIQ)

总计工业控制消费电子的多个领域嵌入式工程师面试题以及答案总结

118 、指令ADD R2,R1,R1,LSR #2中,LSR的含义是(B)。 A 逻辑左移 B 逻辑右移 C 算术右移 D循环右移

119、以下ARM异常中,优先级最高的是(D )。 A Data abort B FIQ C IRQ D Reset

120、指令LDR R0,[R4]对源操作数的寻址方式是( A )

A 寄存器间接寻址 B寄存器寻址 C立即数寻址 D 相对寻址

121、在Linux 2.4或者2.6内核中,和ARM体系结构相关的中断处理程序的C代码在源码树的__B_文件中 A、kernerl/irq.c

B、arch/arm/kernel/irq.c C、arch/arm/mach/irq.c

D、arch/arm/kernel/entry-armv.S

122、以下关于init进程,描述不正确的是:(A) A. 一个通用进程 B. 可以产生新的进程

C. 在某些程序退出的时候能重起它们

D. 负责在系统启动的时候运行一系列程序和脚本文件 123、哈佛结构和冯诺依曼结构的区别是( A)

A 指令和数据分开存储 B 不需要程序计数器 C 统一编址 D 124、fstab文件存放在(A)目录中。

A./etc B./boot C./sbin &

单一数据总线

A 寄存器间接寻址 B寄存器寻址 C立即数寻址 D 相对寻址

121、在Linux 2.4或者2.6内核中,和ARM体系结构相关的中断处理程序的C代码在源码树的__B_文件中 A、kernerl/irq.c

B、arch/arm/kernel/irq.c C、arch/arm/mach/irq.c

D、arch/arm/kernel/entry-armv.S

122、以下关于init进程,描述不正确的是:(A) A. 一个通用进程 B. 可以产生新的进程

C. 在某些程序退出的时候能重起它们

D. 负责在系统启动的时候运行一系列程序和脚本文件 123、哈佛结构和冯诺依曼结构的区别是( A)

A 指令和数据分开存储 B 不需要程序计数器 C 统一编址 D 124、fstab文件存放在(A)目录中。

A./etc B./boot C./sbin &

单一数据总线

本文来源:https://www.bwwdw.com/article/m1u6.html

Top