当时去哈啰单车面试的时候,先做了一个笔试,笔试题有两道:
1.自己写一个写队列的初始化,入队和出队。
2.单片机A和B通信,写一个通信协议(串口和spi都可以),并简述通信流程。
笔试题答完后提交,然后HR带我进了面试间,一会儿进来两个技术大佬开始面试。首先问了一些大家都会问的问题,包括自我介绍,工作经历,为啥想跳槽之类,关于技术的问题有以下几道:
用过什么单片机?
stm32和tiny4412的区别是什么?
stm32为什么不能跑linux系统?
用过什么RTOS?
RTOS的任务是怎么写的?如何切出这个任务?
用过蓝牙协议吗?透传如何保证不丢数据?
讲讲你做过的最好的项目,用到了哪些技术?
你对我们公司要招聘的这个职位了解多少?
基本就是这些。
这个是我自己做过的另外一些公司的笔试题。
一、存储一个32位数0x87654321到2000H~2003H四个字节单元中,若以小端模式存储,则2003H存储单元中的内容为?
解答:关于大小端模式我自己有一个快速区分的方法,就是看低地址端,所谓端。低地址端存低位,即为小,所以小端模式就是最低端的地址位存低位的字节,反之大端模式就是低端的地址位存高位的字节。因此小端模式下2003H(高地址端)应该存0x87(高位字节)。
二、判断题
只有抢占优先级不一样时才发生中断嵌套。 (√)
三、对以下设备进行分类并详细描述以下外设的功能、特点以及使用的方法:
1.GPIO口 2.UART 3.LCD 4.RTC 5.触摸屏 6.IIC总线接口 7.定时器 8.看门狗 9.SRAM 11.flash 12.485 13.DMA 14.SPI总线 15.滴答时钟 16.FSMC 17.CAN总线 18.ADC
解答:片上外设:1,2,4,6,7,8,13,14,15,16,17,18.
片上外设是在STM32开发板上通过APB1和APB2和内核相连接的设备。它可以实现自己特定的功能如模数转换、通信、输入输出高低电平。使用时需打开对应的外设时钟并进行相应的配置。有相应的控制寄存器,可通过指令控制。
扩展外设:3,5,9,11,12.
扩展外设是通过接口连接到STM32上的,受内核控制的设备。它可以实现自己特有的功能,使用时也需要调用相关函数去操作。可通过SPI、IIC总线去控制。
通信设备:1,2,6,14,16,17。 CPU通过这些通信设备与外设进行通信。
存储设备:9,11. 可以存储数据,可以被CPU读写。
显示设备:3. 通过操作显存SRAM可以给像素点着色,显示你想要的输出。
四、请描述以下你认为什么样的设备才算外设?外设都具有哪些特点?
解答:外设指的是单片机外部的外围功能模块,内部外设如串口、AD模块等都是集成在单片机内部,有相应的寄存器控制。其他外设可通过IO口控制。
五、请描述你对STM32中断的理解以及简述STM32的优先级划分与抢占的过程。
解答:中断:预先知道某件事会发生,但是不知道何时会发生。所以先做别的事情,当这件事该做了就放下手头工作去做,做完回来继续之前的工作。
优先级分组:分为占先优先级和次优先级。在STM32中用了4个位来分配。如果一个中断想抢占另一个正在执行的中断,那么低优先级的中断会暂停,等优先级高的执行完毕再继续执行。
六、请描述Cortex-M3中地址总线的理解以及外部寻址分布图的理解。
解答:地址总线就是用来存放地址的,Cortex-M3的地址映射也是类似的,它有32根地址线,所以寻址空间为2^32 bit=4GB.可访问的存储器空间被分为8个主要块,每个块512MB。
而地址映射,就是讲芯片上的存储器,I/O资源与地址建立一一对应的关系。如果某地址对应着某寄存器,我们就可以运用C语言的指针来找到该地址并执行相应的寄存器操作。