嵌入式—单片机基础专栏

1.单片机基础组成?什么是单片机?

单片机(Microcontroller Unit, MCU)是一种集成电路芯片,它包含了中央处理器(CPU)、存储器(ROM和RAM)、输入/输出接口(I/O)等基本功能单元,并集成在同一块硅片上。单片机的基本组成包括:

1.中央处理器(CPU)负责执行程序指令,进行数据运算和逻辑控制。常见的CPU架构有8位、16位和32位。

2.存储器包括:

  1. 只读存储器(ROM)用于存储固定的程序和数据。
  2. 随机存取存储器(RAM)用于存储运行时的临时数据。
  3. 有些单片机还集成了可擦除可编程只读存储器(EEPROM)闪存(Flash)用于存储可更新的程序和数据。

3.输入/输出接口(I/O)用于与外部设备进行信号交互,如开关、传感器、执行机构等。

4.定时器/计数器用于产生定时脉冲或计数外部事件,实现时间控制功能。

5.中断控制器用于管理各种中断源,提高系统的实时响应能力。

6.通信接口如串行接口(UART)、SPI、I2C等,用于与外部设备进行数据通信。

2.MCU、SOC、FPGA、DSP,都是什么?

1.MCU (Microcontroller Unit) - 单片机

  1. MCU就是单片机不多做解释。

2.SOC (System-on-Chip) - 系统级芯片SOC

  1. 是一种高度集成的芯片,将多种功能模块集成在一个芯片上,形成一个完整的系统。
  2. 典型的 SOC 包括 CPU、GPU、内存、通信模块、传感器接口等,可以集成数十到上百个功能模块
  3. SOC 可以为复杂的电子产品提供全面的解决方案,大大简化了系统设计和制造。

我再来总结下,低端的SOC本质是MCU内核,只是在51/ARM内核基础上增加了特定功能外设模块重新封了一款芯片。如果用MCU去完成一些特定功能,比如说蓝牙协议,Zigbee协议,电量计量等等会比较麻烦,研发周期长,稳定性差,成本也更高。

3.FPGA (Field Programmable Gate Array) - 现场可编程门阵列

FPGA 的全称为 Field-Programmable Gate Array,即现场可编程门阵列。 FPGA 是在 PAL、 GAL、 CPLD 等可编程器件的基础上进一步发展的产物, 是作为专用集成电路( ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。 简而言之, FPGA 就是一个可以通过编程来改变内部结构的芯片。

1.FPGA 功能实现:

需要通过编程即设计硬件描述语言,经过 EDA 工具编译、综合、布局布线成后转换为可烧录的文件,最终加载到 FPGA 器件中去,改变 FPGA 内部的连线,最终完成所实现的功能。

2.FPGA 性能对比:

FPGA 相比于单片机、 CPU 等集成电路芯片拥有效率更高、功耗更低的特点,但是易于开发程度远远不如单片机、 CPU; 在数字芯片设计领域, FPGA 虽然相比 ASIC 具有更短的开发周期与开发难度, 但是其存在着成本过高、性能较差并且在资源的利用率上远不及 ASIC 等问题,不能真正的替代 ASIC。

4.DSP (Digital Signal Processor) - 数字信号处理器DSP

DSP(digital signal processor)是一种独特的微处理器,是以数字信号来处理大量信息的器件。其工作原理是接收模拟信号,转换为0或1的数字信号。再对数字信号进行修改、删除、强化,并在其他系统芯片中把数字数据解译回模拟数据或实际环境格式。它不仅具有可编程性,而且其实时运行速度可达每秒数以千万条复杂指令程序,远远超过通用微处理器,是数字化电子世界中日益重要的电脑芯片。它的强大数据处理能力和高运行速度,是最值得称道的两大特色。

优点:

  1. 高性能计算能力DSP 采用专门的硬件架构,如乘法累加器、寄存器文件等,能够高效地执行数学运算密集型的信号处理算法。相比通用 CPU,DSP 在执行滤波、变换、编解码等信号处理任务时具有显著的性能优势。
  2. 低功耗DSP 的硬件架构针对信号处理进行了优化,在执行相同任务时,功耗通常低于通用 CPU。这使得 DSP 非常适用于电池供电的便携式设备,如手机、MP3 播放器等。
  3. 实时性强DSP 擅长处理连续的实时数据流,能够满足音频、视频等实时信号处理的要求。相比通用 CPU,DSP 具有更好的实时性和确定性。
  4. 广泛应用DSP 广泛应用于音频、视频、通信、雷达等领域,是信号处理领域不可或缺的核心组件。

缺点:

  1. 编程复杂度高DSP 的硬件架构和指令集与通用 CPU 有较大差异,编程和调试较为复杂,需要专业的知识和经验。
  2. 功能专一DSP 主要针对信号处理任务进行优化,在执行通用计算任务时,性能可能不如通用 CPU。
  3. 成本相对较高由于 DSP 的专用硬件架构和定制化设计,其成本通常高于通用 CPU。

DSP与MCU的区别

结构

成本

运算能力

DSP

哈佛结构

价格昂贵

MCU

冯诺依曼结构

价格低廉

    DSP采用的是哈佛结构,数据空间和存储空间是分开的,通过独立的数据总线在程序空间和数据空间同时访问。而MCU采用的是冯诺依曼结构,数据空间和存储空间共用一个存储器空间,通过一组总线连接到CPU。在对性能要求不是很高的情况下,MCU还是很具有优势的。

DSP与ARM的区别

    ARM是Advanced RISC(精简指令集) Machines 的缩写,是面向低预算市场的RICS微处理器。ARM有比较强的事务管理能力,适合于用来跑跑界面、操作系统,优势体现在控制方面。

DSP与FPGA的区别

    FPGA是Field Programmable Gate Array(现场可编程门阵列)的缩写,是在PAL、GAL、PLD等可编程器件的基础上进一步发展的产物,是专用集成电路中集成度最高的一种。具有静态可重复编程和动态在系统在系统中重构的特性,使得硬件的功能可以像软件一样通过编程修改。

3.单片机的程序在哪里存储?

在描述单片机程序时,需要区分"运行时"和"非运行时"

非运行时的单片机程序在ROM内的分布

下图就是通过单片机下载工具烧录到单片机Flash里面去之后的Flash空间区域分布图:

其中:

Code:为程序代码部分

Ro-data: 表示程序定义的常量(const修饰的常量、#define 宏定义等);

Rw-data: 表示已初始化的全局变量

Zi-data: 表示未初始化的全局变量(Zi-data可以表示RAM未上电时整个区域的状态,或者上电初始化之后未被使用的区域,上表仅仅描述的是ROM区域的空间分布)

而栈区(stack)、堆区(heap)、全局区(静态区)(static)、文字常量区和程序代码区和上面所介绍的Code、Ro-data等的关系。

1、栈区(stack):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 这些值是可读写的,那么stack应该被包含在RW-data(读写数据存储区),也就是单片机的sram中。

2、堆区(heap):一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。可以理解,这些也是被包含在单片机的sram中的。

3、全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域,程序结束后由系统释放。这些数据也是可读可写的,和stack、heap一样,被包含在RAM中。

4、文字常量区:常量字符串就是放在这里的。这些数据是只读的,分配在Ro-data(只读数据存储区),则被包含在flash中。

5、程序代码区:存放函数体的二进制代码,可以想象也是被包含在flash,因为对于MCU来说,当其重新上电,代码还会继续运行,并不会消失,所以存储在flash中。

下图是初始化之前的ROM和RAM中的数据分布:

1、未初始化之前的RAM里面所有区域都是随机的值即:Zi-data

运行时的单片机程序在RAM内的分布

下图是初始化之后的ROM和RAM中的数据分布:

1、初始化的时候会由Boot程序(进入main函数之前)拷贝Flash里面的Rw-data区域到RAM

下图是初始化之后正常运行时,单片机内ROM和RAM区域分布图:

  • 上电初始化之后Flash的Rw-data就不会再使用了,除非重新上电、复位了boot才会重新从ROM(Flash)中拷贝Rw-data区域到RAM中去。
  • 运行时,根据上一节对哈佛模型的描述(51内核、Cortex-M3、Cortex-M4是哈佛模型),程序存储区对应ROM(Flash)数据存储区对应RAM,如此这般两个区域就是物理上的分开的–经典的哈佛模型。

4.单片机程序的BIN文件和HEX文件的区别?

单片机程序的BIN文件和HEX文件的区别

  • Bin文件是存放在Flash上的文件
  • HEX文件,需要将Bin文件转为Hex文件是一种文件中有地址的文件,其目的是便于单片机烧录工具按照文件中地址进行烧录

运行时:单片机程序运行起来以后,代码是在ROM(Nor Flash)上面跑的,数据是在RAM上面的,描述的就是ROM和RAM两个层面。

非运行时:单片机程序没有运行时(没有上电),针对的描述是单片机程序(bin)文件在ROM(Flash)上的分布

注意,如果使用Flash读取工具从单片机的Flash上完整读出来的文件可能是bin文件但绝对不是hex文件!

5.ROM和RAM都有哪些常见的?

ROM 类型:

ROM

Read-Only Memory

只读存储器,内容出厂时固化,不可修改

PROM

Programmable ROM

可编程只读存储器,一次性可编程,内容不可擦除

EPROM

Erasable Programmable ROM

可擦除可编程只读存储器,可通过紫外线擦除内容后重新编程

EEPROM

Electrically Erasable Programmable ROM

电可擦除可编程只读存储器,可电子擦除内容后重新编程

Flash

-

闪存,一种可电子擦除和编程的非易失性存储器,既可作为 ROM 使用,也可作为 RAM 使用

RAM 类型:

RAM

Random Access Memory

随机存取存储器,可读写,断电后内容丢失(易失性)

SRAM

Static RAM

静态随机存取存储器,通过锁存电路保持数据,速度快但功耗高

DRAM

Dynamic RAM

动态随机存取存储器,通过电容存储数据,速度较慢但功耗低

6.操作系统和单片机的内存分布对比?

由于单片机应用领域是极端成本为导向的,单片机和操作系统的所处环境不同 RAM和ROM的使用方式也不同。

类型

操作系统应用程序

单片机程序

代码

RAM

ROM(支持XIP的Nor Flash)

数据

RAM

RAM(SRAM)

总结来说就是,单片机的代码是在ROM即支持XIP的Nor Flash上面跑,数据是在RAM上面的,而操作系统应用程序的代码、数据是完全加载到RAM里面运行的(这里不考虑分页、虚拟内存)

操作系统应用程序

描述

对应单片机程序

BSS段–.bss

未初始化的全局变量、静态变量,一旦初始化就回收,并转存到数据段之中

Zi-data

代码段–.code

代码,程序结束的时候系统会自动回收存储在代码段中的数据,内存区域较小

Code

数据段–.data

已经初始化的全局变量、静态变量,直到程序结束的时候才会被回收

Rw-data (global/static)

堆–.heap

动态分配内存,alloc出来的对象,需要程序员进行内存管理

Rw-data (heap)

栈–.stack

局部变量,自动分配内存,当局部变量的作用域执行完毕之后就会被系统立即回收

Rw-data (stack)

书写不易留个小花吧!!

#牛客在线求职答疑中心##面经##面试#
c++/嵌入式面经专栏 文章被收录于专栏

本人2022年毕业于山东大学,目前就职国内某芯片厂。打算把之前校招时做的笔记通过专栏发出来,本专栏适合于C/C++、嵌入式方向就业的同学,本篇面经总结数千篇面经的知识集合,实时更新全网最新的嵌入式/C++最新内容,囊括了C语言、C++、操作系统、计算机网络、嵌入式、算法与数据结构、数据库等一系列知识点,在我看来这些是求职者在面试中必须掌握的知识点。最后呢祝各位能找到自己合适的工作。

全部评论

相关推荐

7 10 评论
分享
牛客网
牛客企业服务