概述
毕业一年多了,从事嵌入式开发工作不知不觉也一年多了,题主主要从事单片机(STM32)应用开发工业类电子方向,纯技术涉及到的内容主要是C语言、arm、STM32驱动、FreeRTOS、Lwip等等。电子电气方向涉及到的主要是:485、232、串口、DCDCACDC、网络通信、数据处理。这次换工作面了很多大厂,对面试做总结。
C语言:
1.static 关键字的作用、使用方式:
static 关键字代表静态申明,静态顾名思义只能在内部进行使用,使用方式为三种:全局静态变量、局部静态变量、静态函数。
使用范围。
全局静态变量:
全局静态变量使用范围是该.c文件所有位置。
局部静态变量:
局部静态变量使用范围是该函数,且只会在初始化时申明一次,后续变化只能通过赋值。
静态函数:
函数调用范围只限制于该.c。
2.volatile关键字的作用:
笼统的讲,volatile关键字就是让程序每次都去寄存器中获取该字段的值,保证了数据变量的准确性。
什么时候用到该关键字?
1.变量是全局变量,且多个线程同时操作该变量的时候。
2.中断中处理的数据变量。
3.硬件寄存器中的数据。
3.const关键字的作用:
只读。 简单的说就是就初始化声明一次,后续都不能进行操作。
4.main函数之前进行了什么操作?
这个我是真的不会,被问懵逼了。
附上网友答案:
main函数之前做了什么?_hjx5200的博客-CSDN博客
简单来说就是各种初始化操作。
5.堆和栈有什么区别?
内容太多,自己看。
什么是堆?什么是栈?他们之间有什么区别和联系? - 知乎
STM32:
1.串口数据接收是怎么处理的?
串口数据处理有两种方式:
1.通过串口中断接收到数据后,将数据放置环形缓存或队列中,待数据处理函数进行处理时进行处理。(RTOS)
2.通过轮询,时间片方式调度串口寄存器判断是否有数据,有数据则放入缓存待处理。(裸机)
FreeRTOS:
1.简述一下什么是RTOS系统
FreeRTOS为例,RTOS系统是以抢占优先级为主,时间片为辅实现任务调度的操作系统,主要核心上实现的是任务调度的功能,使任务具有实时性。
2.在任务中怎么进行数据传输?什么方式?
任务间数据传输一共有三种形式,用的最多的是消息队列,其次是全局变量和信号量。
1.消息队列发送数据的方式可以是发送数据本身和发送数据的地址指针。
2.全局变量使用供所有任务获取和处理,但全局变量占用内存较多,而且不好管理。
3.信号量一般作为标志位使用。
3.阐述信号量的作用,信号量的类型
信号量共有三种,二值信号量、计数信号量、互斥信号量,常用的是二值信号量和互斥信号量。
信号量本质上都是深度为1的消息队列。
二值信号量通常在中断中作为标志位使用,起到线程同步的作用。
互斥信号量作为互斥锁使用。防止不同线程访问同个内存。
4.FreeRTOS有多少个优先级?任务优先级和系统优先级是什么关系?
FreeRTOS一共有32个任务优先级,但实际使用的优先级个数通过系统设置使用。
系统优先级NVIC基于RAM架构,优先级最高,是一切中断的基石。任务优先级基于FreeRTOS,和系统优先级无关。
5.如何处理优先级反转问题?
FreeRTOS 之 优先级翻转 - 简书
更新:最近面了某大厂,感觉有工作经验了就不注意基础,结果这次被问懵逼了,错失了机会。
2022.05.19
6.请阐述一下串口发送接收从链路层到应用层的过程。
其实这个问题我都不理解面试官到底想要什么答案,感觉就中断接收后数据放到缓存中,然后从缓存中取数据进行处理,我的理解就是这样,但是面试官并不满意这个答案,所以我一脸懵逼,不知道想问什么,还是自己太菜了吧。
7.请阐述一下网络的层级架构
这个就是OSI7层架构的阐述,毕业就没再看过了,真的时间太久了,7层根本就说不全。。
8.指针数组和数组指针有区别吗?如果有区别的话,区别是什么呢?
这个确实是个好问题,但因为从没看过,还是不会。。
正确答案:
指针数组是指是数组中存的都是指针变量如下图:
数组指针指的是一个指针变量,这个指针指向一个数组。
其他的区别就是sizeof()他们的大小不同,这个Int变量的数组指针的大小是4字节,而指针数组的大小是该数组的变量多少决定的。
还问了之前更新的一些内容,答得还不错就没印象了。剩下的就针对个人项目经历针对的问问题。
这次面试真的是血的教训,无论已经拥有了多少年工作经验,基础都是重中之重,以后再也不没复习就去面试了。。错失了一次比较不错的机会,有些可惜。
最后
以上就是清脆小白菜为你收集整理的嵌入式面试总结STM32:FreeRTOS:的全部内容,希望文章能够帮你解决嵌入式面试总结STM32:FreeRTOS:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复