一些嵌入式面试题目的集锦
(1)VxWorks、uc/OS、Palm嵌入式系统操作系统的区别?
我的课题是做vxworks,说了些自己比较熟悉的方面,接口函数丰富,调试工具效率高好用云云,其他的操作系统了解不多,如实交待了。
(2)做嵌入式软件开发和普通桌面软件开发有什么区别?
我答曰,两者侧重点不同,嵌入式系统软件开发侧重在多任务的划分、多任务处理。实施性要求严格。不用考虑界面等因素。
(3)c语言问题,union和struct 的区别?
共享一个存储单元和按定义分配存储单元。
(4)sizeof(一大堆变量),如果用这个函数分配内存的大小一定与定义相同吗?
答曰:想不相同不清楚,但是肯定的是指回答不会小,因为使用sizeof分配内存不会错。
(5)解释什么是优先级反转。
答曰:多任务运行过程中,因为临界资源相互等待占用,导致高优先任务得不到满足,造成低优先级任务先执行的后果。
(6)我看了你的简历,硬件经验比较丰富,你是不是更适合做硬件?
我心,做硬件太累了,所以直接说做硬件的经验对我作嵌入式软件开发很有帮助,打下了基础云云。
C函数允许重入吗里还是比较想做软件
可重入函数主要用于多任务环境中,一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误;而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等,所以它如果被中断的话,可能会出现问题,这类函数是不能运行在多任务环境下的。可以进行递归调用,即可以间接或直接调用该函数本身的函数称为可重入函数
task 有几种状态
Linux内核中定义了以下几种状态: #define TASK_RUNNING 0
#define TASK_INTERRUPTIBLE 1
#define TASK_UNINTERRUPTIBLE 2
#define TASK_ZOMBIE 4
#define TASK_STOPPED 8
其中: TASK_RUNNING是就绪态,进程当前只等待CPU资源。 TASK_INTERRUPTIBLE和TASK_UNINTERRUPTIBLE都是阻塞态,进程当前正在等待除CPU外的其他系统资源;
前者可以被信号唤醒,后者不可以。 TASK_ZOMBIE是僵尸态,进程已经结束运行,但是进程控制块尚未注销。 TASK_STOPPED是挂起状态,主要用于调试目的。
进程接收到SIGSTOP信号后会进入该状态,在接收到SIGCONT后又会恢复运行。
通信方式: 管道,有名管道,信号量,消息队列,信号,共享内存,套接字
1.static变量和static 函数各有什么特点?
static变量:拥有固定内存地址
static函数:只能在本文件内部使用的函数
static变量:在程序运行期内一直有效,如果定义在函数外,则在编译单元内可见,如果在函数内,在在定义的block内可见;
static函数:在编译单元内可见;
3.描述一下嵌入式基于ROM的运行方式基于ram的运行方式有什么区别。
基于RAM的运行方式:需要把硬盘和其他介质的代码先加载到ram中,加载过程中
一般有重定位的操作;
基于ROM:没有上面的操作。
基于ROM:速度较基于RAM的慢,因为会有一个把变量,部分代码等从存储器(硬盘,flash)搬移到RAM的过程;可用RAM资源比基于RAM的多;
基于RAM:速度较基于ROM的快,可用RAM比基于ROM的少,因为所有的代码,数据都必须存放在RAM中。
7.嵌入式操作系统和通用操作系统有什么差别?
嵌入式:自己写操作系统;
通用操作系统:不用考虑操作系统
嵌入式操作系统:rom,ram比较小,cpu速度比较慢
嵌入式操作系统EOS(Embedded OperatingSystem)是一种用途广泛的系统软件,过去它主要应用于工业控制和国防系统领域。EOS 负责嵌人系统的全部软、硬件资源的分配、调度工作,控制协调并发活动;它必须体现其所在系统的特征,能够通过装卸某些模块来达到系统所要求的功能。目前, 已推出一些应用比较成功的EOS产品系列。随着Internet技术的发展、信息家电的普及应用及EOS的微型化和专业化,EOS开始从单一的弱功能向高 专业化的强功能方向发展。嵌人式操作系统在系统实时高效性、硬件的相关依赖性、软件固态化以及应用的专用性等方面具有较为突出的特点。EOS是相对于一般 操作系统而言的,它除具备了一般操作系统最基本的功能,如任务调度、同步机制、中断处理、文件功能等外,还有以下特点:
(1)可装卸性。开放性、可伸缩性的体系结构。
(2)强实时性。EOS实时性一般较强,可用于各种设备控制当中。
(3)统一的接口。提供各种设备驱动接日.
(4)操作方便、简单、提供友好的图形GUI,图形界面,追求易学易用.
(5)提供强大的网络功能,支持TCP门P协议及其它协议,提供TCP/UDP/IP/PPP协议支持及统一的MAC访问层接口,为各种移动计算设备预留接口.
(6)强稳定性,弱交互性。嵌入式系统一旦开始运行就不需要用户过多的干预,这就要负责系统管理的EOS臭有较强的稳定性。嵌入式操作系统的用户接日一般不提供操作命令,它通过系统调用命令向用户程序提供服务。
(7)固化代码。在嵌入系统中,嵌入式操作系统和应用软件被固化在嵌入式系统计算机的ROM中。辅助存储器在嵌入式系统中很少使用,因此,嵌入式操作系统的文件管理功能应该能够很容易地拆卸,而用各种内存文件系统.
(8)更好的硬件适应性,也就是良好的移植性.
国际上用于信息电器的嵌入式操作系统有40种左右。现在,市场上非常流行的EOS产品,包括3Corn公司下属子公司的Palm OS,全球占有份额达 50%,MicroS。fi公司的Wind。ws CE不过29%。在美国市场,Palm OS更以80%的占有率远超Windows CE。开放源代码 的Linux很适于做信息家电的开发.
比如:中科红旗软件技术有限公司开发的红旗嵌入式Linux和美商网虎公司开发的基于Xlinux的嵌人式操作系统“夸克"。“夸克”是目前全世界最小的Linux,它有两个很突出的特点,就是体积小和使用GCS编码。
常见的嵌入式系统有:Linux、uClinux、WinCE、PalmOS、Symbian、eCos、uCOS-II、VxWorks、pSOS、Nucleus、ThreadX 、Rtems 、QNX、INTEGRITY、OSE、C Executive
嵌入式系统是固化在硬件里面的系统,比如手机、路由器里面的系统。有些是可以管理的,有些不行,可以根据用户的使用用途进行定制系统的功能和程序。
常见的嵌入式系统
Linux、uClinux、WinCE、PalmOS、Symbian、eCos、uCOS-II、VxWorks、pSOS、Nucleus、ThreadX 、Rtems 、QNX、INTEGRITY、OSE、C Executive
什么是嵌入式操作系统?嵌入式操作系统是一种支持嵌入式系统应用的操作系统软件,它是嵌入式系统的重要组成部分。嵌入时操作系统具有通用操作系统的基本特点,能够有效管理复杂的系统资源,并且把硬件虚拟化。
从应用角度可分为通用型嵌入式操作系统和专用型嵌入式操作系统。常见的通用型嵌入式操作系统有Linux、VxWorks、Windows CE.net等。常用的专用型嵌入式操作系统有Smart Phone、Pocket PC、Symbian等。
按实时性可分为两类:
实时嵌入式操作系统主要面向控制、通信等领域。如WindRiver公司的VxWorks、ISI的pSOS、QNX系统软件公司的QNX、ATI的Nucleus等。
非实时嵌入式操作系统主要面向消费类电子产品。这类产品包括PDA、移动电话、机顶盒、电子书、WebPhone等。如微软面向手机应用的Smart Phone操作系统。
编一个简单的求n!的程序
int func (int n)
{
if(n <= 1)
return 1;
return n*func(n-1);
}//并没有溢出检查
那种排序方法最快? (华为面试题)
按平均时间将排序分为四类:
(1)平方阶(O(n2))排序
一般称为简单排序,例如直接插入、直接选择和冒泡排序;
稳定排序算法。冒泡排序的效率相比之下,是最低的。
(2)线性对数阶(O(nlgn))排序
如快速、堆和归并排序;
快速排序是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短;
(3)O(n1+£)阶排序
£是介于0和1之间的常数,即0<£<1,如希尔排序;
(4)线性阶(O(n))排序
如桶、箱和基数排序。
操作系统的功能。(新太硬件面题)
操作系统的任务主要是合理地调配系统的各种资源,为各种程序的运行提供环境,它可以看作是硬件和应用软件之间的一个媒介。其中对内存的管理是系统的最主要的职责
1、什么是进程(Process):
普通的解释就是,进程是程序的一次执行,
而什么是线程(Thread),线程可以理解为进程中的执行的一段程序片段。
在一个多任务环境中下面的概念可以帮助我们理解两者间的差别:
A、进程间是独立的,这表现在内存空间,上下文环境;线程运行在进程空间内。
B、一般来讲(不使用特殊技术)进程是无法突破进程边界存取其他进程内的存储空间;而线程由于处于进程空间内,所以同一进程所产生的线程共享同一内存空间。(图一)
同一进程中的两段代码不能够同时执行,除非引入线程。
C、线程是属于进程的,当进程退出时该进程所产生的线程都会被强制退出并清除。
D、线程占用的资源要少于进程所占用的资源。
E、进程和线程都可以有优先级。
F、在线程系统中进程也是一个线程。可以将进程理解为一个程序的第一个线程
关键字static的作用是什么?
在C语言中static有三个明显的作用:
1、在函数体内,被声明为static的变量,在函数被调用的过程中保持不变!
2、在一个模块内但在函数体外声明的static变量,可以被模块内的所有函数访问,但不能被模块外的函数访问,是一个本地的局部变量!
3、在模块内一个声明为static的函数可以被这一模块内的其他函数调用,但不能被模块外的其他函数访问!也就是说这个函数被限制在声明它的模块的本地范围内使用!