【一面】CVTE视源2019秋招补录嵌入式岗位面经

文章目录

  • 01 - 一面内容
  • 02 - 总结


返回导页:导页

01 - 一面内容

一面属于基础面,涉及基础知识非常多,因为回答得比较顺利,所以印象比较深刻
30秒的自我介绍

建议要和简历相符,另外说一些简历没有的内容

自己满意的项目是哪个

Arduino自平衡多功能机器人。因为80%的工作都是第一次接触,非常有挑战性

项目中有什么模块

Arduino主控板、MPU6050、蓝牙、超声波、阵列热像传感器、减速直流电机、电机驱动和一个3D打印外壳

为什么选择Arduino

51和STM都考虑过,但是51需要关注底层硬件寄存器操作,而我实际关心的是PID算法,而且12MHz的时钟频率计算陀螺仪的二阶滤波算法非常吃力,端口资源也不满足多功能的要求,STM其实完全满足要求,但是过于强大,我的目标是体积尽可能小,功能尽可能多,而且模块组合方式不允许主控芯片有太大的体积,最后折中选择了16Mhz,模块体积非常小,库函数编程和专门具有控制能力的Arduino,型号是nano

3D外壳是自己设计的吗

对,自己有一点点画工程图的基础,后面自己跑去学CAD就直接用起来了

讲一讲PID算法

PID经常用于保持环境的稳定,一般它通过关注3种误差和设置3个可调参数最后进行加权求和作为输出,3个误差分别是当前误差、历史误差和近期误差,当前误差用于大幅度的调控,历史误差用于累积收敛,近期误差用于调控整体趋势,再用3个可调参数分别相乘再相加,也就是加权求和,就可以作为控制的输出

蓝牙是怎么通信

我用的都是模块,所以蓝牙板载着片上系统,然后用串口通信就可以,波特率是115200

什么叫波特率?和比特率有什么区别?

波特率是传输一个码元的时间,而比特率是传输一个二进制位的时间,区别在于,一个码元不一定是一个二进制位(虽然经常都是),比如当传输的状态有4种的时候,需要2个二进制位表示全部状态,此时发送一个状态为一个码元,一个码元其实就是2个二进制位,此时波特率是比特率的两倍,一个通用的公式是比特率=波特率*一个码元对应的二进制位数

红外的解码是怎样的

我用的红外是38K通用红外,编码格式是NEC,解码是用Arduino自带的库,自己写也可以,不过太浪费时间了

直流电机怎么调速

我通过一个小型的电机驱动tb6612进行的,电机驱动分别连接电机和Arduino主控板,主控板输出PWN就可以控制电机速度和方向

PWM是怎么产生的

Arduino有专门的模拟输出PWN,现成的库

PWM有占空比的概念,讲一讲占空比

占空比就是在一个脉冲宽度中,通电时间或者高电平时间所占的比例

单片机怎么实现占空比

可以用定时功能实现,设置好脉冲宽度和占空比后,计算定时的溢出时间,这段时间就作为高电平的输出时间,其余时间输出低电平

怎么实现定时功能

单片机都会有定时器,用定时器和中断就可以了

讲一讲中断的概念

中断是用于处理紧急事件的,系统只要预先设置好中断源、中断触发方式、中断服务函数、中断屏蔽位等等就可以使用中断了,当中断源满足中断条件的时候就会触发中断,此时CPU会停止当前工作,然后保护现场,接着跳转到中断服务函数执行,最后恢复现场

中断触发方式有哪些

外部中断一般是上升沿、下降沿或者两者都触发,而内部中断是由程序行为触发的,比如未定义行为像数组越界、除数是0等等

熟悉ADC吗

不经常用

堆和栈的区别

首先是管理方式不同,堆由程序员负责申请和释放,栈是编译器负责的,然后是结构不同,堆是一种从底部往顶部扩展的结构,栈是从顶部到底部刚好相反的结构,最后是效率有很大的不同,堆的申请和释放都需要经过算法计算,因为要减少内存碎片和提高内存使用率,而栈由编辑器负责,速度非常快,在这点上堆的效率比较低

堆和栈使用上有什么区别

因为栈是编译器负责的,所以程序员只需要在函数内部定义变量直接使用,栈是程序员负责的,申请的时候会在内存开辟一块匿名区域,然后返回地址,必须使用指针去访问,所以访问堆都是通过传递指针的方式,最后需要程序员显式去释放堆空间

两个函数怎么共享资源

可以用全局变量,不够由于没有约束,会使得函数变得不可重入,也可以使用指针,以参数的形式传递一个指针,就可以共享指针所指向的资源

const和define的区别,分别在什么情况下使用

在编译器的角度下,const其实给出了地址,而define给出了立即数,然后const是有类型的,表达式运算的时候会进行类型安全检查,而define没有,最后const只在第一次使用的时候访问内存,往后的使用都是访问符号表,define则是普通的字符串替换,具有多个副本
const一般用于函数的参数保护,以免函数内部不小心修改了只读变量,define其实比较自由,按照Linux的风格,define是有崇高的地位,很多短小精悍的功能都由define完成,如果就定义常量而言,const和define都可以,不过我个人认为const定义的常量比define要高效

平时的编程环境

如果是51或者Arduino或者STM的话,因为都有丰富的集成开发环境IDE,所以直接在PC编程烧录,如果是ARM的开发,我一般是PC上用sourceinsight编程,然后进入虚拟机Linux编译调试,再通过NFS连接ARM的板载Linux传输数据进行驱动安装

代码管理方式

因为代码量都不是很大,不太需要github来管理,所以都是直接保存PC本地,调试的时候直接修改源代码,编译烧录整个过程重复一遍

工作相关

这里面试官介绍了如果我入职后的具体工作,以及询问工作地点和时间,最后可以问面试官一个问题,我问了能不能接触到希沃这个平台,面试官说希沃是弄安卓的,之后礼貌拜拜

02 - 总结

  • 整个过程大概30分钟,面试官会顺藤摸瓜一直问你所提到的点
  • 简历的内容要真实,切不可造假,不然会问到你怀疑人生
  • 个人觉得需要系统回答才能吸引面试官,他问一点,你需要发散思维答十点
  • 基础最重要,项目只是实践经验,对大学生来说可多可少,但是基础一定要稳
  • 最后小白的回答不一定是正确的,多少会有错误,望请更正

返回导页:导页

你可能感兴趣的:(#,记CVTE2019年秋招补录)