美光面经

笔试有写程序的,也有给一段程序让你写运行结果的题目(这个题目是保密的)

0有写程序和给一段程序写运行结果的C语言基础题(可能不止这一道)

eg.1

for (i=0; i<=10; i++){

    count=i++;

    Printf(“%d”, count);

}

eg.2

int a=5,b=7,c=0;

c=(a++)+(++b);

Printf(“a=%d, b=%d, c=%d”, a, b, c);

求运行结果。类似这种基础题做的时候要仔细点哦

1、SRAMDRAMFlash的区别,NOR NAND Flash的区别,简述nand

RAM有两大类,一种称为静态RAM(Static RAM/SRAM),SRAM速度非常快,是目前读写最快的存储设备了,但是它也非常昂贵,所以只在要求很苛刻的地方使用,譬如CPU的一级缓冲,二级缓冲。另一种称为动态RAM(Dynamic RAM/DRAM),DRAM保留数据的时间很短,速度也比SRAM慢,不过它还是比任何的ROM都要快,但从价格上来说DRAM相比SRAM要便宜很多,计算机内存就是DRAM的。
DRAM分为很多种,常见的主要有FPRAM/FastPage、EDORAM、SDRAM、DDR RAM、RDRAM、SGRAM以及WRAM等,这里介绍其中的一种DDR RAM。
DDR RAM(Date-Rate RAM)也称作DDR SDRAM,这种改进型的RAM和SDRAM是基本一样的,不同之处在于它可以在一个时钟读写两次数据,这样就使得数据传输速度加倍了。这是目前电脑中用得最多的内存,而且它有着成本优势,事实上击败了Intel的另外一种内存标准-Rambus DRAM。在很多高端的显卡上,也配备了高速DDR RAM来提高带宽,这可以大幅度提高3D加速卡的像素渲染能力。
FLASH存储器又称闪存,它结合了ROM和RAM的长处,不仅具备电子可擦除可编程(EEPROM)的性能,还不会断电丢失数据同时可以快速读取数据(NVRAM的优势),U盘和MP3里用的就是这种存储器。在过去的20年里,嵌入式系统一直使用ROM(EPROM)作为它们的存储设备,然而近年来Flash全面代替了ROM(EPROM)在嵌入式系统中的地位,用作存储Bootloader以及操作系统或者程序代码或者直接当硬盘使用(U盘)。

NAND Flash和NOR Flash的比较

NOR和NAND是现在市场上两种主要的非易失闪存技术。Intel于1988年首先开发出NOR flash技术,彻底改变了原先由EPROM和EEPROM一统天下的局面。紧接着,1989年,东芝公司发表了NAND flash结构,强调降低每比特的成本,更高的性能,并且象磁盘一样可以通过接口轻松升级。但是经过了十多年之后,仍然有相当多的硬件工程师分不清NOR和NAND闪存。

  相"flash存储器"经常可以与相"NOR存储器"互换使用。许多业内人士也搞不清楚NAND闪存技术相对于NOR技术的优越之处,因为大多数情况下闪存只是用来存储少量的代码,这时NOR闪存更适合一些。而NAND则是高数据存储密度的理想解决方案。

NOR是现在市场上主要的非易失闪存技术。NOR一般只用来存储少量的代码;NOR主要应用在代码存储介质中。NOR的特点是应用简单、无需专门的接口电路、传输效率高,它是属于芯片内执行(XIP, eXecute In Place),这样应用程序可以直接在(NOR型)flash闪存内运行,不必再把代码读到系统RAM中。在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。NOR flash带有SRAM接口,有足够的地址引脚来寻址,可以很容易地存取其内部的每一个字节。NOR flash占据了容量为1~16MB闪存市场的大部分。

  NAND结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。应用NAND的困难在于flash的管理和需要特殊的系统接口。

2、为什么要有cache

其中最主要是解决CPU和内存之间的速度匹配问题。
内存太慢,不能及时提供数据给CPU用于计算(CPU现在几个GHZ的频率,速度比内存块很多),会大大降低CPU的效率,因此在CPU内核中集成了高速度的静态RAM,即SRAM构成的CACHE,提前用算法预读取内存中的数据到CACHE中去,CPU用到的大部分数据(96%以上)都直接在CACHE中得到,不用去读内存了,提高速度。
缓存在其它地方也有用到,比如硬盘,但提到高速缓存一般是只的CPU内部的CACHE。

3、IRQFRQ的区别

IRQ(Interrupt Request):指中断模式。
FIQ(Fast Interrupt Request):指快速中断模式。
IRQ与FIQ是ARM处理器的两种不同编程模式(ARM有7种处理模式)。
1)对FIQ你必须进快处理中断请求,并离开这个模式。
2)IRQ可以被FIQ所中断,但FIQ不能被IRQ所中断,在处理FIQ时必须要关闭中断。
3)FIQ的优先级比IRQ高。
4)FIQ模式下,比IRQ模式多了几个独立的寄存器。
不要小看这几个寄存器,ARM在编译的时候,如果你FIQ中断处理程序足够用这几个独立的寄存器来运作,它就不会进行通用寄存器的压栈,这样也省了一些时间。
5)FIQ的中断向量地址在0x0000001C,而IRQ的在0x00000018。(也有的在FFFF001C以及FFFF0018)
写过完整汇编系统的都比较明白这点的差别,18只能放一条指令,为了不与1C处的FIQ冲突,这个地方只能跳转,而FIQ不一样,1C以后没有任何中断向量表了,这样可以直接在1C处放FIQ的中断处理程序,由于跳转的范围限制,至少少了一条跳转指令。
6)IRQ和FIQ的响应延迟有区别
IRQ的响应并不及时,从Verilog仿真来看,IRQ会延迟几个指令周期才跳转到中断向量处,看起来像是在等预取的指令执行完。FIQ的响应不清楚,也许比IRQ快。

4、ARM的几种工作模式

1)用户模式(usr):正常的程序执行状态
2)快速中断模式(fiq): 处理快速中断,支持高速数据传送或通道处理
3)中断模式(irq): 处理普通中断
4)管理模式(svc):操作系统使用的保护模式
5)系统模式(sys):运行具有特权的操作系统任务
6)数据访问终止模式(abt):数据或指令预取终止时进入该模式
7)未定义指令终止模式(und):未定义的指令执行时进入该模式

美光面经_第1张图片
 

arm寄存器 r13 r14 r15的含义

1)未分组寄存器R0~R7
在所有运行模式下,未分组寄存器都指向同一个物理寄存器,它们未被系统用作特殊的用途.因此在中断或异常处理进行运行模式转换时,由于不同的处理器运行模式均使用相同的物理寄存器,所以可能造成寄存器中数据的破坏.
2)分组寄存器R8~R14
对于分组寄存器,它们每一次所访问的物理寄存器都与当前处理器的运行模式有关.对于R8~R12来说,每个寄存器对应2个不同的物理寄存器,当使用FIQ(快速中断模式)时,访问寄存器R8_fiq~R12_fiq;当使用除FIQ模式以外的其他模式时,访问寄存器R8_usr~R12_usr.
对于R13,R14来说,每个寄存器对应6个不同的物理寄存器,其中一个是用户模式与系统模式共用,另外5个物理寄存器对应其他5种不同的运行模式,并采用以下记号来区分不同的物理寄存器:
R13_
R14_
其中mode可为:usr,fiq,irq,svc,abt,und.

寄存器R13在ARM指令中常用作堆栈指针SP,但这只是一种习惯用法,用户也可使用其他的寄存器作为堆栈指针,而在Thumb指令集中,某些指令强制性的要求使用R13作为堆栈指针.

由于处理器的每种运行模式均有自己独立的物理寄存器R13,在用户应用程序的初始化部分,一般都要初始化每种模式下的R13,使其指向该运行模式的栈空间。这样,当程序的运行进入异常模式时,可以将需要保护的寄存器放入R13所指向的堆栈,而当程序从异常模式返回时,则从对应的堆栈中恢复,采用这种方式可以保证异常发生后程序的正常执行
R14称为子程序链接寄存器LR(Link Register),当执行子程序调用指令(BL)时,R14可得到R15(程序计数器PC)的备份.

在每一种运行模式下,都可用R14保存子程序的返回地址,当用BL或BLX指令调用子程序时,将PC的当前值复制给R14,执行完子程序后,又将R14的值复制回PC,即可完成子程序的调用返回。以上的描述可用指令完成。
执行以下任意一条指令:

MOV PC, LR
BX LR
在子程序入口处使用以下指令将R14存入堆栈:
STMFD SP!,{,LR}
对应的,使用以下指令可以完成子程序返回:
LDMFD SP!,{,PC}
R14也可作为通用寄存器。
3)程序计数器PC(R15)
寄存器R15用作程序计数器(PC),在ARM状态下,位[1:0]为0,位[31:2]用于保存PC,在Thumb状态下,位[0]为0,位[31:1]用于保存PC.
由于ARM体系结构采用了多级流水线技术,对于ARM指令集而言,PC总是指向当前指令的下两条指令的地址,即PC的值为当前指令的地址值加8个字节程序状态寄存器

4)寄存器R16
寄存器R16用作CPSR(CurrentProgram Status Register,当前程序状态寄存器),CPSR可在任何运行模式下被访问,它包括条件标志位、中断禁止位、当前处理器模式标志位,以及其他一些相关的控制和状态位。
每一种运行模式下又都有一个专用的物理状态寄存器,称为SPSR(Saved Program Status Register,备份的程序状态寄存器),当异常发生时,SPSR用于保存CPSR的当前值,从异常退出时则可由SPSR来恢复CPSR。
由于用户模式和系统模式不属于异常模式,它们没有SPSR,当在这两种模式下访问SPSR,结果是未知的

5、emmc 有哪些pin,分别作什么用

eMMC协议相关的问题我都不会的

6单向链表的删除创建?单向链表和双向链表

环形单链表,删除指定data的节点

7、链表倒置 程序,code:单链表反转

8、递归函数,斐波那契数列,缺点

栈和队列的特点

9、Code:循环链表的删除某个给定data

给定两个单链表pApBpA中间没有重复的数字,pB也没有重复的数字,要求删除pApB中所有重复数字的结点

两个双向链表pApB,每个链表无重复data,相同data节点的删除。

pB中每个节点data遍历pA即可,删除即终止。

采用哈希表法,先遍历A,将哈希表中对应位置置为该节点指针,然后再遍历B,当哈希表中对应位置已经存在元素时,表明这是两链表中data值相同的节点,则从A,B中删除。这里直接利用map容器作为哈希表。

用一个map,将A中所有的节点值信息加进去,key为 node->data,value为0,然后,遍历B,将B中data值在map中的节点删除,并将map中对应key的value置为1.然后再遍历A,将value为1的key对应的节点删除。时间复杂度为O(2m+n),空间复杂度为O(m).
 

10、C基础:int char long区别;unsigned signed 区别

11、变量声明 定义整理 指向整型的指针 数组指针 指针数组 指向一个参数是整型返回值还是整型的海曙

12、定义一个函数指针的数组

int (*parr1[10])();

13、a[3][4][5],p=a, p[5], p[21],分别对应a[?][?][?]

14、mutex semaphore Event三者的作用和区别

15独占式和协作式os的区别

16ARM汇编写一个乘法指令

17、12个球,外观一样,其中有一个球重量不同,要求用最多三次称重,找出不一样的那个球,并且指出是更轻还是更重

有一个候选人面试的时候被问到这样一个开放性问题:设计一个求地铁站大站停站间隔最优解的问题

怎么确认冰箱里灯关了

18看过的编程方面的书

19、结构体当中,给位域直接赋值会有什么side effect?

20、翻译“垃圾回收”FTL100-200

21、a*8148用汇编优化计算

22、fat16,fat32,ntfs区别

23、sata8b/10b 编码的好处和坏处

24、sata 下面status的意义 5000 5104 5140 4000

25、还有几个scsi的问题 我不会 也不记得

26、英译中一段技术文章

你可能感兴趣的:(美光面经)