就业模拟测试题LINUX驱动系统底层工程师职位.docx

上传人:b****5 文档编号:3052604 上传时间:2022-11-17 格式:DOCX 页数:10 大小:193.78KB
下载 相关 举报
就业模拟测试题LINUX驱动系统底层工程师职位.docx_第1页
第1页 / 共10页
就业模拟测试题LINUX驱动系统底层工程师职位.docx_第2页
第2页 / 共10页
就业模拟测试题LINUX驱动系统底层工程师职位.docx_第3页
第3页 / 共10页
就业模拟测试题LINUX驱动系统底层工程师职位.docx_第4页
第4页 / 共10页
就业模拟测试题LINUX驱动系统底层工程师职位.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

就业模拟测试题LINUX驱动系统底层工程师职位.docx

《就业模拟测试题LINUX驱动系统底层工程师职位.docx》由会员分享,可在线阅读,更多相关《就业模拟测试题LINUX驱动系统底层工程师职位.docx(10页珍藏版)》请在冰豆网上搜索。

就业模拟测试题LINUX驱动系统底层工程师职位.docx

就业模拟测试题LINUX驱动系统底层工程师职位

就业模拟测试题-LINUX驱动、系统底层工程师职位(点击此处—》更多惊喜)

本试卷从考试酷examcoo网站导出,文件格式为mht,请用WORD/WPS打开,并另存为doc/docx格式后再使用

试卷编号:

143921

试卷录入者:

yisonghua(华清远见)

试卷总分:

80

出卷时间:

2012-09-1314:

53

答题时间:

150分钟

姓名:

         学号:

         班级:

         

 6

说明:

以下个体中的分数是说明题目的重要性而言的,并不是具体题目的考试分数,此试卷中的题目主要是出现在笔试之后的面试中,大部分题目要直接能说的出来,多去整理,完善自己的表达

1.你平常是怎么用C写嵌入式系统的死循环的?

[3分]

参考答案:

while

(1)

{

//...

}

或者

for(;;)

{

//...

{

2.写一条命令,实现在dir以及其子目录下找出所有包含“helloworld”字符串的文件[2分]

参考答案:

grep-r"helloworld"./dir

或者grep-rHn"helloworld"./

3.下面的两段程序中,循环能否执行?

为什么?

A:

unsignedshorti;

unsignedshortindex=0;

for(i=0;i

  printf(“a\n”);

}

  不能,当执行到语句i

立即退出循环。

 

B:

unsignedshorti;

unsignedlongindex=0;

for(i=0;i

    printf(“b\n”);

  能,index是unsignedlong型,当执行到语句i

立即进入循环。

  [每空2分]

解析:

隐式类型转换规则:

C语言自动转换不同类型的行为称之为隐式类型转换,转换的基本原则是:

低精度类型向高精度类型转换,具体是:

int->unsignedint->long->unsignedlong->longlong->unsignedlonglong->float->double->longdouble

注意,上面的顺序并不一定适用于你的机器,比如当int和long具有相同字长时,unsignedint的精度就会比long的精度高(事实上大多数针对32机的编译器都是如此)。

另外需要注意的一点是并没有将char和short型写入上式,原因是他们可以被提升到int也可能被提升到unsignedint。

提升数据的精度通常是一个平滑无损害的过程,但是降低数据的精度可能导致真正的问题。

原因很简单:

一个较低精度的类型可能不够大,不能存放一个具有更高精度的完整的数据。

一个1字节的char变量可以存放整数101但不能存放整数12345。

当把浮点类型数据转换为整数类型时,他们被趋零截尾或舍入。

强制类型转换:

通常我们应该避免自动类型转换,当我们需要手动指定一个准确的数据类型时,我们可以用强制类型转换机制来达到我们的目的,使用方法很简单,在需要强制转换类型的变量或常量前面加上(type),例如(double)i;即把变量i强制转换成double型。

4.一个计划跑LINUX系统的ARM系统把bootloader烧录进去后,上电后串口上没有任何输出,硬件和软件各应该去检查什么?

 

 提示:

1.跑LINUX的系统一般都需要外扩DRAM,一般的系统也经常有NOR或NANDFLASH 

         2.bootloader一般是由汇编和C编写的裸奔程序[5分]

参考答案:

单片机系统:

硬件上:

1.确认电源电压是否正常。

用电压表测量接地引脚跟电源引脚之间的电压,看是否是电源电压,例如常用的5V。

2.检查复位引脚电压是否正常。

分别测量按下复位按钮和放开复位按钮的电压值,看是否正确。

3.检查晶振是否起振了,一般用示波器来看晶振引脚的波形,另一个办法是测量复位状态下的IO口电平,按住复位键不放,然后测量IO口(没接外部上拉的IO口除外)的电压,看是否是高电平,如果不是高电平,则多半是因为晶振没有起振。

4.检查基本的外扩设备(这里主要是DRAM,特别是DDR/DDR2/DDR3)的pcblayout的走线是否符合要求

软件上:

  如果软件代码中:

  1.检查CPU和DRAM是否正确初始化(CPU的初始化包括一些典型步骤如:

关闭看门狗,关键FIQ,IRQ中断,关闭MMU和CACHE,调整CPU的频率)

  2.检查堆栈指针是否正确设置了

  2.若如NANDFLASH做系统启动部分,则需注意一般需要的从NANDFLASH中拷贝代码到DRAM中的步骤是否能正常完成

5.列举最少3种你所知道的嵌入式的体系结构,并请说明什么是ARM体系结构。

[7分]

参考答案:

嵌入式的体系结构包括ARM,MIPS,POWERPC,X86,AVR32,SH等

  这个没有非常标准的答案,但由经常面试的时候会问到,关于什么是ARM体系结构主要请参考讲义的ARM相关章节去总结,下面是我的总结,仅供参考:

   什么是ARM体系结构?

   答:

首先,ARM体系结构是ARM公司设计,并授权其合作伙伴生产的占嵌入式市场份额最大的一种RISC(精简指令集)的CPU,它具有高性能、低功耗、低成本的特点。

     ARM体系结构从工作模式、工作状态,指令集几个方面简述以下ARM:

      ARM体系支持7种工作模式,包括系统(Sys)、未定义指令(und)、数据存取异常(abt)、 管理(SVC)、中断(IRQ)、快速中断(FIQ)、用户模式(usr).其中,除了用户模式以外的其它模式,我们称之为特权模式.它们之间的区别在于有些操作只能在特权模式下才被允许,如直接改变模式和中断使能等. 除了用户模式和系统模式以外的其它5种模式,我们又称之为异常模式。

当特定的异常出现的时候,程序就会进入到相应的异常模式中。

   备注:

在LINUX系统中, Linux的应用程序工作在usr模式,而内核在正常情况下工作在svc模式,当中断或异常时工作在异常模式

    ARM体系结构中CPU有2种工作状态,thumb(指令为16位)和ARM状态(指令为32位),相对寄存器不多,总共37个,它包括通用寄存器r0~r12(FIQ有自己的r8 ~r12),栈指针寄存器SP(r13),链接寄存器lr(r14),PC指针寄存器PC(r15),程序状态寄存器CPSR和保存程序状态寄存器SPSR,在上面提到几种异常中,用户(usr)和系统模式(sys)使用相同寄存器, 而其他异常模式有自己独立的SP,LR,SPSR寄存器。

 

     当异常产生时,硬件上(ARMcore)会完成以下动作:

    拷贝CPSR到SPSR_

    设置适当的CPSR位:

    改变处理器状态进入ARM态

    改变处理器模式进入相应的异常模式

    设置中断禁止位禁止相应中断(如果需要)‏}保存返回地址到LR_

     设置PC为相应的异常向量

    返回时,软件的异常处理程序需要:

   从SPSR_恢复CPSR

    从LR_恢复PC 

  Note:

这些操作只能在ARM态执行.

 ARM处理器是基于精简指令集计算机(RISC)原理设计的,发展过程中商用的指令集经过了v4,v5,v6,v7(cortex系列) 4个系列,ARM内核的通用处理器型号比较常见的有arm7tdmi(v4),arm920/arm920t/arm926ejs,arm10,arm11,cortex-a8。

 为了提高指令执行效率,大部分的ARM指令为单周期指令,并从软件设计角度看,ARM处理器的指令流水线采用3级流水线模型,并提供了LDM/STM类似的批量数据操作指令。

 为了提高CPU访问外部设备数据效率,ARM处理器除部分ARM7采用冯.洛伊曼结构外,其他得都采用

 哈佛架构,从而实现了对指令和数据存储器的同时访问。

并且,ARMCPU提供了现代操作系统所需的虚拟内存管理机制(MMU)和指令、数据cache,并提供了协议处理器(cp15)来协助管理CPU的MMU和CACHE。

  

扩展概念:

以上叙述里面提及的概念也要稍微去总结一下,比如:

   1.什么是RISC?

 

  2.ARM中断在ARM9,CORTEX-A8是怎么处理的?

LINUX中为什么需要把中断分为上半部分,下半部分

  3.MMU和CACHE的一些基本原理和知识 

6.请简述下面这段代码的功能

movr12,#0x0      

ldrr13,=0x30100000

movr14,#4096

loop:

 ldmia     r12!

{r0-r11}

 stmia    r13!

{r0-r11} 

 cmp     r12,r14

 blo         loop  [2分]

参考答案:

借助r0~r11,将内存地址0x0开始的4KB数据拷贝到0x30100000

7.嵌入式中常用的文件系统有哪些?

说出它们的主要特点和应用场合?

[5分]

参考答案:

嵌入式相关的文件系统:

  嵌入式文件系统包括只读和可读写文件系统,一般情况下,只读文件系统启动速度快于可读写的文件系统

 嵌入式相关的文件系统包括以下几种:

 只读文件系统 

  cramfs:

 压缩的只读文件系统  

        特点:

    启动快,文件最大支持256MB,单个文件最大16MB 

   squashfs:

只读文件系统 

       特点:

 压缩比最大,启动比cramfs慢 

        案例:

路由器,ubuntu的发行光盘          可结合LZMA压缩算法 

可读写的文件系统:

  

     JFFS2:

 支持NOR和NANDFLASH(对NAND的支持天生不足) 

          特点:

 

                 1.可读写

                 2.挂载慢(特别是在小文件很多的文件系统中,就更慢)  

                 3.当数据占到JFFS2分区的75~80%左右时,性能会急剧下降

      YAFFS2:

只支持NANDFLASH  

             特点:

1.可读写

                    2.挂载快(特别是在小文件很多的文件系统中,优势更明显)                 

                   

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 判决书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1