20个嵌入式工程师常见面试题(内附答案)_第1页
20个嵌入式工程师常见面试题(内附答案)_第2页
20个嵌入式工程师常见面试题(内附答案)_第3页
20个嵌入式工程师常见面试题(内附答案)_第4页
20个嵌入式工程师常见面试题(内附答案)_第5页
已阅读5页,还剩6页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

20个嵌入式工程师常见面试题(内附答案)一、单项选择题(每题2分,共10题,共20分)1.下列哪个关键字用于告诉编译器“该变量可能被硬件或中断服务程序修改,禁止编译器对其进行优化缓存”?A.constB.staticC.volatileD.extern2.在32位嵌入式系统中,一个指向char类型的指针变量通常在内存中占用的字节数为:A.1B.2C.4D.83.下列关于栈(stack)和堆(heap)的描述,错误的是:A.栈由编译器自动分配和释放,用于存放局部变量B.堆由程序员手动分配和释放,生命周期由程序员控制C.栈的生长方向通常是向高地址增长D.堆容易产生内存碎片4.在I2C总线中,SCL和SDA线通常需要通过上拉电阻连接至电源,主要原因是:A.降低总线功耗B.提高总线抗干扰能力C.实现“线与”逻辑,允许多主机仲裁和从机拉低D.限制总线电流,保护器件5.在嵌入式实时操作系统(RTOS)中,下列哪个内核对象最适合保护一段短临界区且不会导致优先级反转?A.二值信号量B.互斥锁(mutex)C.消息队列D.事件标志组6.ARMCortex-M系列处理器复位后,第一条指令的地址通常取自:A.0x00000000处的堆栈指针B.0x00000004处的复位向量C.0x00000000处的复位向量D.0x00000004处的堆栈指针7.下列哪个通信接口为同步串行接口?A.UARTB.RS-485C.SPID.RS-2328.在C语言中,函数voidfoo(void)中的第二个void表示:A.函数无返回值B.函数不接受任何参数C.函数可接受任意参数D.函数返回值为空类型9.以下哪种方法可以判断小端序(little-endian)存储?A.查看编译器版本B.用一个union存储int和char,通过char读取int低地址字节C.使用sizeof(long)判断D.通过printf的%x输出判断10.在嵌入式Linux驱动开发中,中断处理程序上下文通常不能:A.读写硬件寄存器B.调用voidfree_irq(unsignedintirq,void*dev_id)C.调用可能睡眠的函数如msleepD.使用自旋锁二、填空题(每题2分,共5题,共10分)1.在32位ARM处理器上,int类型通常占______字节。2.在C语言中,static修饰全局变量时,该变量的作用域被限制在______。3.在Cortex-M3/M4中,中断向量表的起始地址通常由______决定。4.在FreeRTOS中,任务处于阻塞态(Blocked)最常见的原因是等待______。5.UART通信中,波特率115200bps表示每秒传输______个码元。三、简答题(每题5分,共3题,共15分)1.简述volatile关键字的作用,并列举两个典型使用场景。2.简述SPI与I2C总线的主要区别。3.编写中断服务函数(ISR)时,通常应遵循哪些原则?四、编程题(共1题,共25分)1.编写一个C语言函数intis_little_endian(void),判断当前处理器是否为小端序。要求使用union或指针方式实现,并说明判断原理。intis_little_endian(void)

{

union{

inti;

charc;

}test;

test.i=0x12345678;

return(test.c==0x78);

}解析:union的所有成员共用同一块内存。将test.i赋值为0x12345678后,小端序存储时最低有效字节0x78存放在低地址处,即test.c读取的起始字节为0x78,因此函数返回1表示为小端序;大端序则返回0。也可使用指针方式:intis_little_endian(void)

{

intx=1;

return(*(char*)&x==1);

}该方式利用int类型值1的存储形式判断低地址字节是否为0x01。五、综合分析题(共1题,共30分)1.设计一个基于MCU的温湿度采集系统:使用I2C接口的温湿度传感器SHT30采集数据,通过UART以MODBUS-RTU协议上报给上位机,要求每秒上报一次。请从硬件连接、软件模块划分、数据流及低功耗角度给出设计方案。2.定时器每秒触发一次,置位采集标志。3.主循环检测到标志后,通过I2C发送测量命令给SHT30。4.等待转换完成后读取6字节原始数据,进行CRC校验。5.根据公式计算温湿度:T=−456.将温湿度数据封装为MODBUS-RTU帧,通过UART发送。7.清除采集标志,等待下一周期。低功耗措施:•选用支持低功耗模式的MCU,未采集时进入睡眠或停止模式,由RTC/定时器唤醒。•在采集间隔关闭UART、I2C及不必要外设的时钟。•可降低主频或使用低频时钟运行。•上位机轮询周期可适当延长,减少无需上报时段的功耗。参考答案与解析一、单项选择题1.答案:C解析:volatile提示编译器每次使用该变量时都必须从内存重新读取,不能使用寄存器缓存值,常用于硬件寄存器、中断共享变量等。2.答案:C解析:指针变量保存的是地址,32位系统中地址总线宽度为32位,因此指针大小通常为4字节,与所指类型无关。3.答案:C解析:多数处理器中栈由高地址向低地址增长,而堆一般由低地址向高地址增长,C选项表述错误。4.答案:C解析:I2C空闲时两线为高,器件通过开漏/开集电极输出拉低总线,上拉电阻提供高电平,实现线与功能以便检测冲突。5.答案:B解析:互斥锁具有优先级继承机制,可降低优先级反转影响,且语义为“拥有者锁定/解锁”,适合保护临界区。二值信号量常用于同步。6.答案:B解析:Cortex-M中断向量表首字为初始栈指针MSP,偏移0x04处为复位向量,CPU复位后读取该地址作为PC。7.答案:C解析:SPI使用SCLK时钟线,为同步通信;UART、RS-232、RS-485均为异步通信。8.答案:B解析:参数列表中的void显示声明函数不接收任何参数,与空括号含义在C语言中不同。9.答案:B解析:union中多个成员共享同一块内存,通过将int写入后读取char类型低地址字节,若等于最低有效字节则为小端。10.答案:C解析:中断上下文不可睡眠,调用可能睡眠的函数会导致内核崩溃,应使用原子上下文允许的机制。二、填空题1.答案:4解析:ARM32位编译器下int为32位,即4字节。2.答案:定义它的源文件(或编译单元)内解析:static全局变量具有内部链接属性,其他源文件无法通过extern访问。3.答案:VTOR寄存器(向量表偏移寄存器)解析:可以使用SCB->VTOR重新定位中断向量表,但需按对齐要求设置。4.答案:信号量、消息队列、事件标志组或延时时间等内核对象解析:任务因调用vTaskDelay、xQueueReceive等阻塞等待时进入阻塞态。5.答案:115200解析:波特率即码元速率,每个码元对应一位二进制数据。三、简答题1.答案:volatile告知编译器该变量可能在程序流之外被修改,禁止编译器对访问该变量的代码进行优化(如缓存到寄存器、重复读取消除、指令重排等)。每次使用该变量时,编译器必须从内存重新读取数据。典型场景:(1)硬件寄存器访问,如volatileuint32_t*reg=(uint32_t*)0x40021000;(2)中断服务程序与主循环共享的标志变量,防止编译器优化导致等待循环失效。2.答案:SPI为四线制(SCK、MOSI、MISO、CS),全双工同步通信,速率较高,适合点对点或少量从机;I2C为两线制(SCL、SDA),半双工同步通信,速率较低,通过地址寻址,总线上可挂接多个设备,需上拉电阻。SPI通过硬件片选选择从机,I2C通过从机地址选择;SPI推挽输出,I2C开漏输出并需要上拉电阻。解析:SPI适合高速、点对点或少量从机场景;I2C适合多设备共享总线但速率受限。3.答案:(1)尽量短小,快速返回,避免长时间处理;(2)不在ISR中调用不可重入函数或可能睡眠的函数;(3)使用volatile共享变量,并注意临界区保护;(4)如需复杂处理,通过信号量、消息队列或事件标志通知任务;(5)确保中断标志清清除,避免重复触发。解析:中断服务程序占用CPU,过长会影响系统实时性,复杂任务应延迟到主循环或任务中处理。五、综合分析题1.硬件连接:•MCU的I2C接口:SCL、SDA接SHT30的SCL、SDA引脚,并各自接4.7kΩ上拉电阻至3.3V电源。•MCU的UARTTXD、RXD通过电平转换芯片(如MAX3232或RS-485收发器)连接上位机。•SHT30的VDD接3.3V,GND接地,可加0.1μF去耦电容。•可选:加看门狗、外部低速晶振用于低功耗定时唤醒。软件模块划分:•传感器驱动模块:封装I2C读写函数,初始化SHT30,发送测量命令,读取6字节温湿度数据并进行CRC校验,计算温湿度值。•UART通信模块:初始化UART,实现MODBUS-RTU帧的接收、发送、CRC校验(CRC-16/MOD

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论