新凯来 嵌入式软件开发 一面 感觉还行

投了新凯来的嵌入式软件开发岗,没想到一面就挺有深度的,面试官很专业,问的方向偏底层驱动和系统,基本上把嵌入式的核心知识点都覆盖了一遍。整体节奏不算快,但每道题都会追问细节,感觉不背八股是真的过不去,建议大家好好准备一下原理性的东西,光会用不够。

总结

  1. 嵌入式系统启动流程是怎样的?从芯片上电到main函数执行,中间经历了哪些关键步骤?
  2. 讲一下你用过的RTOS,它的任务调度机制是怎样的?如何保证实时性?
  3. volatile关键字的作用是什么?在嵌入式开发中哪些场景下必须使用它?
  4. DMA是什么?在什么场景下使用DMA可以显著提升系统性能?
  5. I2C、SPI、UART三种通信协议各有什么特点?分别适用于哪些场景?
  6. 中断服务程序(ISR)设计有哪些基本原则?为什么不建议在ISR中做复杂操作?
  7. 看门狗定时器的原理是什么?程序"跑飞"和陷入死循环时,看门狗分别能起到什么作用?
  8. 在资源受限的嵌入式环境下,程序出现偶发性死机且无法连接调试器,你会怎么排查?
  9. 如何在电池供电设备中降低系统功耗?软件和硬件层面分别有哪些手段?
  10. 你有使用过JTAG或SWD进行调试的经验吗?除了下载程序,还用过哪些调试功能?
  11. 嵌入式Linux和裸机开发有什么本质区别?各自适用于什么场景?
  12. 讲一下你对内存管理的理解,栈和堆在嵌入式中分别怎么用?需要注意什么?

总结

整体来说一面考察的是嵌入式基本功,没有太偏的题,但每道都要求说清楚原理。建议重点复习RTOS调度、中断机制、通信协议和低功耗设计这几块,追问会比较深。面试官态度挺好的,氛围不压抑,正常发挥应该没问题,加油!

核心嵌入式面试八股文总结:https://www.nowcoder.com/creation/manager/columnDetail/mPZ4kk

必备嵌入式八股文

🔸 嵌入式启动流程

芯片上电后依次经历:上电复位 → 执行BootROM中的启动代码 → 初始化时钟/堆栈/BSS段/data段 → 跳转到main函数。其中BSS段(未初始化全局变量)会被清零,data段(已初始化全局变量)会从Flash拷贝到RAM。

🔸 volatile关键字

告诉编译器该变量可能被外部因素修改,禁止对其进行优化(如缓存到寄存器)。必须使用的场景:

  • 内存映射的硬件寄存器
  • 中断服务程序中修改的全局变量
  • 多线程共享变量(配合原子操作或锁使用)

🔸 中断处理原则

ISR要尽量短,只做标志位置位或数据搬运,复杂逻辑放到主循环或任务中处理。原因是ISR执行期间会屏蔽同级或低级中断,执行时间过长会影响系统实时性。

🔸 RTOS核心概念

  • 任务调度:抢占式调度中高优先级任务可打断低优先级任务;时间片轮转用于同优先级任务
  • 任务间通信:消息队列、信号量、互斥锁、事件标志组
  • 优先级反转:低优先级任务持有高优先级任务需要的锁,导致高优先级任务被阻塞。解决方案是优先级继承协议

🔸 三大通信协议对比

UART

2

无主从

串口调试、模块通信

I2C

2

一主多从

传感器、EEPROM

SPI

4

一主多从

Flash、显示屏、ADC

🔸 DMA原理

DMA(直接内存访问)允许外设和内存之间直接传输数据,不经过CPU。CPU只需配置好源地址、目标地址和传输长度,传输完成后DMA触发中断通知CPU。适合大块数据搬运,如ADC采样、串口收发、图像处理。

🔸 低功耗设计

软件层面:关闭不用的外设时钟、使用睡眠/深度睡眠模式、降低主频、减少轮询改用中断唤醒。硬件层面:选低功耗MCU、降低工作电压、外设供电分区控制。

🔸 内存布局

嵌入式程序内存分区:

  • Text段:代码,存Flash
  • Data段:已初始化全局/静态变量,运行时在RAM
  • BSS段:未初始化全局/静态变量,运行时在RAM,启动时清零
  • Stack:局部变量,向下增长,大小固定
  • Heap:动态分配,嵌入式中尽量少用,容易碎片化

🔸 看门狗

独立看门狗(IWDG)由独立时钟驱动,即使主时钟挂掉也能复位系统,适合防止程序跑飞。窗口看门狗(WWDG)要求在特定时间窗口内喂狗,太早或太晚都会触发复位,适合检测程序时序异常。

全部评论
咋有种新凯来一直在招人的感觉
4 回复 分享
发布于 04-08 21:49 陕西
最后有消息了没
1 回复 分享
发布于 04-04 13:45 辽宁
好奇这家招多少人,这家的面经是真的多啊
点赞 回复 分享
发布于 04-05 21:19 陕西
最后通过了吗
点赞 回复 分享
发布于 04-03 23:19 北京
感觉问的还天多的
点赞 回复 分享
发布于 04-03 23:19 北京

相关推荐

05-24 16:55
浙江大学 C++
最近复盘面试的时候,我越来越明显地感觉到一件事:面试里“稳”这个东西,真的不完全等于项目有多强。有些人项目经历看下来其实不算特别炸裂,做的东西也未必比别人复杂多少,但一开口就会让人感觉很舒服。不是那种特别会包装、特别会吹的感觉,而是他说话的时候,你能明显感觉到他脑子里是有线的,知道自己在讲什么,也知道面试官为什么会问这个。反过来,有些人项目其实不差,甚至做过的东西更多,但一到面试里就是会显得虚。不是不会,而是讲出来的时候很散,东一句西一句,重点也不明确。我后来慢慢发现,那种“让人觉得稳”的表达,通常都有几个共同点。第一是他说问题的时候,不会一上来就堆名词。很多人讲项目特别喜欢先报菜名,什么用了RAG、用了Multi-Agent、用了Tool Calling、用了向量库,听起来很满,但其实听完之后你还是不知道这个项目到底解决了什么问题。相对稳的人一般不是这么讲的,他会先把背景和目标说清楚,再去讲方案。这样哪怕项目本身没那么复杂,也会显得非常清楚。第二是他会自然带出“为什么”。这一点我觉得特别关键。很多时候面试官并不是想听你做了什么,而是想听你为什么这么做。比如为什么要拆成多个Agent,为什么这里要加RAG,为什么不用更简单的办法。如果一个人回答里经常能自己把“为什么”带出来,会很容易让人觉得他不是在背,而是真的理解过这套东西。第三是他讲的时候是有边界感的。这个其实很容易被忽略。有些人一回答问题就越说越多,生怕漏掉,最后把自己绕进去。稳的人反而通常会先把问题收住,先给一个比较清楚的主线,再根据面试官反应决定要不要往下展开。你会觉得他不是在拼命证明自己懂很多,而是在很自然地把自己最核心的理解交代出来。第四是他对“不完美”这件事是有准备的。这个特别真实。项目里很多东西本来就不可能设计得特别完美,面试官也知道。所以真正让人觉得稳的,不是你把方案吹得毫无缺点,而是你能承认它有什么限制、当时为什么这么取舍、如果继续做你会往哪改。这个反而比一味说自己方案多好更有说服力。我自己前几次面试最明显的问题,其实就是项目不算太差,但讲出来没有那种“稳感”。脑子里是有内容的,但一开口就开始担心自己讲不全,于是拼命往里面塞东西,最后反而把重点冲掉了。项目强不强当然重要,但能不能把一个项目讲得有主线、有取舍、有边界,很多时候更直接影响面试体验。尤其是这种本身就容易被往深了问的岗位,如果你一开口就能让对方感觉到你不是在堆概念,而是在讲一个自己真的理解过的系统,后面的很多问题其实都会顺很多。有时候面试官觉得你“稳”,不一定是因为你什么都会,而是因为你让他相信:你知道自己会什么,也知道自己不会什么
点赞 评论 收藏
分享
评论
12
56
分享

创作者周榜

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