驱动工程师笔试题目

  以下是嵌入式驱动开发工程师面试的几道经典笔试题:

  驱动工程师笔试题目

  1.什么是GPIO?

  general purpose input/output

  GPIO是相对于芯片本身而言的,如某个管脚是芯片的GPIO脚,则该脚可作为输入或输出高或低电平使用,当然某个脚具有复用的功能,即可做GPIO也可做其他用途。

  也就是说你可以把这些引脚拿来用作任何一般用途的输入输出,例如用一根引脚连到led的一极来控制它的亮灭,也可以用一根(一些)引脚连到一个传感器上以获得该传感器的状态,这给cpu提供了一个方便的控制周边设备的途经。如果没有足够多的gpio管脚,在控制一些外围设备时就会力有不逮,这时可采取的方案是使用CPLD来帮助管理。

  2.触摸屏的硬件原理?

  触摸屏的主要三大种类是:电阻技术触摸屏、 表面声波技术触摸屏、 电容技术触摸屏。

  电阻触摸屏的主要部分是一块与显示器表面非常配合的电阻薄膜屏, 这是一种多层的复合薄膜,它以一层玻璃或硬塑料平板作为基层,表面图有一层透明氧化金属 (ITO氧化铟,透明的导电电阻) 导电层,上面在盖有一层外表面硬化处理、光滑防擦的塑料层 、它的内表面也涂有一层ITO涂层 、在他们之间有许多细小的(小于1/1000英寸)的透明隔离点把两层导电层隔开绝缘 。当手指触摸屏幕时,两层导电层在触摸点位置就有了接触,控制器侦测到这一接触并计算出(X,Y )的位置,再根据模拟鼠标的方式运作。这就是电阻技术触摸屏的最基本的原理。

  表面声波技术是利用声波在物体的表面进行传输,当有物体触摸到表面时,阻碍声波的传输,换能器侦测到这个变化,反映给计算机,进而进行鼠标的模拟。

  电容技术触摸屏利用人体的电流感应进行工作 。用户触摸屏幕时 ,由于人体电场,用户和触摸屏表面形成以一个耦合电容, 对于高频电流来说,电容是直接导体,于是手指从接触点吸走一个很小的电流

  3.在Linux C中,ls这个命令是怎么被执行的?

  使用fork创建一个进程或exec函数族覆盖原进程。

  4.在一个只有128M内存并且没有交换分区的机器上,说说下面两个程序的运行结果

  1,

  #define MEMSIZE 1024*1024

  int count = 0;

  void *p = NULL;

  while(1) {

  p = (void *)malloc(MEMSIZE);

  if (!p) break;

  printf("Current allocation %d MB\n", ++count);

  }

  2,

  while(1) {

  p = (void *)malloc(MEMSIZE);

  if (!p) break;

  memset(p, 1, MEMSIZE);

  printf("Current allocation %d MB\n", ++count);

  }

  第一道程序分配内存但没有填充,编译器可能会把内存分配优化掉,程序死循环;第二道,程序分配内存并进行填充,系统会一直分配内存,直到内存不足,退出循环。

  5.请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句

  搞的比较复杂。主要思想就是a-b的值的最高位是否为0;但是又得考虑整数溢出的问题,所以很复杂。不知道哪位大侠有更好的办法,指点指点。

  #include

  #define ZHENG(i) ((i >> 31) == 0)

  #define FU(i) ((i >> 31) != 0)

  #define COMPARE(a,b) ((ZHENG(a) && FU(b)) || (((ZHENG(a) && ZHENG(b)) || (FU(a) && FU(b))) && ((((a) - (b)) >> 31) == 0)))

  void main()

  {

  int a = 0x80000001;

  int b = 0x6FFFFFFF;

  if(COMPARE(a,b))

  {

  printf("a >= b\n");

  }

  else

  {

  printf("a < b\n");

  }

  }

本文已影响6827
上一篇:营销笔试题目 下一篇:嵌入式软件笔试题目

相关文章推荐

|||||