嵌入式笔试面试题目系列(五)

2021-05-28 10:17:40 浏览数 (1)

本系列将按照类别对题目进行分类整理,重要的地方标上星星,这样有利于大家打下坚实的基础。

第六章 单片机常见面试题

1、ROM与RAM

这一点我另一篇文章讲解过,这里放链接:

ROM与RAM的区别

2、 IO口工作方式(学过STM32的人应该很熟悉)

上拉输入、下拉输入、推挽输出、开漏输出。

3、请说明总线接口USRT、I2C、USB的异同点

(串/并、速度、全/半双工、总线拓扑等)

4、IIC协议时序图

必须会画出来,我面试被问到过,让我画,我画了个大概。(面试驱动岗必须会)

IIC协议有两根线,一根SCL时钟线,一根SDA数据线,如图可以看到开始信号和结束信号的电平状态。开始后,因为IIC总线可以挂在很多设备(不超过8个),所以先发送一个设备地址,选中这个设备,设备地址最后一位代表了是写还是读。选中设备后,再发送寄存器地址,代表选中某个寄存器,再开始传输数据。

八位设备地址=7位从机地址 读/写

给地址添加一个方向位位用来表示接下来数据传输的方向,

0表示主设备向从设备(write)写数据,

1表示主设备向从设备(read)读数据

开始信号:SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据。

结束信号:SCL 为高电平时,SDA 由低电平向高电平跳变,结束传送数据。

应答信号:接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特定的低电平脉冲,表示已收到数据。CPU 向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU 接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。

IIC信号在数据传输过程中,当SCL=1高电平时,数据线SDA必须保持稳定状态,不允许有电平跳变,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。SCL=1时 数据线SDA的任何电平变换会看做是总线的起始信号或者停止信号。

IIC我也有一篇文章有讲解,请看链接:

IIC总线最多可以挂多少个设备

5、单片机的SP指针始终指向

栈顶

6、IIC总线在传送数据过程中共有三种类型信号:

它们分别是:开始信号、结束信号和应答信号。

7、FIQ中断向量入口地址:

FIQ和IRQ是两种不同类型的中断,ARM为了支持这两种不同的中断,提供了对应的叫做FIQ和IRQ处理器模式(ARM有7种处理模式)。

FIQ的中断向量地址在0x0000001C,而IRQ的在0x00000018。

8、SPI四种模式,简述其中一种模式,画出时序图

面试驱动岗位,需要会画其中一种方式。模式0或者模式3。画出通信时序图。

在芯片资料上极性和相位一般表示为CPOL(Clock POLarity)和CPHA(Clock PHAse), 极性和相位组合成4种工作模式。

spi四种模式SPI的相位(CPHA)和极性(CPOL)分别可以为0或1,对应的4种组合构成了SPI的4种模式(mode)

Mode 0 CPOL=0, CPHA=0

Mode 1 CPOL=0, CPHA=1

Mode 2 CPOL=1, CPHA=0

Mode 3 CPOL=1, CPHA=1

时钟极性CPOL: 即SPI空闲时,时钟信号SCLK的电平(1:空闲时高电平; 0:空闲时低电平) 时钟相位CPHA: 即SPI在SCLK第几个边沿开始采样(0:第一个边沿开始; 1:第二个边沿开始)

sd卡的spi常用的是mode 0 和mode 3,这两种模式的相同的地方是都在时钟上升沿采样传输数据,区别这两种方式的简单方法就是看空闲时,时钟的电平状态,低电平为mode 0 ,高电平为mode 3。

具体的通信过程请自行百度,2021年秋招大疆笔试题考了这道题。

第七章 杂项面试题

1、讲一讲冯诺依曼和哈佛体系的区别

哈佛结构是一种将程序指令存储和数据存储分开的存储器结构。目前使用哈佛结构的中央处理器和微控制器有很多,ARM9、ARM10和ARM11,51单片机属于哈佛结构。

冯·诺伊曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。

2、面向对象编程的三大特性

以及重载的意思。重载,是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。

3、http默认端口号

80

4、linux中mysql数据库默认的端口是

3306

5、编程习惯小知识点

C语言编程中,单片机平台,一般有.c和.h文件,如果一个人在.h文件中定义了一个变量,会有什么后果。(讨论编程习惯的问题,我一般是只在.h文件中声明函数,不会做变量定义;另外,编程中每一个模块都会有对应的.c和.h文件,最终的总程序自己定义一个comm.c和comm.h去调用各个模块,这样的习惯我觉得还行)

if语句中如果是或运算( | ),第一个条件满足时,第二个条件还会判断吗。或运算的话,当然不会,因为 0|1=1,中断了

对于代码整洁方面,我已经在我的技术交流群发了文件,推荐《代码整洁之道》、《编码:隐匿在计算机软硬件背后的语言》、《程序员的自我修养》、《华为内部代码规范》

如果喜欢我的文章,欢迎关注、点赞和转发,下面可以留言~~~

0 人点赞