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++问题

    1. 智能指针有了解吗?
    2. 容器了解吗?vector实现的机制是怎么样的?
    3. 迭代器有了解吗?讲解一下你的理解、

    嵌入式单片机一面

    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++

  • static作用,变量加入static以后在内存中存储位置的变化。
  • volatile作用
  • C++为什么有指针还要引用,为什么不和JAVA一样抛弃指针
  • delete和delete[]的区别
  • 虚函数是用来干嘛的?虚函数机制怎么实现的?虚表指针在内存中的存放位置?
  • C++多态怎么理解?C++有哪些多态的典型例子?
  • 叙述程序编译都包含哪些阶段,每个阶段干了什么?
  • CMake是如何包含文件目录的
  • 全局变量和局部变量在什么地方?堆栈如何申请资源?
  • C语言编译后的内存分布
  • 我连续调用同一个函数两次,他的局部变量初始化结果是否会一致?(函数调用的过程)
  • 你说静态局部变量存储在静态区,那么静态区的创建和消失是在什么时候?
  • 我在windows里面运行了多个进程,其中一个进程执行完了,他的静态区会如何处理?(多进程的内存管理问题)
  • 静态局部变量与局部变量的区别?为什么局部变量未定义时,每次初始化的结果是不确定的?是个真随机数还是个伪随机数?
  • 嵌入式中栈的工作机制是什么?
  • struct字节对齐了解么?
  • 容器了解吗?vector实现的机制是怎么样的?
  • 迭代器有了解吗?讲解一下你的理解
  • 内存分配函数了解么?如果系统中只有10K内存,而我要分配12K,能分配成功吗?如果能,那么将分配到的区域用memset进行初始化,会成功吗?
  • 处理器架构

    作者:DJI小迷弟
    链接:https://www.nowcoder.com/discuss/794763?channel=-1&source_id=profile_follow_post_nctrack
    来源:牛客网

    处理器架构

  • 51和32架构的区别
  • MCU可以运行Liunux吗,为什么
  • STM32启动过程(上电开始->main执行的过程)
  • 中断响应执行流程,中断上下文指的什么,保存中断上下文是完成的什么操作,以STM32为例,都有哪些寄存器被保存
  • STM32 F1和F4的区别
  • Cotex-M系列使用浮点运算对STM32中断效率会产生什么影响
  • STM32常见寄存器:R13(SP,堆栈指针),R14(LR,连接寄存器),R15(PC程序计数器)作用
  • 什么是大小端模式
  • 常见硬件接口协议/总线

    SPI
  • SPI有哪四种工作模式
  • (2)IIC
    (3)UART
  • 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

    物联沃分享整理
    物联沃-IOTWORD物联网 » MCU通信协议与单片机面试题宝典:第一章,必读指南

    发表回复