MCU通信协议与单片机面试题宝典:第一章,必读指南
第一章-MCU 通信协议 单片机 常见面试题目
bootloader工作流程
MCU启动流程
通信协议,SPI IIC
MCU怎么选型,STM32F1和F4有什么区别
外部RAM和内部RAM区别,怎么分配
外部总线和内部总线区别
MCU上的固件,数据是怎么分配的
MCU启动流程
IAP是怎么升级的,突然断电怎么办
挑了麦轮项目(因为大疆RM也是麦轮,面试官看样子比较感兴趣)
为什么用的CAN总线
你说一下spi和 i2c和 UART的 各自的工作方式优缺点?
你知道怎么判断栈溢出吗?
能简单说一些你用过的stm32的一些芯片的配置吗?CPU主频,flash和RAM分别都是多大的?
你在stm32上都做过哪些开发?
你开发过哪些驱动吗?
你了解整个SPI的通信过程吗?SPI有几根线,分别是什么?你使用SPI的时候速率配置的是多少?
有使用过DMA吗?解释一下什么是DMA?
SPI有4种模式你知道是那4种模式吗?
你在开发调试过程中有遇到过哪些难以解决的问题可以分享一下吗?
.你有做过一些比较大型的软件开发吗?就是一些比较大的功能需要做一些设计、分层的东西。
我说了其中一个项目分层驱动层、中间层和应用层。
中间层的设计你考虑了哪些因素?
堆和栈有什么区别?
先问点iic,spi基础知识,速率,工作模式。
ARM体系结构。然后被逮住问:7种异常是什么(没答全),中断触发到返回的具体行为(CM3权威指南里有),中断嵌套如何实现(NVIC相关),中断机制的具体实现(还在答中断具体行为,他问的应该是两级向量表如何查找),中断部分结束。
c知识指针与引用的区别
答了点单指令多数据流,感觉不感兴趣,又说了流水线冲突与解决,反问cache-miss什么情况,分支预测什么原理(高级计算机结构课上内容)。看来芯片方向看重体系结构的知识,课上学的终于有用了。
之后我就把自己的优势定位在ARM体系结构和CPU原理/OS任务切换与调度原理/静态链接知识(这里推荐《程序员的自我修养》)。
笔试考了DMA与中断传输的比较
画项目框图、我开始把所有项目叙述和重点问题全部写纸上,每天背一遍。
什么叫软硬实时、m4内核双堆栈机制、顺便答了arm模式切换和上下文切换,bootloader,链接原理,
在职学姐告诉我,应该答不喜欢华为的文化。
大华股份、算法工程化岗。提前准备了一些ucos移植,arm指令集流水线和静态链接的知识,事实证明,准备的方向很对,他很感兴趣。
问了ucos移植的细节,提到了一种并发的指令集
最后问我的优势劣势分别是什么,答优势是对底层原理的理解和对编译器的了解,劣势是不懂Linux。
中断机制,大概有多少中断,可修改向量表吗(通常不可,有例外),又问m4内核的双堆栈机制。BL指令的跳转范围(32MB)。
静态链接,深挖强弱符号的东西,最后说我对底层还是比较了解。
IIC与SPI的不同(片选方式,异步同步),IIC读写方向如何区分(地址位最后一位的高或低)
9轴数据的意义,答了姿态解算中队数据的融合。
手撕代码环节,特意找了个最简单的给我,牛客原题链表表示的两数相加
问信号量,进入临界区的操作,为什么关中断可以保护临界区,cpsr如何保存。
问静态链接,预处理是什么编译选项,-g是什么意思,如何使用ar生成库文件,这块不熟,会不会gdb(不会)。那就说说makefile一条指令的格式,.c生成.o什么选项,.o生成.elf什么选项,.o与.elf的区别联系,举个区别的例子。
项目,直接画个框图给他,说的熟的不能再熟了。然后提问中断机制,这就进入了我的“模板”,然后重点问了流水线效率问题,为什么中断返回PC要减4,拿出试卷让我答没写完的题。然后让结合项目代码分析如何避免流水线冲突(调整指令执行顺序,分支预测,增加部件)
静态链接,也是熟的不能再熟的东西,是我亮点之一。
老生常谈,叙述中断机制,bootloader,模板开启引出流水线
如果使用C++导致MCU资源不够如何解决(答:直接操作寄存器)
相关的通信协议I2C;SPI;串口有没有用过
讲一下串口通信协议,串口通信如何校验,原理
有没有遇到过IO口输出电压稳定的问题,如何解决的
项目中有没有用到I2C,主要用在哪方面,讲一下选择I2C的原因
静态局部变量与局部变量的区别(很基础)
为什么局部变量未定义时,每次初始化的结果是不确定的?是个真随机数还是个伪随机数?(我答:与栈的工作过程有关)
那么嵌入式中栈的工作机制是什么?(不会)
我连续调用同一个函数两次,他的局部变量初始化结果是否会一致?
远程网络升级嵌入式,他就问我你有考虑过你的固件安全性问题吗?如果有其他人通过网络途径下载一个非官方的固件包,你怎么去判断?
C语言问题
函数指针了解么,在哪里有用到?
struct字节对齐了解么?
什么是大端小端?
内存分配函数了解么?如果系统中只有10K内存,而我要分配12K,能分配成功吗?如果能,那么将分配到的区域用memset进行初始化,会成功吗?
除了堆区,程序运行的内存中还有哪些区域?
C++问题
- 智能指针有了解吗?
- 容器了解吗?vector实现的机制是怎么样的?
- 迭代器有了解吗?讲解一下你的理解、
嵌入式单片机一面
1和32架构的区别
\3. Stm32处理中断的过程
\4. 保护现场保护什么东西(寄存器和堆栈)
\5. 要保护那些寄存器?
\6. Stm32是要中断嵌套的吗,什么时候需要什么时候不需要
\7. Cortex-m系列使用浮点会对stm32中断效率产生什么影响(不清楚)
\8. 对嵌入式哪方面比较深刻,研究比较深入的
\9. Uart是怎么样的接口
\10. Uart异步,不需要时钟,那为什么还要设定波特率
\11. Spi跟uart在使用上有什么区别
\12. Spi和uart需不需要区分主从
\13. Spi的从是否可以主动读写主的数据,怎么做到的
\14. 写iic、spi、uart驱动需要哪些注意的地方
\15. Iic、spi、uart接收方式有三种,轮询,中断和DMA,如果是中断收到的数据要谁去申请谁去释放
\16. 中断里数据往一个buffer去放,这个buffer要谁去申请
\17. 如何保证buffer读和写的互斥
static用法,变量存储位置
C语言编译后的内存分布
volatile变量作用?修饰哪些变量,为什么这些变量要用volatile修饰
SPI四种模式
串口发送一个字节多少位
?在做硬件驱动的时候,碰到的比较困难的问题? 项目中有制定通讯协议,就问有出现过什么通讯错误,出现错误了怎么办?通讯丢失怎么办?
STM32启动过程?
C++为什么有指针还要引用?
一些总结摘抄‘
作者:DJI小迷弟
链接:https://www.nowcoder.com/discuss/794763?channel=-1&source_id=profile_follow_post_nctrack
来源:牛客网
C/C++
处理器架构
作者:DJI小迷弟
链接:https://www.nowcoder.com/discuss/794763?channel=-1&source_id=profile_follow_post_nctrack
来源:牛客网
处理器架构
常见硬件接口协议/总线
SPI
(2)IIC
(3)UART
(4)FSMC
(5)AXI
四旋翼中的姿态解算算法是如何运行的?两个部分:一个是数据滤波,一个是姿态解算Mahony。
PID算法的实现是库还是自己写?自己写的,算法不难,难的是参数调试
讲一下PID算法的实现过程?
简单说一下spi协议,spi协议最大传输速度。什么是平衡二叉树,为什么要这样设计平衡二叉树?
链表和数组的区别,优劣?
IIC协议的最大通信速率、你觉得什么因素限制了IIC速度
问:stm32使用了哪些外设协议?
答:串口、iIC、spi、pwm
问:stm32使用了哪些外设协议?
答:串口、iIC、spi、pwm
问:做项目时,stm32芯片的选型?
答:外设数量、内存大小。
问:stm32程序出问题如何解决?
答:通过keil里的debug功能,端点、单步调试。
问:一些传感器的数据采集如何保证实时性?
答:通过在通用定时器的中断中释放信号量同步任务、ucos系统的延时函数实现。
问:如何调试PID参数,仿真还是实测?
答:配合上位机软件,在室内场地实际调试参数。
问:在飞行器遥控中,蓝牙通讯的距离对数据传输有无影响?
答:调试时飞行器与上位机的距离较近,没遇到这个问题。
下面大华单片机的题目
如何使用软件实现iic
spi有哪些信号线
从大一到大三写的代码多少行?手写内存复制函数,提问:s与d重叠时如何处理?
说一说c标准库的一些函数名,给我整懵了
深圳小米
操作系统的中断上半部和下半部
中断中不能执行什么函数
(手写笔试题)求斐波那契数列
看程序,回答输出。指针相关的题
南京地平线
星宸科技
首先是一个技术官针对笔试提问、一步步引导我做出笔试题。然后提问了一些C语言的知识,内存管理等,RTOS的信号量、竞争等。
随后是主管面试,画图解释C语言实现动态内存分配。
作者:好家伙VCC