嵌入式面试经验
1.首先需要准备自己的自我介绍,重点突出符合职位的亮点
2.熟悉自己的项目,熟悉基本流程,里面用到的知识点
3.复习基本的·C语言知识点
3.1几个关键字的作用
3.1.1auto:指定为自动变量,由编译器自动分配及释放,通过栈上分配
3.1.2static:指定为静态变量,分配在静态变量区,修饰函数时,指定函数作用域为文件内部
3.1.3register:指定为寄存器变量,建议 编译器将变量存储到寄存器中使用,也可以修饰函数形参,建议编译器通过寄存器而不是堆栈传递参数
3.1.4extern:指定为外部变量,即在另外的目标文件中定义,可以认为是约定由另外文件声明的对象的一个"引用"
3.1.5const:与volatile合称"cv特性",指定变量不可被当前线程/进程改变(但有可能被系统或其他线程/进程改变)
3.1.6olatile:与constant合称"cv特性",指定变量的值有可能会被系统或其他进程/线程改变,强制编译器每次从内存 中 取 得该变量的值
3.2内存占据
3.2.1 32位编译器:
char :1个字节
char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64编译器)
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 4个字节
long long: 8个字节
unsigned long: 4个字节
64位编译器:
char :1个字节
char*(即指针变量): 8个字节
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 8个字节
long long: 8个字节
unsigned long: 8个字节
4.相关的硬件知识
4.1 spi(串行外设接口):全双工,四条线(串行时钟,串行数据输出,串行数据输入,片选信号),没有应答信号,只有一个主设备
spi接口具有如下优点:
1) 支持全双工操作;
2) 操作简单;
3) 数据传输速率较高。
同时,它也具有如下缺点:
1) 需要占用主机较多的口线(每个从机都需要一根片选线);
2) 只支持单个主机
4.2 iic(集成电路总线):半双工,两条线,线少,但是技术麻烦,通过地址选信号
优缺点
1)优点
只使用两条信号线;
支持多主机多从机;
有应答机制。
2)缺点
速率比SPI慢
4.3USART(通用异步接收器):没有时钟信号,所以通过波特率,全双工,三根线
优缺点
1)优点
只使用两条信号线;
不需要时钟信号;
有校验位进行错误检测;
2)缺点
传输速率比较低。
spi和iic都是短距离的,芯片和芯片的通信,usart是两个设备的通信,长距离
4.4单片机最小系统?内部主要结构?
答:电源,晶振,复位电路;
内部结构:ROM/RAM,计时器,中断,I/O串并行口,总线
4.5RAM和ROM的区别?
ROM(只读存储器):一次写入后只能被读出,而不能被操作者修改或者删除,一般用于存放固定的程序和数据表格
RAM(随机存储器):内存,存放各种现场的输入/输出数据,中间计算结果以及与外部存储交换信息,或者作堆栈(特点:先进先出,后进后出)
4.6看门狗原理:在系统运行以后就启动看门狗计数器,此时看门狗就开始自动计时,如果达到一定时间还不去给她进行清零,看门狗就会溢出从而引起看门狗中断,造成系统复位
5.数据结构
5.1队列和栈区别
1.队列先进先出,栈先进后出
2.对插入和删除操作的限定不同
栈是限定只能在表的一端进行插入和删除操作的线性表
队列是限定只能在表的一端进行插入,在另一端进行删除操作的线性表
3.遍历数据速度不同
栈只能从头部取数据,也就最先放入的需要遍历整个栈最后才能取出来,而且在遍历数据的时候还得为数据开辟临时空间,保持数据在遍历前后的一致性。
队列则不同,它基于地址指针进行遍历,而且可以从头或尾部开始遍历,但不能同时遍历,无需开辟临时空间,因为在遍历的过程中不影像数据结构,速度要快的多
其他问题
1.iic的上拉电阻有什么用,为什么不是下拉电阻?
2.数组存储是连续的吗,怎样定义不连续
关注我,分享更多面试经验,想要走c++和嵌入式可以看一下我的面经哦,励志做全网最全的嵌入式总结,后边我也会出算法总结https://www.nowcoder.com/creation/manager/columnDetail/MJNwoM