FPGA实验小白
作为去年秋招上岸的过来人,分享一下我的经验。你提到的方向完全正确,芯片公司的嵌入式驱动岗,和做产品的公司侧重点很不一样。
核心就是两点:一是对芯片本身的理解,二是对软硬件接口的掌控。
笔试方面,C语言和数据结构是基础,但题目往往会结合硬件场景。比如让你写一个内存拷贝函数,然后追问在什么情况下需要 volatile,什么情况下需要内存屏障。操作系统会重点考进程线程同步(信号量、互斥锁在驱动中的使用)、内存管理(mmap、DMA缓存一致性)。
面试的重头戏绝对是外设驱动。I2C、SPI、UART这些是必问的,但不会只问协议。面试官喜欢问:如果I2C通信突然失败,你如何从软件和硬件角度一步步排查?SPI全双工和半双工在实际驱动代码实现上有什么区别?USB会问设备枚举过程、各种描述符,以及你可能需要自己实现一个HID或CDC驱动。
RTOS移植是加分项,特别是如果你简历上写了。会问你在移植FreeRTOS或RT-Thread时,需要修改哪些底层文件(通常是port.c和中断相关汇编),如何实现任务切换和时钟节拍。
硬件协同调试能力是芯片公司的特色考点。一定会问你怎么用JTAG调试,有没有用过Trace功能定位复杂时序问题。可能会给一个场景:系统偶尔死机,但断点打不上,你会用什么方法?答案可能涉及分析内核日志、使用ITM(Instrumentation Trace Macrocell)输出信息,或者用ETM(Embedded Trace Macrocell)抓取指令流。
高频考点还有:
1. 中断处理流程(上半部/下半部,tasklet,工作队列)。
2. Linux设备模型(platform device/driver,设备树DTS的编写与解析)。
3. 并发与竞态问题的解决(自旋锁、信号量在中断上下文和非中断上下文的区别)。
4. 芯片启动流程(从BootROM到Uboot到内核)。
建议你找一些知名芯片公司(如NXP、ST、全志、瑞芯微等)的公开笔试题看看,再在GitHub上找一些简单的驱动代码(比如LED、按键)自己动手写一遍,理解框架比死记硬背强得多。
