2024年嵌入式面试试题(附答案).docxVIP

  • 0
  • 0
  • 约6.37千字
  • 约 16页
  • 2026-08-28 发布于河南
  • 举报

2024年嵌入式面试试题(附答案)

1.请说明C语言中volatile关键字的作用,以及常见使用场景,它能否保证变量操作的原子性?

答:volatile关键字的核心作用是告知编译器不对该变量进行读写优化,每次对该变量的读写操作都必须从其对应的内存地址中存取,不能将变量的值缓存在通用寄存器中做优化处理。常见使用场景包括三类:①硬件外设的状态寄存器/控制寄存器:这类寄存器的值会随硬件状态动态变化,每次读写都必须从实际内存地址获取,不能缓存;②中断服务程序中修改、主程序中会访问的全局变量:如果不加volatile,编译器会认为该变量不会被修改,优化后主程序只会读取一次寄存器缓存的值,无法感知中断中修改的变化;③多任务实时系统中,多个任务共享访问的全局变量:避免编译器优化导致任务无法感知其他任务对变量的修改。需要注意的是,C语言中的volatile无法保证变量操作的原子性,也不能阻止编译器的指令重排,仅能禁止读写缓存优化,若要保证原子性需要额外加互斥锁或利用CPU的原子操作指令实现。

2.宏define与const修饰的常量有什么区别?

答:二者核心区别如下:①处理阶段不同:define是预处理阶段完成文本替换,不对内容做编译处理;const是编译阶段处理,会参与编译检查;②类型检查不同:define没有类型信息,仅做纯文本替换,不会做类型检查,容易引发隐式类型错误;const有明确的

文档评论(0)

1亿VIP精品文档

相关文档