CVTE一面总结
一面总结
面试官准备的问题比较出乎我的预料,有一些知识点没有提前去准备导致答不出来。
失败是人生的必经之路。
题目
- RTOS和裸机开发的区别
我的回答是裸机由于32单核运行,一次性只能运行一个程序,而RTOS可以通过任务轮转运行的方式实现多任务同时进行
FreeRTOS的任务状态(4种)
1.运行态(Running) 2.就绪态(Ready) 3.阻塞态(Blocked) 4.挂起态(Suspended)
Running—运行态
当任务处于实际运行状态被称之为运行态,即 CPU 的使用权被这个任务占用。
Ready—就绪态
处于就绪态的任务是指那些能够运行(没有被阻塞和挂起),但是当前没有运行的任务,因为同优先级或更高优先级的任务正在运行。
Blocked—阻塞态
由于等待信号量,消息队列,事件标志组等而处于的状态被称之为阻塞态,另外任务调用延迟函数也会处于阻塞态。
Suspended—挂起态
类似阻塞态,通过调用函数 vTaskSuspend()对指定任务进行挂起,挂起后这个任务将不被执行,只有调用函数 xTaskResume()才可以将这个任务从挂起态恢复。
- RTOS除了时间轮换还有没有别的调度方式
这个记不太清楚,我说在FreeRTOSconfig.h文件里可以对轮转进行修改
通过资料收集:FreeRTOS支持的任务调度方法有抢占式、协作式、时间片轮转
FreeRTOS就是一款支持多任务运行的实时操作系统,具有时间片、抢占式和合作式三种调度方式。
合作式调度,主要用在资源有限的设备上面,现在已经很少使用了。出于这个原因,后面的FreeRTOS版本中不会将合作式调度删除掉,但也不会再进行升级了。
抢占式调度,每个任务都有不同的优先级,任务会一直运行直到被高优先级任务抢占或者遇到阻塞式的 API 函数,比如 vTaskDelay。
时间片调度,每个任务都有相同的优先级,任务会运行固定的时间片个数或者遇到阻塞式的 API函数,比如vTaskDelay,才会执行同优先级任务之间的任务切换。
讲一下中断优先级和任务调度的区别(不记得是不是这个了,当时没听懂)
我没听懂面试官具体想问什么,不知道是不是想问前后台编程和实时操作系统的优缺点。因为感觉没什么关系想不到怎么回答
讲一下中断的过程
回答:中断源触发后,写中断的标志位,当CPU读取到中断标志位以后,跳转执行中断服务函数,同时保存当前工作环境到堆栈中,
运行完成后,清除中断标志位以便下次中断能触发。同时恢复之前的工作环境,将PC指针重新指向原先程序的位置。
如果中断过程中有更高优先级的任务抢占,就会执行该中断服务函数,称作中断嵌套。有没有用过SPI协议的设备?
回答:用过一个nrf的2.4GHz的无线通信模块。
讲一下SPI的通信过程,以及SPI的时序
回答:首先讲了SPI用了SS,MISO,MOSI,SCLK四根线。
通信过程首先需要对该设备进行寻址,寻址方式为SS寻址线拉低。寻址完成后,根据时钟线的边沿触发,读取信号线上的数据。SPI怎么配置成单向通信,配置成单向通信以后设备怎么读写?
回答:另一根线不配置不就是单向通信了。(读写那里忘记哪一个bit位是读写操作了,面试过程中最失败的一点)
了解数据结构吗,讲一下你了解的数据结构类型
链表、双向链表、队列、栈、二叉树(好像少讲了几个)
讲一下平衡二叉树
数据结构知识有点薄弱
了解CAN总线吗
知道,但是不了解
讲一下CAN总线时序
?
怎么移植的FreeRTOS,移植并写到单片机前的过程
恩师韦东山,直接下载官方的文件,裁剪它的DEMO项目变成我的基础项目。
移植到单片机上首先要改Keil上的单片机型号,然后把时钟频率改了,然后启动文件改成适配单片机的文件。volite关键字的作用,用在哪里
八股文,防止编译器优化。用在经常要读写的地方,如中断和主函数通用的变量;还用在了寄存器的指向上。
ADC采样的过程
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以邮件至 1186703947@qq.com