MCU面试题

面试题


  • 1、Crotex-M 处理器才用的架构是"v7"

Cortex-M3处理器是基于ARMv7-M架构的处理器,支持更丰富的指令集,包括许多32位指令,这些指令可以高效的使用高位寄存器。另外,M3还支持:
查表跳转指令和条件执行(使用IT指令)
硬件除法指令
乘加指令(MAC)
各种位操作指令

支持更丰富的指令导致了更大的面积成本和更高的功耗。典型的微控制器,Cortex-M3的电路门数是Cortex-M0 和 Cortex-M0+两倍还多。但是,处理器的面积只是大多数现代微控制器的很小的一部分,多出来的面积和功耗经常不那么重要。

 

MCU面试题_第1张图片


  • 2、Cortex-M3 使用的存储器格式是"小端或者大端"

  • 3、中断屏蔽器能屏蔽( B )

A,所有中断和异常
B,除了 NMI 外所有的异常和中断
C,除了 NMI、异常外所有其他中断
D,部分中断

-- tip:中断与异常的区别

中断是指 CPU 对系统发生某事件时的这样一种响应:
CPU 暂停正在执行的程序,在保留现场后自动地转去执行该事件的中断处理程序;执行完后,再返回到原程序的断点处继续执行。

-- 还可进一步把中断分为外中断和内中断。

外中断:就是我们指的中断:是指由于外部设备事件所引起的中断,如通常的磁盘中断、打印机中断等; 内中断:就是异常:是指由于CPU 内部事件所引起的中断,如程序出错(非法指令、地址越界)。内中断(trap)也被译为“捕获”或“陷入”。

  • 异常是由于执行了现行指令所引起的。由于系统调用引起的中断属于异常。
  • 中断则是由于系统中某事件引起的,该事件与现行指令无关。

-- 中断和异常

  • 相同点:都是CPU对系统发生的某个事情做出的一种反应。

  • 区别:中断由外因引起,异常由CPU本身原因引起。

 

MCU面试题_第2张图片

 

MCU面试题_第3张图片


-- 4、ADC 转化的过程是采样-量化-编码

-- 5、ARM Crotex-M3 不可以通过( D )唤醒 CPU

A,I/O 端口
B,RTC 闹钟
C,USB 唤醒事件
D,PLL

 

MCU面试题_第4张图片

-- 6、基于中断的实时编程结构的实时性取决于( A)

A,中断响应时间
B,最长任务执行时间
C,任务切换时间
D,所有任务执行时间之和

-- 7、单片机进行串口通信时,若两机的发送与接收可以同时进行,则称为( D )

A.半双工传送
B.单工传送
C.双工传送
D.全双工传送


-- 8、关于中断抢占和响应的描述下列正确的是( A )

A、只有抢占优先级不一样时才发生中断嵌套
B、只有响应优先级不一样时才发生中断嵌套
C、只有抢占和响应优先级都不一样时才发生中断嵌套
D、都不正确

当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。


-- 9、根据 Free RTOS 状态切换过程,填写如下框图中当前任务可能处于的状态。

 

MCU面试题_第5张图片

  • a:就绪态.b:运行态。c:阻塞态。d:挂起态。

①:创建任务→a 态:任务创建完成后进入 a 态,表明任务已准备,随时可以运行,只等待 任务调度器进行调度;
②:a 态→b 态:发生任务切换时,就绪列表中最高优先级任务 被执行,从而进入 b 态;
③:b 态→a 态:有更高优先级任务创建或者恢复后,会发生任务调度,此处可以看做是 CPU 使用权被更高优先级任务 抢占了;
④:b 态→c 态:正在运行的任务发生挂起、延时、读信号量等待 (举 1/2 个例子)情况时,该任务会从就绪列表中删除,然后发生任务切换,运行上述框图中的哪一个过程编号 ②;
⑤: c 态→a 态:任务被恢复后,此时被恢复的任务会被加入就绪列表,从而切换任务状态;如果此时被恢复任务的优先级高于正在运行任务的优先级,将会运行上述框图中的哪一个过程编号 ② ;
⑥⑦⑧: a/b/c 态→d 态:任务可以通过调用 vTaskSuspend() API 函数都可以将处于任何状态的任务挂起,被挂起的任务得不到 CPU 的使用权,也不会参与调度,除非它从挂起态中解除。
⑨:d 态→a 态:把 一 个 挂 起 状态 的 任 务 恢复的 唯 一 途 径 就 是调 用 vTaskResume() 或 vTaskResumeFromISR() API 函数,如果此时被恢复任务的优先级高于正在运行任务的优先级,将会运行上述框图中的哪一个过程编号 ②;

FreeRTOS 中又有很多钩子函数,什么是钩子函数: 钩子函数(Hook 函数)是一种被操作系统内部调用的函数,它允许开发者在特定的事件发生时执行自定义的操作。

如何在 FreeRTOS 中使用钩子函数 在 FreeRTOS 中使用钩子函数,首先需要在 FreeRTOSConfig.h 中定义相应的配置宏以启用特定的钩子函数。一旦相应的配置宏被定义,就可以实现具体的钩子函数。


-- 10、在使用 Keil 编译工具时,编译器的优化等级有什么作用和区别:

-- Keil 编译器提供了多个优化等级,每个等级都有其特定的优化策略和目标。

  1. O0(无优化):这是默认的优化级别,编译器不执行任何优化。主要用于调试目的,因为在此级别下, 编译器会尽量保持源代码的原始结构,使得调试信息更加准确。编译时间通常是最短的。
  2. O1(基本优化):这个级别执行一些基本的优化操作,如删除未使用的变量、内联简单函数等。这些优化可以提高代码的执行效率,同时保持较快的编译速度。与 O0 相比,O1 级别在编译时间和执行效率之间达到了一个较好的平衡。

你可能感兴趣的:(MCU,单片机,MCU面试题)