嵌软秋招两万字八股文汇总(三)

项目相关问题:
多级菜单界面框架搭建:
1、请详细描述你设计的基于树状多分支链表的菜单结构,包括节点的数据结构和链表的组织方式。你是如何选择这种数据结构的?有什么优点和缺点?
答:Page结构体介绍
2、你是如何将系统功能和参数配置与菜单节点关联起来的?详细描述菜单节点的处理函数,以及处理函数是如何响应用户操作的。
答:判断下一结点是否为空,为空执行结构体里对应的函数
3、详细解释你如何配置和使用外部中断来驱动按键扫描。中断服务程序(ISR)中做了哪些工作?
答:使能GPIO时钟: 配置GPIO为输入模式,使能外部中断,中断模式、引脚映射,配置中断控制器设置中断优先级。中断服务程序 (ISR) 清除中断标志读取按键状态消抖,执行按键处理逻辑:
4、你如何保证按键事件的可靠性,避免抖动和误触发?
答:开始使用延时的方式消抖,后使用状态机方式提升效率。
IDLE (空闲): 按键未按下状态。
PRESSING (按下检测): 检测到按键按下,进入此状态,开始计数。
PRESSED (按下): 确认按键已经按下。
RELEASING (释放检测): 检测到按键释放,进入此状态,开始计数。
RELEASED (释放): 确认按键已经释放。
5、你是如何测量界面响应速度的?“响应速度提升了20%”这个数据是如何得出的?请描述你的测试方法和评估指标。
软件计时,使用时间戳计算。
6、如果系统负载较高,导致中断响应延迟,你如何处理?
答:优化中断优先级(避免优先级反转): 缩短中断服务程序 (ISR) 的执行时间(避免中断使用阻塞函数;使用DMA;避免使用浮点运算):优化任务调度(多级反馈轮转调度算法):
7、怎么提高屏幕刷新率?
提高时钟频率、双缓冲、DMA

数据采集与参数管理:
1、为什么选择DMA方式进行数据传输?相比于中断方式,DMA的优势在哪里?
多个传感器、数据量较大。中断要cpu介入,频繁中断会加大cpu开销。DMA无需cpu,只需要完成传输的时候给cpu完成信号。减轻cpu负担、提高数据传输效率
2、描述一下你是如何配置定时器,使其能够精确触发ADC进行数据采集的?adc用定时器触发和自己周期触发有什么区别?
周期性触发模式、配准分频和计数周期,使其大于adc转化时间,连接定时器输出比较通道到 ADC 触发输入。采样频率不稳定: 容易受到系统负载和中断的影响,实际采样频率可能不均匀,导致采样数据不准确。 因为其他任务会抢占ADC的执行时间,导致采样周期不固定
CPU占用率较高: 通常需要轮询 ADC 的转换完成标志位来读取数据,CPU 必须不断查询 ADC 的状态,占用 CPU 资源。 也可以用中断,但是频繁中断会导致CPU的负担
3、你是如何配置ADC以实现多通道扫描的?ADC怎么转化为数据?
开启扫描模式,关闭连续转化模式使用外部触发。读取电压、量化、转化、根据手册再进一步进行转换。
4、数据采集效率提升35%这个数据是如何得到的?你是如何进行测试和验证的?
十秒内采集到的数据个数
5、DMA在进行多通道数据采集时,你是如何组织和存储数据的?有没有考虑过数据对齐的问题?
交错存储,双缓冲区;数组数据类型和存入数据的类型一样
6、描述一下I2C协议的工作原理?I2C总线上有哪些关键信号?
7、如何确保I2C通信的可靠性?有没有进行错误处理?
ACK/NACK 检查、超时机制、超时重发、软件复位
8、EEPROM中存储了哪些类型的参数?为什么选择EEPROM而不是Flash来存储参数?
擦写寿命高、单位是字节、存储容量小
9、如果EEPROM的存储空间不足,你会如何解决?
换容量更大的或者别的存储介质如flash,数据覆盖

远程控制与状态监控
1、常用的 AT 指令有哪些? 比如建立连接,数据发送接收,断开连接的指令你是如何使用的?举例说明。
AT+一个指令,收到数据会返回CONNECT OK,判断返回数据确认是否发送成功
2、如何保证 AT 指令通信的可靠性? 你采取了哪些措施来处理可能的错误?
返回数据判断、超时处理
3、TCP 和 UDP 的区别是什么? 在这个项目中,为什么选择 TCP 而不是 UDP?
4、描述一下 TCP 三次握手和四次挥手的过程? 为什么要进行三次握手和四次挥手?
5、你是如何将设备运行状态从 STM32 传递到微信小程序?
6、波特率是什么意思? 如何设置 UART 的波特率? 波特率设置错误会导致什么问题?
每秒传输的bit数,配置uart结构体,数据损坏乱码
7、请解释一下 UART 的工作原理? UART 包括哪些主要的信号线
有时候有请求发送和清除发送数据线,用于硬件流控制,以防止数据溢出。

FreeRTOS任务调度与优化
1、请你详细解释一下 FreeRTOS 的任务调度机制,包括优先级和时间片的概念。在实际项目中,你是如何确定任务优先级的?
2、假设你需要在 FreeRTOS 中创建一个周期性执行的任务,你会如何实现?你会考虑哪些因素来选择合适的实现方法(例如使用 vTaskDelayUntil() vs vTaskDelay())?
3、请描述一下你使用队列解决过哪些具体问题?为什么选择队列而不是其他 IPC (Inter-Process Communication) 机制?
4G模块数据接受和参数设置任务的数据传输;队列异步,缓冲,适用于数据传输;
4、FreeRTOS 的任务通知机制(Event Groups)与信号量(Semaphores)在任务同步方面有什么区别?在什么情况下你会选择使用事件通知而不是信号量?请举例说明。
事件组主要用于任务需要等待多个事件组合的场景。
任务通知适用于一对一的任务同步或需要传递少量数据的情况,效率更高,并且可以避免优先级反转问题。
信号量适用于需要控制对共享资源的访问或需要按照特定顺序执行任务的情况,或者需要多个任务同步的情况。
5、互斥锁在 FreeRTOS 中用于保护共享资源。请描述一下死锁(Deadlock)的概念,以及在使用互斥锁时如何避免死锁?你是否有遇到过死锁的情况?你是如何解决的?
锁排序、超时机制、优先级反转避免、FreeRTOS+Trace、vTaskList()
6、在使用队列时,如何避免队列满或队列空的情况?
设置超时时间,满空是会阻塞,taskdelay,减小速度,调整长度
7、你是如何调试 FreeRTOS 程序的?
ST-Link、FreeRTOS+Trace、串口调试、GDB、vTaskList();检测堆栈溢出用钩子函数:改config配置文件启用检测

#面试问题记录#
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务