嵌入式驱动工程师面试题集锦

转载 2012年03月27日 22:40:52

1.什么是GPIO?

general purpose input/output

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

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

追加:

GPIO,英文全称为General-Purpose IO ports,也就是通用IO口。在嵌入式系统中常常有数量众多,但是结构却比较简单的外部设备/电路,对这些设备/电路有的需要CPU为之提供控制手段,有的则需要被CPU用作输入信号。而且,许多这样的设备/电路只要求一位,即只要有开/关两种状态就够了,比如灯亮与灭。对这些设备/电路的控制,使用传统的串行口或并行口都不合适。所以在微控制器芯片上一般都会提供一个“通用可编程IO接口”,即GPIO。接口至少有两个寄存器,即“通用IO控制寄存器”与“通用IO数据寄存器”。数据寄存器的各位都直接引到芯片外部,而对这种寄存器中每一位的作用,即每一位的信号流通方向,则可以通过控制寄存器中对应位独立的加以设置。这样,有无GPIO接口也就成为微控制器区别于微处理器的一个特征。

在实际的MCU中,GPIO是有多种形式的。比如,有的数据寄存器可以按照位寻址,有些却不能按照位寻址,这在编程时就要区分了。比如传统的8051系列,就区分成可位寻址和不可位寻址两种寄存器。另外,为了使用的方便,很多mcu把glue logic等集成到芯片内部,增强了系统的稳定性能,比如GPIO接口除去两个标准寄存器必须具备外,还提供上拉寄存器,可以设置IO的输出模式是高阻,还是带上拉的电平输出,或者不带上拉的电平输出。这在电路设计中,外围电路就可以简化不少。

明白了这个道理,不同的MCU,提供的GPIO口的数目不同,可选择的glue logic也不同。所以,在了解共性的基础上去了解个性。

另外需要注意的是,对于不同的计算机体系结构,设备可能是端口映射,也可能是内存映射的。如果系统结构支持独立的IO地址空间,并且是端口映射,就必须使用汇编语言完成实际对设备的控制,因为C语言并没有提供真正的“端口”的概念。如果是内存映射,那就方便的多了。举个例子,比如像寄存器A(地址假定为0x48000000)写入数据0x01,那么就可以这样设置了。

PS:胶合逻辑glue logic

gule logic的中文含意是“胶连逻辑”、“粘连逻辑”、“胶合逻辑”,它是连接复杂逻辑电路的简单逻辑电路的统称。例如,一个ASIC芯片可能包含许多诸如微处理器、存储器功能块或者通信功能块之类的功能单元,这些功能单元之间通过较少的粘合逻辑连接起来。在印制板(PCB)层,粘合逻辑可以使用具有较少逻辑门的“粘合芯片”实现,例如PAL、GAL、CPLD等。(早期的FPGA由于规模比较小,所以就主要用来连接功能复杂的大逻辑块)

glueless interface(无粘接接口),不粘于某一特类个体(RAM 或 ROM 或 flash)。这芯片的接口规格一般有超过一种业界规格,使其接口并不局限于一种制式。

在硬件设计选型上,选择no glue logic or glueless logic的IC,可以使硬件设计简单

2.触摸屏的硬件原理?

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

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

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

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


追加:

http://www.51touch.com/Article/Maintain/Technology/175945932.htm

http://www.cublog.cn/u2/78837/showart_1186312.html

3.在LinuxC中,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);
     }


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

为了逼自己每天学些英语,找了本简单的书,每天翻译点,放到博客里





嵌入式工程师经典面试题

http://bbs.elecfans.com/jishu_528921_1_1.html 上个星期,去深圳一家搞ARM开发的公司面试,HR叫我做了一份卷子,里面都是C编程,心中暗喜,因为这些题基本...
  • Stephen_yu
  • Stephen_yu
  • 2016年05月18日 14:47
  • 3384

华为--嵌入式软件工程师面试题汇总

(1)什么是预编译,何时需要预编译: 答案: 1、总是使用不经常改动的大型代码体。 2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一...
  • renjiaer
  • renjiaer
  • 2016年05月20日 17:11
  • 6693

嵌入式软件开发——嵌入式软件工程师面试题

1、int a[10]={1,2,3,4,5,6,7,8,9,0};    int *p=&a[1];    则p[6]等于8 2、整数数组清零:bzero(),memset()。 3、sie...
  • Cowena
  • Cowena
  • 2015年07月31日 10:10
  • 4857

嵌入式驱动工程师面试题集锦

1.什么是GPIO? general purpose input/output   GPIO是相对于芯片本身而言的,如某个管脚是芯片的GPIO脚,则该脚可作为输入或输出高或低电平使用,...
  • shx516857593
  • shx516857593
  • 2014年02月28日 09:58
  • 1301

学习!嵌入式底层驱动工程师学习方法

作者:李Brooks 链接:https://www.zhihu.com/question/22252234/answer/75026117 来源:知乎 著作权归作者所有。商业转载请联系作者获得授...
  • shenhuan1104
  • shenhuan1104
  • 2016年07月06日 13:29
  • 3463

嵌入式软件工程师经典面试题

1、int a[10]={1,2,3,4,5,6,7,8,9,0};    int *p=&a[1];    则p[6]等于8 2、整数数组清零:bzero(),memset()。 3、sie...
  • daaikuaichuan
  • daaikuaichuan
  • 2017年05月02日 18:08
  • 3605

嵌入式软件工程师/linux c程序员 面试经验自我总结

【申明:本文仅限于自我归纳总结和相互交流,有纰漏还望各位指出。 联系邮箱:Mr_chenping@163.com】 最近也没有时间写博客,原因简单,忙着找工作,一天面试2-3家,早出晚归一天累的死去...
  • mr_chenping
  • mr_chenping
  • 2013年03月29日 12:30
  • 27994

嵌入式软件工程师经典笔试题

> 预处理器(Preprocessor)  1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)  #define SECONDS_PER_YEAR (60 * ...
  • xiaoshengyige
  • xiaoshengyige
  • 2013年09月22日 14:17
  • 37079

linux驱动面试题整理

资料来自网上,简单整理,答案后续总结 1、字符型驱动设备你是怎么创建设备文件的,就是/dev/下面的设备文件,供上层应用程序打开使用的文件? 答:mknod命令结合设备的主设备号和次设备号,可创建一个...
  • lhhero701
  • lhhero701
  • 2016年04月17日 11:04
  • 10212

嵌入式软件工程师笔面试的问题和解析(一)

前沿:   这篇文章主要针对毕业不久需要找嵌入式工作的人群,如果你是大牛,麻烦你路过,我就不敢在这班门弄斧,文章主要   对面试和笔试中遇到的一些问题做了一些分析,有些只代表个人见解。 1、sizeo...
  • u012478275
  • u012478275
  • 2016年05月31日 17:09
  • 2539
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:嵌入式驱动工程师面试题集锦
举报原因:
原因补充:

(最多只允许输入30个字)