有担当的芝士在午休 level
获赞
381
粉丝
91
关注
0
看过 TA
1156
湖南大学
2026
嵌入式软件开发
IP属地:湖南
暂未填写个人简介
私信
关注
项目相关问题:多级菜单界面框架搭建: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配置文件启用检测
面试问题记录
0 点赞 评论 收藏
分享
11-12 20:07
已编辑
湖南大学 嵌入式软件开发
寄完了,只剩实习转正保底。主要是linux+soc方向岗位,少量mcu+rtos方向,少量算法方向。面筋1、嵌入式linux的启动过程?想linux启动之后执行一些服务的话,能通过什么方式?2、为什么要用uboot,不能直接启动linux内核吗?3、Select和epoll的区别?4、TCP和UDP的区别?TCP\UDP报文头部开销为多少?5、什么叫面向连接和面向非连接?6、介绍一下TCP的拥塞控制机制?7、说一下自己熟悉的排序算法,讲一下其中的一个复杂度?8、二叉树、平衡树、红黑树怎么理解?9、树的平衡有什么用?10、堆和栈的区别?11、进程和线程的区别?12、进程/线程具体是怎么实现的?13、介绍SPI,怎么给某一个地址发数据?14、设备和驱动是如何匹配的,匹配后做什么?15、写一个通用的字符设备驱动程序,需要实现哪些接口?16、主次设备号是什么?17、Linux虚拟内存管理,虚拟地址如何转化为物理地址?18、fopen和open的区别?19、讲一下什么是交叉编译?20、讲一下中断流程,区分硬件中断和软件中断。21、IIC原理,如何保证数据的准确性,最多挂载多少个设备,为什么要接上拉电阻?22、串口通信原理,如何保证串口通信成功,如何修改波特率,说一下串口的缓冲区管理?23、发生死锁的条件、怎么避免死锁?24、DMA配置过程,如何通过DMA实现高效的SPI数据传输?25、什么是中断优先级?如何在嵌入式系统中管理中断优先级?如何防止中断嵌套导致系统死锁?26、如何调试和优化一个性能较差的Linux驱动程序?27、解释RTOS中任务调度器的作用?28、如何编写一个Linux应用程序来读写GPIO输入输出?29、如何使用epoll实现高效的IO多路复用?30、如何在Linux应用中处理信号和中断?信号和中断的区别是什么?31、如何在Linux上实现守护进程?32、如何调试在Linux上崩溃的嵌入式应用程序?33、http和https的区别?34、进程间通讯的方式有哪些,有什么优缺点,适合什么场景?35、数据结构有哪些?36、数组和链表的区别?什么时候用数组,什么时候用链表?37、经常要进行增删改查的数据用什么存储?38、如何理解操作系统?39、两个线程操作同一个变量多次后会发生什么情况?40、为什么要用RTOS?有什么意义?为什么能加快效率?41、fork()如何创建子进程?什么是写时复制?什么是零拷贝?42、define\const\typedef的区别?43、GPIO的模式有哪几种?44、Linux内存分配的几个函数(kmalloc()\kzalloc()\vmalloc())?kzalloc 是强制清零的 kmalloc 操作;(以下描述不区分 kmalloc 和 kzalloc)kmalloc 分配的内存大小有限制(128KB),而 vmalloc 没有限制;kmalloc 可以保证分配的内存物理地址是连续的,但是 vmalloc 不能保证;kmalloc 分配内存的过程可以是原子过程(使用 GFP_ATOMIC),而 vmalloc 分配内存时则可能产生阻塞;kmalloc 分配内存的开销小,因此 kmalloc 比 vmalloc 要快;45、wait()/waitpid()的区别?46、什么是 inode、block、sector?47、Linux常见的信号有哪些?接收到信号后怎么处理?48、什么是线程池?49、Linux网络编程流程,讲一下服务端与epoll结合的编写流程。50、讲一下FreeRTOS的内存管理。51、讲一下FreeRTOS的启动流程。禁止全局中断: 通常会调用一个与平台相关的函数来禁止全局中断,例如 portDISABLE_INTERRUPTS()。 这是为了防止在初始化 FreeRTOS 的内部数据结构时发生中断,导致数据不一致。设置系统时钟: 初始化 FreeRTOS 的系统时钟,通常会调用 xPortSysTickHandler(),并将其与 SysTick 中断关联。创建空闲任务 (Idle Task): 空闲任务是 FreeRTOS 中优先级最低的任务,当没有其他任务可以运行时,空闲任务就会运行。空闲任务的主要作用是回收被删除的任务所占用的内存。创建第一个任务: 选择就绪列表中优先级最高的任务,并将其状态设置为运行状态 (Running)。启动 PendSV 中断: 配置 PendSV 中断,并触发它。 PendSV 中断用于进行任务切换。恢复中断: 启用全局中断,例如 portENABLE_INTERRUPTS()。进入第一个任务: 通过某种方式(通常是汇编代码),将 CPU 的控制权交给第一个任务。 这涉及到加载任务的栈指针、程序计数器等寄存器。52、DMA和cache一致性问题怎么解决?Cache Flush 操作: 指的是将 CPU Cache 中的数据写回主内存,并使相应的缓存行无效。dma_sync_single_for_cpu(): 在 DMA 传输完成后,将 DMA 操作影响的内存区域中的数据从设备缓存同步到 CPU Cache。 适用于 DMA 写入内存 (从设备到内存) 的情况,确保 CPU 可以读取到 DMA 写入的最新数据。dma_sync_single_for_device(): 在 DMA 传输开始前,将 CPU Cache 中的数据写回主内存,并使相应的缓存行无效。 适用于 DMA 从内存读取数据 (从内存到设备) 的情况,确保 DMA 设备读取到最新的数据,而不是过时的 Cache 数据。Cache 一致性管理: 一些 IOMMU 可以通过硬件方式来管理 DMA 设备和 CPU Cache 之间的数据一致性。 例如,IOMMU 可以监听 DMA 设备的内存访问,并自动使 CPU Cache 中相应的缓存行无效。53、在驱动中,物理地址向虚拟地址的转换接口是什么?ioremap()传参为实际物理地址起始地址和地址范围大小54、ioremap和iommu的区别是什么?55、讲一下硬件i2c和软件i2c。56、模块状态是什么?未加载;加载中(modprobe);初始化;运行中;卸载中(rmmod);已卸载57、静态加载和动态加载的区别?58、Uboot怎么配置的?59、知道uboot之前还有一段流程吗?基本的硬件初始化:时钟初始化: 设置 CPU 和外设的时钟频率。电压调节: 调整 CPU 和内存的电压。DRAM 初始化: 初始化 DRAM 控制器,以便后续的内存访问。 这通常是极其关键的一步。最小化的存储器访问: 可能需要配置 SPI Flash 或其他类型的存储器,以便从那里加载后续的引导加载程序。安全启动 (Secure Boot): 验证 U-Boot 镜像的签名,防止恶意代码启动。 (如果使能了安全启动)选择启动设备: 确定从哪个存储设备 (例如 Flash、SD 卡、网络) 启动。加载 SPL (Secondary Program Loader): 将 SPL 从存储设备加载到 RAM 中。跳转到 SPL: 将 CPU 的执行权交给 SPL。60、内核为什么存放在0x30008000中呢,而uboot存放在0x0000处,其中这些地址存放了些什么?字数限制,还有很多下一次更新写上来
面试问题记录
0 点赞 评论 收藏
分享
05-14 15:43
已编辑
湖南大学 嵌入式软件开发
中大厂有嵌入式相关的岗位基本都报了,一直到四月底才有几个面试。有面试:cvte,海康威视,景嘉微,零跑,高通;其中就cvte和高通oc了。海康八股准备不充分挂了,零跑电话面面试官一个劲的夸我优秀,结果后面也没啥消息。最终决定去高通了,具体流程看上贴,面不在多,有一个就行高通面筋网上是真的少,基本找不到几个,遂记录一下,高通面筋:6、linux内核空间和用户空间的通讯方式7、为什么中断不能睡眠8、内核的内存分配方式(伙伴系统、slab等等)9、kmalloc最小内存分配,预期分配128字节实际多少?10、define和const区别,分别什么时候生效?11、了解大小端吗,大小端的区别?12、cache一致性?13、cache的三级缓存知道吗?14、堆栈区别?15、介绍一下DMA?具体原理是什么?16、虚拟地址到物理地址的转换?17、MMU的具体工作流程?页表大小?18、进程的上下文具体指什么?19、char const* p有什么特点?地址变吗?20、Static、volatile的作用?21、结构体和联合体的区别?c语言位段了解吗?22、Define和typedef的区别?23、C语言函数里面如何定义多个名字相同的变量?变量作用域?比如for里面进行定义变量?24、c的函数的入参是存放在哪里?所有入参都是栈吗?25、栈是系统哪里分配的?26、c语言位段了解吗?27、define宏为什么要加括号?28、锁的类型有哪些?29、系统调用用户态到内核态会发生什么?30、linux进程通讯方式?31、linux内核如何获取用户态pid?32、linux内核调度机制?33、linux驱动第一个被执行的函数如何实现?为什么有了__init和__exit就会去执行对应的函数?34、32位的linux的虚拟内存空间的分布情况?高端内存映射区是什么?他的地址是什么?35、用户态堆栈在系统调用时会发生什么变化吗?36、Arm v8 有多少个寄存器?有几种模式?异常等级有几种?工作模式有哪些?arm上电复位后进入哪种模式?37、知道哪些调试方法?gdb调试怎么调用函数?怎么设置打印16位的变量?怎么跟踪变量,变量值改变时自动提示?如何设置断点?死机重启怎么调试?38、知道trace调试吗,知道怎么用吗?39、Linux操作系统的三大块了解吗?40、现在让你开展一个项目,主要负责生物语言识别,你该怎么开展,需要考虑哪些因素?英文问题:1、什么时候毕业?2、毕业了什么时候能到岗?3、有那么多候选人,给我几个理由让我把offer给你?还有很多基础问题就没写了
硬件灵魂工程师:佬,你这问题我几乎一个都答不上来
面试问题记录
0 点赞 评论 收藏
分享

创作者周榜

更多
关注他的用户也关注了:
牛客网
牛客网在线编程
牛客网题解
牛客企业服务