嵌入式面试经验

12:17:08  2020-02-15

面试过三四家嵌入式的企业,经验不算特别丰富,但把个人面试的真实经历写在这里供大家参考。

总的经验是,研究能力越强,研发部门比重越大的企业,面试难度会越大,这也是常理,越大的公司就要越高的标准和要求:一家私企(做汽车电子控制器的),主要问个人经历;一家电子器械公司(1000-5000人规模)问的较多,技术面试问了40分钟技术问题,5分钟聊待遇 ,下面就把一部分遇到的问题和回答(严格、标准、完整的回答请百度)罗列一下,有新的会继续更新:

1、在使用Keil编译完程序的时候,左下角的Code, RO, RW, ZI分别代表什么?

答:

  • Code:代码的大小
  • RO:常量所占空间
  • RW:程序中已经初始化的变量所占空间
  • ZI:未初始化的static和全局变量以及堆栈所占的空间
  • 补充:Flash占用大小=Code+RO+RW,SRAM占用大小=RW+ZI

2、stm32选型的原则?

答:兼顾性能和经济性:(1)、考虑芯片的性能是否够用:看芯片有哪些功能模块,比如几路ADC,几路PWM,几个串口,看是否满足项目要求,再看有的片上资源参数是否满足要求,例如ADC、PWM的模式,RAM和ROM大小等;(2)、从经济性考虑:资源和性能不要浪费,不要杀鸡用牛刀,保证效率的前提下降低成本,同时考虑体积大小。

3、写中断的时候需要注意哪些问题?

答:中断里不要放延时和消耗资源多的代码;注意中断的刷新频率要适当,若太高会浪费资源,还有可能造成阻塞等等

4、微机原理学过吗?还记得学了哪些东西?(略)

5、自动控制原理里,收敛的原理,PID各参数的意义以及数字PID的参数整定?

答:主要答到反馈控制和误差,解释了P,I,D的参数意义,P:比例控制,I:会影响稳定性和滞后性能,D:提前控制,但可能产生超调等等

6、stm32下载程序到哪里了?

答:片内ROM(一般单片机内部已集成了ROM)。(结合单片机的启动过程和运行过程,重点了解内存管理和各芯片的区别,包括RAM, ROM, SRAM, EEPROM, FLASH等的区别 )

答:

名称 RAM SRAM ROM FLASH EEPROM
  Random Access Memory随机访问存储器   Read Only Memory程序存储器 闪存(是EEPROM的一种)  
主要功能 存储短时间内使用的程序、变量等数据(比如中间变量、开发者不关心的数据等)   主要来存储程序和不需要变动的数据(如音乐、视频、照片等) 主要来存储永久保存的数据  
特点 断电后数据不存在   断电后数据仍存在 断电后数据仍存在且更快,更小  

ROM, FLASH和RAM的区别 对于RAM, ROM以及FLASH的区别:

简单地说,在计算机中,RAM 、ROM都是数据存储器。RAM 是随机存取存储器,它的特点是易挥发性,即掉电失忆。ROM 通常指固化存储器(一次写入,反复读取),它的特点与RAM 相反。ROM又分一次性固化、光擦除和电擦除重写两种类型。 在应用中,常规上ROM是用来存储固化程序的,RAM是用来存放数据的。由于FLASH ROM比普通的ROM读写速度快,擦写方便,一般用来存储用户程序和需要永久保存的数据。譬如说,现在家用的电子式电度表,它的内核是一款单片机,该单片机的程序就是存放在ROM里的。电度表在工作过程中,是要运算数据的,要采集电压和电流,并根据电压和电流计算出电度来。电压和电流时一个适时的数据,用户不关心,它只是用来计算电度用,计算完后该次采集的数据就用完了,然后再采集下一次,因此这些值就没必要永久存储,就把它放在RAM里边。然而计算完的电度,是需要永久保存的,单片机会定时或者在停电的瞬间将电度数存入到FLASH里。

参考:DRAM、SDRAM和SRAM的区别

7、volatile:参考:单片机的C51 的volatile

8、对嵌入式操作系统的理解?

答:说了有FreeRTOS, RTOS, RT-Thread, ucos系列等,还有linux,根据实时性要求和操作性要求选择合适的系统。

9、知道哪些数据结构的基本概念?(本科没上过数据结构,就说了一些自己空余时候了解的)

10、插值的时候,队列快还是链表快?

11、IIC通信速率和使用IIC时要注意的地方?

给出常见有线通信方式和无线通信方式的对比:

(1):有线:

(2):无线:

 

12、函数abs、fabs、fabsf 有什么区别?

abs、fabs、fabsf 三个函数都是用来求一个数的绝对值,区别如下:

1)int abs(int a);                     // 处理int类型的取绝对值

2)double fabs(double a);     //处理double类型的取绝对值

3)float fabsf(float a);            //处理float类型的取绝对值

相关参考:https://blog.csdn.net/dwx1005526886/article/details/81915191

原文地址:https://www.cnblogs.com/CCWangsj/p/12312422.html