【单片机】

【嵌入式八股】一、语言篇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 15 评论
分享
牛客网
牛客企业服务