查看: 2358|回复: 0

考一考!嵌入式ARM面试题三道

[复制链接]
发表于 2017-9-24 09:34:51 | 显示全部楼层 |阅读模式
题一:
ARM处理器MMU是什么?主要实现什么功能?
  思考过后,再到下方寻找答案

题二:
下面的代码输出是什么,为什么?
voidfoo(void)
{unsigned int a = 6;
intb = -20;
(a+b> 6) puts("> 6") : puts("<= 6");
}

题三:
尽管不像非嵌入式计算机那么常见,嵌入式系统还是有从堆(heap)中动态分配内存的过程的。那么嵌入式系统中,动态分配内存可能发生的问题是什么?
  思考过后,再到下方寻找答案

题一答案:
MMU是Memory Management Unit的缩写,即内存管理单元。
MMU主要主要实现功能是:
1、     虚拟存储空间到物理存储空间的映射。在ARM中采用了页式虚拟存储管理,通过两级页表实现虚拟地址到物理地址的映射。
2、     存储器访问权限的控制。
3、     设置虚拟存储空间的缓冲的特性,主要包括Cache、write buffer的配置。

题二答案:
这个问题测试你是否懂得C语言中的整数自动转换原则,我发现有些开发者懂得极少这些东西。不管如何,这无符号整型问题的答案是输出是“>6”。原因是当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。因此-20变成了一个非常大的正整数,所以该表达式计算出的结果大于6。这一点对于应当频繁用到无符号数据类型的嵌入式系统来说是丰常重要的。如果你答错了这个问题,你也就到了得不到这份工作的边缘。

题三答案:
这里,我期望应试者能提到内存碎片,碎片收集的问题,变量的持行时间等等。这个主题已经在ESP杂志中被广泛地讨论过了(主要是P.J.Plauger,他的解释远远超过我这里能提到的任何解释),所有回过头看一下这些杂志吧!让应试者进入一种虚假的安全感觉后,我拿出这么一个小节目:下面的代码片段的输出是什么,为什么?
char*ptr;
if((ptr = (char *)malloc(0)) == NULL)
puts("Gota null pointer");
else
puts("Gota valid pointer");
这是一个有趣的问题。最近在我的一个同事不经意把0值传给了函数malloc,得到了一个合法的指针之后,我才想到这个问题。这就是上面的代码,该代码的输出是“Gota validpointer”。我用这个来开始讨论这样的一问题,看看被面试者是否想到库例程这样做是正确。得到正确的答案固然重要,但解决问题的方法和你做决定的基本原理更重要些。


以下课程可免费试听C语言、电子PCBSTM32LinuxFPGA、JAVA、安卓等。
想学习的你和我联系预约就可以免费听课了。
宋工企鹅号:3524-6590-88   Tel/WX:173--1795--1908



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表