嵌入式面试问题分享

1. **volatile是否可以修饰const**
- 可以,`volatile const`用于描述那些在程序运行过程中其值可能被外部因素(如硬件或并发线程)改变,但又不允许程序修改的变量。

2. **如何快速一行代码操作硬件寄存器**
- 使用位带操作或直接对寄存器地址进行读写,例如:`*(volatile uint32_t *)(0x40021000 + 0x04) |= (1 << 3);`

3. **如何最快比较两组寄存器里有多少位不同**
- 使用异或运算,然后计算结果中的1的个数,可以使用位计数指令如`popcnt`。

4. **如何降低功耗**
- 关闭未使用的外设,使用低功耗模式,优化代码减少处理器空闲等待。

5. **什么时候会用到do{}while(0)**
- 构造宏时确保代码块的正确性,防止意外的分号导致宏展开错误。

6. **GPIO有几种状态**
- 输入、输出、高阻态、上拉、下拉等。

7. **如何用软件处理硬件管脚抖动**
- 使用软件延时滤波或状态机检测稳定状态。

8. **如何高效处理中断**
- 设置中断优先级,避免中断嵌套,最小化中断服务例程的执行时间。

9. **delay和sleep的区别**
- `delay`通常阻塞当前执行流,`sleep`可能涉及系统调用,让出CPU。

10. **中断时可否睡眠**
- 不推荐,中断应尽快返回,不应做长时间操作。

11. **如何设计RAM和flash的验证工具**
- 使用CRC校验和、MD5哈希或其他完整性检查算法。

12. **如何合理高效静态分配内存**
- 根据最大需求预分配,使用内存池减少碎片。

13. **如何跟踪内存泄漏**
- 使用动态内存管理库提供的统计功能或专门的内存泄漏检测工具。

14. **如何实现一个ring buffer以及用途**
- 实现循环指针和头尾指针,用于缓冲区,用于数据流处理和通信。

15. **DMA和FIFO的区别**
- DMA用于数据传输,FIFO是一种存储结构,DMA可以利用FIFO作为缓冲。

16. **如何做到统一API对接不同外设驱动**
- 设计抽象层,提供通用接口。

17. **如何合理设计flash分区表**
- 考虑应用需求、更新策略、磨损均衡和冗余。

18. **正常非掉电重启是否要释放内存**
- 重启前释放资源有助于系统的稳定性和初始化。

19. **正常掉电关机流程是否要释放内存**
- 同上,但要考虑持久性数据的保存。

20. **非掉电异常如何处理**
- 异常处理程序捕获异常,记录错误,尝试恢复或重启。

21. **如何实现异常后的dump**
- 记录关键寄存器和内存状态,保存在非易失存储中。

22. **非正常掉电如何保护**
- 使用UPS或电池备份,存储关键数据到非易失存储。

23. **如何设计一个简单的profiling工具**
- 记录函数调用时间和次数,分析性能瓶颈。

24. **低功耗深睡眠如何唤醒后继续之前工作**
- 保存状态到非易失存储,唤醒后恢复状态。

25. **RTOS不能断点和打印的时候如何调试**
- 使用硬件调试器或日志记录和故障注入测试。

26. **什么是交叉编译**
- 在一个平台上生成另一个平台可执行代码的编译过程。

27. **如何保证makefile的增量编译**
- 使用依赖关系和文件时间戳。

28. **如何用一套代码支持不同硬件**
- 使用抽象层和条件编译。

29. **如何用一版软件支持不同硬件**
- 设计模块化架构,硬件无关接口。

30. **不同代码编译后的存放区域有何不同**
- 代码段、数据段、BSS段,根据类型和属性存放。

31. **release和debug编译的区别**
- Release优化代码,Debug包含调试信息和符号。

32. **ARM多核之间有多少通讯机制及优缺点**
- 共享内存、消息传递、中断,各有适用场景和效率差异。

33. **两个线程之间不同锁的区别是什么**
- 互斥锁、读写锁、自旋锁,适用于不同同步需求。

34. **如何理解收益边界**
- 性能提升与成本、复杂度之间的权衡点。

35. **介绍一下自己关于代码优化的经验**
- 分析热点,先考虑算法和数据结构,再进行微调。

36. **关于代码移植有什么经验分享**
- 尽早识别硬件特异性代码,使用标准库和接口,保持良好的编码规范

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值