嵌入式linux android驱动工程师 面试题总汇

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

嵌入式linux android驱动工程师面试题总汇

1. 嵌入式系统中断服务子程序(ISR) 收藏中断是嵌入式系统中重要的组成

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

__interrupt double compute_area (double radius) { double area = PI * radius * radius; printf(" Area = %f", area); return area; } 1). ISR 不能返回一个值。2). ISR 不能传递参数。3). 在许多的处理器/编译器中,浮点一般都是不可重入的。有些处理器/编译器需要让额处的寄存器入栈,有些处理器/编译器就是不允许在ISR中做浮点运算。此外,ISR应该是短而有效率的,在ISR中做浮点运算是不明智的。4). 与第三点一脉相承,printf()经常有重入和性能上的问题。

2.C语言中对位的操作,比如对a的第三位清0,第四位置1.本来应该会的,一犯晕写反了,以后注意!

#define BIT3 (1<<3)

#define BIT4 (1<<4)

a &= ~BIT3; a |= BIT4;

3.考到volatile含义并举例:理解出错,举了很具体的例子,连程序都搬上去了,有些理解不深的没举出来……

volatile表示这个变量会被意想不到的改变,每次用他的时候都会小心的重新读取一遍,不适用寄存器保存的副本。

volatile表示直接存取原始地址

例:

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

在多线程运行的时候共享变量也要时时更新

一个中断服务子程序中访问到的的非自动变量(不太清楚,正在查找资料ing……)

4.要求设置一绝对地址为0x67a9 的整型变量的值为0xaa66

当时我的写法:#define AA *(volatile unsigned long *)0xaa66

AA = 0x67a9;

答案:

int *ptr = (int *)0xaa66;

*ptr = 0x67a9;

我感觉自己写的应该不算错吧(自我感觉,还请达人指正),我写的适合裸机下用,当做寄存器用,而答案就是适合在操作系统下的写法。

1. linux内核里面,内存申请有哪几个函数,各自的区别?

2. IRQ和FIQ有什么区别,在CPU里面是是怎么做的?

3.

int *a;

char *b;

a 和 b本身是什么类型?

a、b里面本身存放的只是一个地址,难道是这两个地址有不同么?

4. 中断的上半部分和下半部分的问题:

讲下分成上半部分和下半部分的原因,为何要分?讲下如何实现?

5. 内核函数mmap的实现原理,机制?

6. 驱动里面为什么要有并发、互斥的控制?如何实现?讲个例子?

7. spinlock自旋锁是如何实现的?

8. 任务调度的机制?

【二、本人碰到】

1. 嵌入式linux和wince操作系统的特点和特性?

2. 嵌入式linux中tty设备驱动的体系结构?

3. 嵌入式设备,为加快启动速度,可以做哪些方面的优化?

4. USB设备的枚举过程?

5. PSRAM、SDRAM、DDR、DDR2的时序特性?

6. I2C触摸屏芯片与CPU的数据传输流程?画出相关图例?(这题目记得不是太清楚了,大概是考查I2C设备驱动的数据传输过程)

相关文档
最新文档