【单片机】

【嵌入式八股】一、语言篇https://www.nowcoder.com/creation/manager/columnDetail/mwQPeM

【嵌入式八股】二、计算机基础篇https://www.nowcoder.com/creation/manager/columnDetail/Mg5Lym

【嵌入式八股】三、硬件篇(本专栏)https://www.nowcoder.com/creation/manager/columnDetail/MRVDlM

【嵌入式八股】四、嵌入式Linux篇https://www.nowcoder.com/creation/manager/columnDetail/MQ2bb0

单片机

单片机基础

基础

01.STM32F1和F4有什么区别
  1. 更先进的内核。STM32F4采用Cortex M4内核,带FPU和DSP指令集,而STM32F1采用的是Cortex M3内核,不带FPU和DSP指令集。

  2. 更多的资源。STM32F4拥有多达192KB的片内SRAM,带摄像头接口(DCMI)、加密处理器(CRYP)、USB高速OTG、真随机数发生器、OTP存储器等。

  3. 增强的外设功能。对于相同的外设部分,STM32F4具有更快的模数转换速度、更低的ADC/DAC工作电压、32位定时器、带日历功能的实时时钟(RTC)、IO复用功能大大增强、4K字节的电池备份SRAM以及更快的USART和SPI通信速度。

  4. 更高的性能。STM32F4最高运行频率可达168Mhz,而STM32F1只能到72Mhz;STM32F4拥有ART自适应实时加速器,可以达到相当于FLASH零等待周期的性能,STM32F1则需要等待周期;STM32F4的FSMC采用32位多重AHB总线矩阵,相比STM32F1总线访问速度明显提高。

  5. 更低的功耗。STM32F40x的功耗为:238uA/Mhz,其中低功耗版本的STM32F401更是低到:140uA/Mhz,而STM32F1则高达421uA/Mhz。

02.MCU启动流程

MCU启动流程可以概括为以下几个步骤:

  1. 上电复位:当MCU上电时,它会执行一次硬件复位。此时,所有寄存器被初始化为默认值,程序计数器(Program Counter,PC)被设置为复位向量所指向的地址。
  2. 复位向量表(Reset Vector Table):MCU在复位后,会跳转到复位向量表中的地址执行。复位向量表是一个存储着不同中断向量地址的特殊内存区域,其中包含了复位中断向量的地址。
  3. 系统时钟初始化:接下来,MCU会初始化系统时钟。这意味着选择合适的时钟源、配置时钟分频器和倍频器等设置,以确保正确的时钟频率。
  4. 初始化外设和寄存器:MCU启动后,需要根据应用程序的需求初始化各种外设和寄存器。这包括但不限于GPIO(通用输入输出)、UART(串行通信)、SPI(串行外设接口)、I2C(串行总线接口)、ADC(模数转换器)等。
  5. 主循环(Main Loop):完成初始化之后,MCU进入主循环,等待事件的发生。主循环通常包含各种任务或代码块,用于处理输入、执行操作、控制外设等。
03.STM32的启动地址

启动地址为0x08000000

理论上,CM3中规定上电后CPU是从0地址开始执行,但是这里中断向量表却被烧写在0x0800 0000地址里(Flash memory启动方式),那启动时不就找不到中断向量表了?既然CM3定下的规矩是从0地址启动,SMT32当然不能破坏ARM定下的“规矩”,所以它做了一个启动映射的过程,就是和芯片上总能见到的BOOT0和BOOT1有关了,当选择从主Flash启动模式后,芯片一上电,Flash的0x0800 0000地址被映射到0地址处,不影响CM3内核的读取,所以这时的CM3既可以在0地址处访问中断向量表,也可以在0x0800 0000地址处访问中断向量表,而代码还是在0x0800 0000地址处存储的。

04.DSP指令

DSP处理器有什么特点?

你可以把DSP处理器想象成一个科学计算器。它非常擅长做运算。

1、并行性。某些型号的DSP处理器内部有两个独立的乘法器,可以把其中一个专门做FIR滤波器用,而且可以脱离ALU单独运行。

这样,FIR滤波器的滤波特性不受ALU影响。这一点,用ARM是做不到的。

2、快速查表。DSP处理器内部ROM固化了很多数学上使用的各种常量、表格。如:正弦表等。

3、有16位、32位、64位的DSP处理器。

4、某些型号的DSP处理器支持硬件浮点运算单元。

5、可以使用厂家提供的算法库。

6、某些型号的DSP处理器支持VLIW,即超长指令集字,并行度非常高。

7、某些型号的DSP处理器内部是DSP+ARM。

8、有多核DSP。

9、价格较贵。

05.嵌入式微处理器和DSP有什么区别?

嵌入式微处理器和DSP(数字信号处理器)都是用于处理数据的芯片,但它们的设计和应用有所不同,具体区别如下:

  1. 用途不同:嵌入式微处理器主要用于通用用途的计算和控制任务,例如实现操作系统、网络通信、多媒体处理、机器视觉等;而DSP主要用于数字信号处理和嵌入式控制领域,例如音频处理、图像处理、视频编解码、机器人控制等。
  2. 硬件结构不同:嵌入式微处理器通常采用高速缓存、分支预测、乱序执行等技术,以优化处理器的通用计算能力;而DSP通常采用专用的硬件结构,如乘法累加器(MAC)、硬件加速器、DMA等,以优化数字信号处理的效率和速度。
  3. 算法和指令集不同:嵌入式微处理器通常采用通用算法和指令集,以支持通用计算和控制任务,如ARM、MIPS、x86等;而DSP通常采用专用的算法和指令集,如FFT、FIR滤波器、卷积等,以优化数字信号处理的效率和速度。
  4. 开发工具不同:由于嵌入式微处理器和DSP的用途和硬件结构不同,因此它们的开发工具也有所不同。嵌入式微处理器通常使用C语言和汇编语言进行开发,支持通用的开发工具和IDE,如Keil、Eclipse等;而DSP通常使用专门的开发工具和库,如MATLAB、LabVIEW、TI Code Composer等。
06.用的MCU的RAM多大,flash多大?

例:STM32F103C8T6的RAM和Flash大小如下:

  • RAM大小:20KB
  • Flash大小:64KB
07.MCU 外部RAM和内部RAM区别,怎么分配

MCU中通常存在两种类型的RAM,即外部RAM和内部RAM。它们有以下区别:

  1. 内部RAM(Internal RAM):也称为片上静态随机存取存储器(Static Random Access Memory,SRAM),是MCU芯片内部集成的一块RAM。它具有快速的访问速度和低功耗特性。内部RAM通常用于存储代码段、数据段和堆栈等临时数据。
  2. 外部RAM(External RAM):也称为片外动态随机存取存储器(Dynamic Random Access Memory,DRAM),是通过外部接口连接到MCU的额外存储器。外部RAM容量比内部RAM更大,可以存储更多的数据。由于外部RAM需要额外的接口和控制线路,因此其访问速度相对较慢。

分配内部RAM和外部RAM的具体方法取决于MCU的架构和编程环境。一般来说,内部RAM的分配是由编译器自动处理的,而外部RAM则需要手动进行分配。

对于内部RAM的分配,开发者只需在程序中定义变量并进行初始化即可。编译器会根据变量的类型和作用域自动分配内部RAM空间。

而对于外部RAM的分配,则需要通过编程方式进行配置。这通常涉及设置MCU的存储器映射或地址映射机制,以将外部RAM的地址范围映射到合适的内存空间。具体的操作方法和步骤会因MCU型号和开发环境而有所不同,可以参考MCU的文档和相关编程手册来了解详细信息。

总结起来,内部RAM是MCU芯片内部集成的存储器,由编译器自动分配;而外部RAM需要手动配置并通过外部接口连接到MCU,通常容量较大。

08.MCU上的固件,数据是怎么分配的

在MCU上,固件和数据的分配是通过链接器脚本(Linker Script)来完成的。链接器脚本定义了程序和数据的内存布局和分配方式。

链接器脚本指定了各个程序段(Code Segment)和数据段(Data Segment)在内存中的起始地址和大小。它还可以定义其他特定的段,如只读数据段(Read-Only Data Segment)和堆栈段(Stack Segment)等。

当编译和链接代码时,链接器将使用链接器脚本来确定每个段的位置和大小,并生成最终的可执行文件或固件。

以下是一个示例链接器脚本的简化版本:

MEMORY
{
  FLASH (rx)      : ORIGIN = 0x08000000, LENGTH = 64K
  RAM (rwx)       : ORIGIN = 0x20000000, LENGTH = 20K
}

SECTIONS
{
  .text :
  {
    *(.text)
  } > FLASH

  .data :
  {
    *(.data)
    *(.bss)
  } > RAM
}

上述示例中,.text段包含了可执行代码,被分配到Flash的起始地址0x08000000处,长度为64K。.data段包含了初始化的全局变量和静态变量,被分配到RAM的起始地址0x20000000处,长度为20K。

请注意,具体的链接器脚本会根据芯片型号、封装和编程环境等因素而有所不同。因此,在实际开发中,应该参考MCU的文档和相关编程手册,以获取准确的链接器脚本或相关配置信息。

09.用过哪些功能?
  1. 内存管理:MCU提供内部RAM和Flash等内存资源,用于存储程序代码、数据和变量等。
  2. 输入/输出(I/O):MCU具有各种输入输出接口,如通用输入输出口(GPIO)、串行通信接口(UART/SPI/I2C)和模拟输入输出(ADC/DAC)等,用于连接和交互外部设备。
  3. 定时器和计数器:MCU包含了定时器和计数器模块,可以产生精确的时间延迟、脉冲和周期信号等。
  4. 中断控制器:MCU通过中断控制器模块来管理中断请求和优先级,使得系统能够及时响应外部事件。
  5. 时钟和时序控制:MCU提供时钟源和时序控制器,用于生成并管理系统时钟,并对外设进行同步控制。
  6. 电源管理:MCU通常具有电源管理单元,用于控制和调节供电电压和功耗。
  7. 通信接口:MCU支持各种通信协议和接口,如以太网、USB、CAN、SPI、I2C等,用于与其他设备进行数据交换和通信。
  8. 安全和加密功能:一些MCU提供硬件加密引擎和安全模块,用于保护敏感数据和执行加密算法。
  9. 调试和编程接口:MCU提供调试接口(如JTAG/SWD)和编程接口(如ISP/ICP),用于程序下载、调试和测试。
14.M系列的处理器支持什么异常、都有哪些寄存器?
  1. M系列的处理器支持哪些异常? Cortex-M系列处理器支持以下异常:
    • 重置异常(Reset)
    • 非屏蔽中断(NMI,Non-Maskable Interrupt)
    • 数据终止异常(HardFault)
    • 访问未定义指令异常(Undefined Instruction)
    • 非法状态异常(Fault)
    • 系统调用异常(SVCall)
    • 系统调试异常(Debug Monitor)
    • PendSV异常
    • SysTick定时器异常
  2. Cortex-M3处理器有哪些寄存器? Cortex-M3处理器有多个寄存器,包括:
    • 通用寄存器(General-Purpose Registers):R0-R12,主要用于通用数据存储和运算。
    • 程序计数器(Program Counter,PC):指向当前正在执行的指令的地址。
    • 堆栈指针(Stack Pointer,SP):指向当前堆栈的顶部。
    • 帧指针(Frame Pointer,FP):用于支持函数调用和局部变量的访问

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

【嵌入式八股】三、硬件篇 文章被收录于专栏

查阅整理上千份嵌入式面经,将相关资料汇集于此,主要包括: 0.简历面试 1.语言篇 2.计算机基础 3.硬件篇【本专栏】 4.嵌入式Linux (建议PC端查看)

全部评论

相关推荐

1. 实时数据采集  在嵌入式系统中,如何有效地实现实时数据采集?请列出关键步骤和考虑因素。2. UART通信注意事项  在使用UART进行设备间通信时,需注意哪些事项以确保数据传输的可靠性?3. FreeRTOS任务延时  在FreeRTOS中,如何实现任务的延时功能?请给出具体的API和示例。4. SPI数据交换  如何通过SPI与传感器进行数据交换?请描述配置和数据传输的过程。5. TCP/IP协议栈配置  在嵌入式系统中,如何配置和使用TCP/IP协议栈以实现网络通信?6. PWM控制伺服电机  如何使用PWM信号控制伺服电机的角度?请说明具体的实现方法。7. FreeRTOS互斥量  在FreeRTOS中,如何实现互斥量的使用以保护共享资源?8. 低功耗模式实现  在嵌入式系统中,如何实现低功耗模式?请列出可采取的策略。9. I2C温度传感器读取  如何使用I2C与温度传感器进行数据读取?请描述具体的步骤。10. FreeRTOS任务通知机制  在FreeRTOS中,如何实现任务的通知机制以同步任务间的操作?11. ADC配置  如何配置ADC以读取温度传感器的数值?请列出配置步骤。12. 数据压缩实现  在嵌入式系统中,如何实现数据压缩以节省存储空间?13. PWM控制电机速度  使用PWM控制电机速度的基本原理是什么?请解释其工作机制。14. 优先级反转  在FreeRTOS中,如何处理任务的优先级反转问题?请给出解决方案。15. 中断处理按键输入  如何使用中断来处理按键输入?请描述具体的实现过程。16. CRC校验实现  在嵌入式系统中,如何实现数据的CRC校验?请提供算法和步骤。17. CAN总线通信原理  使用CAN总线进行车辆数据通信的基本原理是什么?请简述其工作流程。18. FreeRTOS事件组  在FreeRTOS中,如何实现事件组的使用以管理多个任务的同步?19. 外部中断响应  如何使用外部中断来响应传感器数据变化?请说明具体的配置和实现。20. 压力传感器读取  在嵌入式系统中,如何实现压力传感器的读取?请描述相关步骤。21. DMA音频数据传输  使用DMA进行音频数据传输的优势是什么?请说明其实现方法。22. 软件定时器使用  在FreeRTOS中,如何实现软件定时器的使用以定时执行任务?23. 图像传输实现  在嵌入式系统中,如何实现图像传输?请列出所需的协议和步骤。24. RTC定时事件调度  如何使用RTC进行定时事件的调度?请描述配置和使用方法。25. 内存使用监控  在FreeRTOS中,如何监控内存使用情况以避免内存泄漏?26. USB设备识别  使用USB进行设备识别和通信的基本原理是什么?请简述其工作流程。27. 音频录制实现  在嵌入式系统中,如何实现音频录制?请列出关键步骤。28. MQTT设备监控  如何使用MQTT协议进行设备状态监控?请描述实现流程。29. FreeRTOS时间管理  在FreeRTOS中,如何实现任务的时间管理以优化系统性能?30. 固件安全更新机制  在嵌入式系统中,如何实现固件的安全更新机制?请列出关键考虑因素。嵌入式C++面经推荐大佬面经  链接在下边https://www.nowcoder.com/creation/manager/columnDetail/MJNwoM
点赞 评论 收藏
分享
评论
4
31
分享

创作者周榜

更多
牛客网
牛客企业服务