【攻略】校园招聘:嵌入式软件工程师基础问题分享(一)
问题1
面试官:
STM32 中断是如何进入到中断服务程序的?
学生:
在STM32中,为了区分不同的中断,每个设备有自己的中断号
。系统有0-255一共256个中断。系统有一张中断向量表
,用于存放256个中断的中断服务程序入口地址。每个入口地址对应一段代码,即中断服务程序
问题2
面试官:
简述均值滤波和滑动滤波?
学生:
高频振动的系统
;缺点:对异常信号的抑制作用差,无法消除脉冲干扰的影响问题3
面试官:
简述STM32 中断?
学生:
STM32中断的顺序
:1)初始化 IO 口;2)开启 AFIO 时钟;3)EXTI配置;4)NVIC配置;5)编写中断服务函数问题4
面试官:
简述STM32 看门狗?
学生:
监测单片机程序运行状态的模块或者芯片
,俗称“看门狗”(watchdog)独立看门狗和窗口看门狗
,其实两者的功能是类似的,只是喂狗的限制时间不同。独立看门狗是由专门的低速总线进行驱动,即LSI总线(时钟频率40KHz);窗口看门狗是用APB1总线驱动的,时钟频率最36MHz。独立看门狗适合应用于需要看门狗作为一个在主程序之外 能够完全独立工作,并且对时间精度要求低的场合窗口看门狗的安全性比独立看门狗要高一些
,毕竟它喂狗的时间段缩短了,这样就会降低由于程序跑飞而误打误撞的去执行喂狗操作的几率了问题5
面试官:
UART帧格式,停止位如何配置,波特率是什么?
学生:
每秒传输这么多个比特位数(bit)
这个参数最好为8
,因为如果此值为其他的值时当你传输的是ASCII值时一般解析肯定会出问题。理由很简单,一个ASCII字符值为8位,如果一帧的数据位为7,那么还有一位就是不确定的值,这样就会出错校验数据传送的正确性
数据是从高位(MSB)开始传输还是从低位(LSB)开始传输
问题6
面试官:
UART如何判断一帧数据结束?
学生:
空闲中断
。在总线上接收到数据后,一个字节的时间内没有再接收到数据,空闲标志位置位,便认为一帧接收完毕。如STM32的空闲中断延时等待
。设定一个超时时间,在总线上接收到数据后,设定时间内没有再接收到数据,认为一帧接收完毕。如看门狗通信协议
。最常见的通信协议就是判断字符串末尾的回车符\r、换行符\n等,或者特定的帧尾。也可加入帧头、数据长度、数据校验等构成较为复杂点的通信协议问题7
面试官:
空闲中断是什么?
学生:
空闲的定义是总线上在一个字节的时间内没有再接收到数据。空闲中断是检测到有数据被接收后,总线上在一个字节的时间内没有再接收到数据的时候发生的。一般就只有一个数据帧发送完成的情况,所以串口的空闲中断也叫帧中断
问题8
面试官:
SPI通信的数据线有几根?如果去掉一根,可以是哪根?
学生:
4根线
,串行时钟线(CSK)、主机输入/从机输出数据线(MISO)、主机输出/从机输入数据线(MOSI)、低电平有效从机选择线(CS)从机选择线(CS)可以去掉
问题9
面试官:
程序编译过程?
学生:
预处理阶段
。预处理器(cpp)根据以字符#开头的命令,修改原始的C程序。比如hello.c中第一行的#include<stdio.h>命令告诉预处理器读取系统头文件stdio.h的内容,并把它直接插入程序文本中,结果就得到了另一个C程序,通常是以.i作为文件扩展名编译阶段
。编译器(ccl)将文本文件hello.i翻译成文本文件hello.s,它包含一个汇编语言程序。汇编语言程序中的每条语句都以一种标准的文本格式确切的描述了一条低级机器语言指令汇编阶段
。汇编器(as)将hello.s翻译成机器语言指令,把这些指令打包成一种可重定位目标程序的格式,并将结果保存在目标文件hello.o中。hello.o文件是一个二进制文件,它的字节编码是机器语言指令而不是字符,如果我们在文本文件中打开hello.o文件,看到的将是一堆乱码链接阶段
。链接器(ld)负责处理合并目标代码,生成一个可执行目标文件,可以被加载到内存中,由系统执行问题10
面试官:
TCP/UDP在哪一层?两者区别是什么?
学生:
TCP(传输控制协议)和 UDP(用户数据报协议)在传输层
TCP面向连接
(如打电话要先拨号建立连接);UDP是无连接的
,即发送数据之前不需要建立连接TCP提供可靠的服务
。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
TCP面向字节流
,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的
,UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)点到点的
;UDP支持一对一,一对多,多对一和多对多的交互通信希望本文对大家有帮助,上文若有不妥之处,欢迎指正
分享决定高度,学习拉开差距