很多大学毕业生找工作面试常被问到项目经验。被问最多的就是:
①你做过什么项目?你在项目里主要负责那块?做项目的时候碰到了什么棘手问题,如何处理?
②单片机笔试很蛋疼,通常有硬件和软件笔试。怎么去应付?网上搜索一大堆有用但是实际公司笔试差异太大了,该怎么办?
③本人从事单片机开发多年,自己开发的产品不计其数。从原理图到调试功能代码都有丰富的资料库可以咨询我供您参考。
以下是我面试过应届生的一些问题供大家参考,如果需要从容应对面试具体可以咨询我:(欢迎点赞关注加评论)
1、 CH340芯片的TXD引脚中反向串联一个二极管可能感到迷惑,究竟这个二极管是什么作用呢?
1)该二极管的作用是为了防止给STC单片机冷启动下载程序时,CH340通过该引脚将电流倒灌给STC单片机中造成单片机断电不彻底而影响程序下载;
2)扩展一下,如果CH340仅作为USB转串口芯片功能来实现与STC单片机某串口的通信功能(不是用来下载程序用),那么该二极管是可以省去的。
2、 STM32启动过程?
通过Boot引脚设定,寻找初始地址
初始化栈指针 __initial_sp
指向复位程序 Reset_Hander
设置异常中断 HardFault_Handler
设置系统时钟 SystemInit
调用C库函数 _main
3、你用过哪些单片机?你具体负责那块?
宏晶STC8051、赛元、意法半导体STM8、STM32、北京兆易GDSTM32F103系列等等。讲自己熟悉的就好。负责硬件的就说画板子、焊接、调试硬件一条龙。负责软件根据实际情况啊,如果没有真正项目开发过,你就说源代码上做些简单的增删改查。这段要自己想,憋出一些可能无关紧要的内容也可以,让人感觉你不是啥都小白就行。
4、各种区(软件开发必须要懂)
1)栈区(stack)― 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。函数调用的本质就是栈操作,所以用栈来存储局部变量是最直观的做法。
2)堆区(heap) ― 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3)全局区(静态区)(static)―,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放
4)文字常量区 ―常量字符串就是放在这里的。 程序结束后由系统释放
5)程序代码区―存放函数体的二进制代码。
5、怎么选择8位、16位、32位单片机?
需要根据项目功能需求,核酸成本,选择合适品牌及型号的单片机。如果项目比较复杂,功能模块比较多,对运行速度要求比较高,那就直接上32位,具体选型还是根据项目需求吧。举个例子,我做个项目需要16路传感器采集模拟量,用到16路AD转换,就选择了北京兆易GDSTM32F103R8T6,这个才25块。如果用STM32F103R8T6至少要50块。价格差一倍啊。成本大大降低,功能都差不多。
6、你更喜欢嵌入式软件还是嵌入式硬件?
结合自身回答。提供范例。对软件算法比较感兴趣,软件试错成本很低,可以不断调试容易从中学习到新的知识,巩固技术。扎实的技术加上经验很容易就可以定位是硬件还是软件问题。也可以学到硬件方面的知识。不像硬件PCB设计没有一定的知识和经验的积累,足够的细心,做出产品不稳定或者不能用,试错成本很高。
对硬件更感兴趣,因为自己动手能力还不错。硬件电路原理理解的清晰也对整个项目会有自己的理解。快速精准设计出符合市场消费者需求的产品。在市场的反馈中不断优化提升产品性能给消费者更好的体验会带来成就感是自己一直学习提升的动力。吹的差不多了。
7、讲一下STM32的时钟系统
这里给大家简单总结了下:STM32 共有 5个时钟源,分别为 HSE、LSE、HSI、LSI、PLL,其中,HSE叫做高速外部时钟,可以接外部 4-16 MHz的时钟源;HSI 是高速内部时钟,它内部有一个RC振荡器,可以提供 8 MHz的时钟;LSE是低速外部时钟,外接32.768KHz时钟,作为RTC时钟;LSI 是低速内部时钟,也是一个内部的RC 振荡器,可以提供 40 KHz的时钟,可用作独立看门狗,或RTC的时钟;最后一个 PLL 是锁相环倍频,它的来源可以是HSI/2、HSE、HSE/2,倍频范围为 2-16 倍。
8、堆和栈的区别
栈(操作系统):由操作系统自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
堆(操作系统):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。
堆栈缓存方式区别:
栈使用的是一级缓存,他们通常都是被调用时处于存储空间中,调用完毕立即释放。
堆是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。
生长方向:对于堆来讲,生长方向是向上的,也就是向着内存地址增加的方向;对于栈来讲,它的生长方向是向下的,是向着内存地址减小的方向增长。
9、大端和小端
存储数据的方式不同,大端就是高地址存数据低位,低地址存高位。小端刚好相反。小端模式 强制转换数据不需要调整字节内容,大端模式符号位的判定固定为第一个字节,容易判断正负。
10、单片机最简系统包括哪些?
CPU芯片运算控制、寄存器、存储器ROM和RAM。电源电路、复位电路、时钟电路。定时器/计数器,中断系统。串口和双向IO口。
11、推挽输出、开漏/开集输出区别
推挽输出:两个MOS管或者三极管受到互补信号的控制,一个导通,一个截止。可以真正的输出高电平和低电平。优点驱动能力强。缺点:两个推挽输出电路不能直接相连容易短路(1个输出高电平另一个输出低电平,两个推挽电路相连就短路了)所以推挽不能实现线与。(线与讲白了就是多个上拉电阻接电源的电路,只要有个拉低,这条线就是低电平,如果没有这个电阻,直接接电源,你把它拉低那就短路了,搞坏器件。)
开漏/开集输出:开漏和开集区别在于一个是用MOS管,一个是三极管。实现功能一样。主要作用实现电平转换,或者增加驱动能力。
12、电平标准有哪些?电平范围?
USB电平:电源线是5V,为USB设备提供最大500mA的电流,它与数据线上的电平无关,数据线是差分信号,通常D+和D-在+400mV~-400mV间变化,在传统的单端(Single-ended)通信中,一条线路来传输一个比特位。在差分传输电路中,输出电平为正电压时表示逻辑“1”,输出负电压时表示逻辑“0”,而输出“0”电压是没有意义的,它既不代表“1”,也不代表“0”。而差分通信中,干扰信号会同时进入相邻的两条信号线中,在信号接收端,两个相同的干扰信号分别进入差分放大器的两个反相输入端后,输出电压为0。所以说,差分信号技术对干扰信号具有很强的免疫力。