您的位置 首页 电子

嵌入式MCU与MPU的区别和MCU开发中的三个误区

嵌入式MCU与MPU的区分和MCU开发中的三个误区-嵌入式系统中的处理器按照是否集成片上Flash和RAM可以分为MCU(Micro Control Unit—微控制器)和MPU(Micro Process Unit—微处理器)。典型的MCU如Freescale S08、S12和MPC56xx以及8051单片机等,而典型的MPU如基于ARM Cortex A系列内核的i.MX系列处理器:

目录

嵌入式MCU与MPU的区别

误区一:MCU的程序都是存储在片上Flash上,然后复制到RAM中履行的

误区二:工程编译生成的下载文件巨细即为终究占用Flash的巨细

误区三:用户运用工程的编译成果主张不能超越MCU片上Flash的80%

嵌入式MCU与MPU的区别

嵌入式体系中的处理器依照是否集成片上Flash和RAM能够分为MCU(Micro Control Unit—微控制器)和MPU(Micro Process Unit—微处理器)。典型的MCU如Freescale S08、S12和MPC56xx以及8051单片机等,而典型的MPU如根据ARM Cortex A系列内核的i.MX系列处理器:

本文中的观念针对仅针对嵌入式MCU,也便是咱们常说的单片机。其为单芯片集成解决方案—片上集成了嵌入式体系作业所需的逻辑核算内核CPU,存储数据/代码的RAM,EEPROM和Flash,内部互联总线—Crossbar、AMBA(APB、AHB以及AXI bus),定时器资源(TImer)、中止控制器(INTC,通用输入输出接口(GPIO),模仿数字转化模块—ADCDAC和ACMP,段码LCD控制器、TFT LCD控制器,步进电机驱动(SMC),通讯接口/控制器—I2C、SPI、UART/SCI、CANSDIO/eMMC、以太网MAC等;当然,MPU中也会集成许多嵌入式体系作业所需的大部分片上外设,但由于其核算单元CPU内核运转速度非常快,所以其一般不会再片内集成体系作业所需的RAM和Flash存储器,而是集成SDR/DDR2/3/4等外部SRAM扩展接口和NAND/NOR Flash扩展接口,用户规划根据MPU的硬件体系时还需挑选适宜的SRAM和外部Flash才能够确保体系正常作业。

当然还有咱们常说的CPU(Central Process Unit—中心处理器),常见PC上所运用的Intel的x86处理器,比方飞跃、至强、酷睿i3/i5/i7系列等,其片上只集成了中心核算内核单元CPU,少数的一级/二级/三级缓存以及GPU,但不包括中止控制器、定时器等,它需求经过主板进行扩展,更不包括存储器,需求用户在主板上外界DDR内存条和Flash硬盘。

依照内核的运转速度和片上集成外设资源的丰厚程度以及功耗,MCU、MPU和CPU的比照散布如下:

误区一:MCU的程序都是存储在片上Flash上,然后复制到RAM中履行的

许多刚触摸MCU的人受校园教师教学核算机硬件和C言语课程时一些观念的影响,以为MCU中程序都是存储在片上Flash上,然后复制到RAM中履行的,这其实是过错。原因如下:

1.MCU的片上RAM资源和Flash存储器比较一般都比较小,其份额大约为1:16到1:5,其不行能将存储在Flash中的程序代码悉数复制到片上RAM中;

以下为Freescale S12G系列、S12XE系列以及MPC574xB/C/D/G系列MCU的片上RAM和Flash存储器资源的比照:

2.在嵌入式MCU中内核CPU的作业频率一般为总线频率的两倍(S08和S12(X)系列MCU的内核CPU作业频率固定为总线作业频率的2倍)或许持平(PowerPC MPC560x系列),而挂到Flash的指令/数据总线宽度一般与CPU位宽的1~2倍,尽管Flash的拜访频率比较低(几MHz到数十MHz,一般不超越100MHz),而嵌入式MCU内核CPU的运转频率也不高,在300MHz以内,所以总线每次能够从Flash取出2~4条指令(PS:当PowerPC e200内核运用VLE指令集时,大多数指令都为16位长度,若指令/数据总线宽度为64位宽,则一次能够读出4条VLE指令),然后补偿与内核CPU运转速度的距离,确保在硬件物理上实现在Flash取值履行嵌入式MCU程序是没有问题的。

3.在嵌入式MCU的硬件规划上没有主动将Flash程序提早复制到RAM的机制,在软件规划上也没有相应的代码履行这个复制作业–这样的复制进程无疑会形成内核CPU资源的糟蹋,代码搬移的进程总内核CPU无法处理其他使命;(除非是在开发嵌入式MCU的BootLoader时,需求对片上Flash进行擦除和编程,而大多数嵌入式MCU片上都只要一个Flash块(block/parTIon), 不支持read-while-read操作,所以需求将Flash驱动程序事前复制到RAM然后调用—事实上,只需求将Flash擦除和编程指令的launch句子和查询等候指令完结的程序复制到RAM履行即可。程序的履行至少包括取指à译码à履行三个环节,其间取指便是从存储器中读出指令,需求拜访Flash/RAM)

4.经过调试嵌入式MCU,在CPU寄存器窗口检查程序运转时PC寄存器的值也能够验证嵌入式MCU程序默许运转时便是在Flash本地履行的、即存储地址与运转时地址相同;

由于S12XE系列MCU的Flash分页拜访机制,地址0xFE8029其实是其Flash的Page_FE的逻辑地址,对应的Flash物理地址(也称作大局地址–Global Address)为0x7F8029;

误区二:工程编译生成的下载文件巨细即为终究占用Flash的巨细

许多工程师判别一个嵌入式MCU运用工程的编译成果巨细往往看工程编译生成的HEX/S19/BIN等下载文件的巨细,以为工程编译生成的下载文件巨细即为终究占用Flash的巨细,这是不正确的。

由于在HEX/S19/BIN等下载文件往往还包括了编译器版别信息,工程装备信息,每行数据/代码的存储地址,长度、校验和以及整个工程的复位运转地址等非常丰厚的信息。由于只要具有了这些信息,编程器才找到将编译成果中的数据和代码烧写到Flash/EEPROM存储器的详细地址并确保数据/代码的完好性,经过每一行和整个文件的校验(Verify)来确保整个编程进程的正确完好。

以下以Motorola的S19文件(也称为S-Record)格局进行阐明:

S-record每行最大是78个字节,156个字符

S-record 格局如下:

type count address data checksum

其间:

type(类型):2个字符。用来描绘记载的类型 (S0,S1,S2,S3,S5,S7,S8,S9)。

count(计数):2个字符。 用来组成和阐明晰一个16进制的值,显现了在记载中剩下成对字符的计数。

address(地址):4或6或8个字节。用来组成和阐明晰一个16进制的值,显现了数据应该装载的地址, 这部分的长度取决于载入地址的字节数。2个字节的地址占用4个字符,3个字节的地址占用6个字符,4个字节的地址占用8个字符。

data(数据):0—64字符。用来组成和阐明一个代表了内存载入数据或许描绘信息的16进制的值。

checksum(校验和):2个字符。这些字符当被配对并换算成16进制数据的时分形成了一个最低有用字符 节,该字符节用来表达作为弥补数据,地址和数据库的字符对所代表的(字节的)补码的byte总和。即计数值、地址场和数据场的若干字符以两个字符为一对, 将它们相加求和,和的溢出部分不计,只保存最低两位字符NN,checksum =0xFF-0xNN。

S0 Record:记载类型是“S0” (0x5330)。地址场没有被用,用零置位(0x0000)。数据场中的信息被划分为以下四个子域:

name(称号):20个字符,用来编码单元称号

ver(版别):2个字符,用来编码版别号

rev(修订版别):2个字符,用来编码修订版别号

descripTIon(描绘):0-36个字符,用来编码文本注释

此行表明程序的开端,不需烧入memory。

S1 Record:记载类型是“S1” (0x5331)。地址场由2个字节地址来阐明。数据场由可载入的数据组成。

S2 Record:记载类型是“S2” (0x5332)。地址场由3个字节地址来阐明。数据场由可载入的数据组成。

S3 Record:记载类型是“S3” (0x5333)。地址场由4个字节地址来阐明。数据场由可载入的数据组成。

S5 Record:记载类型是“S5” (0x5335)。地址场由2字节的值阐明,包括了从前传输的S1、S2、S3记载的计数。没有数据场。

S7 Record:记载类型是“S7” (0x5337)。地址场由4字节的地址阐明,包括了开端履行地址。没有数据场。此行表明程序的完毕,不需烧入memory。

S8 Record:记载类型是“S8” (0x5338)。地址场由3字节的地址阐明,包括了开端履行地址。没有数据场。此行表明程序的完毕,不需烧入memory。

S9 Record:记载类型是“S9” (0x5339)。地址场由2字节的地址阐明,包括了开端履行地址。没有数据场。此行表明程序的完毕,不需烧入memory。

一个详细的S12XEP100的CodeWarrior5.2工程编译后S19文件的巨细为6KB,而实践占用Flash的巨细只要2445个字节,远小于S19文件的巨细,所以判别一个运用工程编译成果所占Flash和RAM的巨细,应该看MAP文件中的计算成果,而非S19文件的巨细:

或许以IDE(比方CodeWarrior 10.6或许S32DS)的Print Size东西从控制台(console)打印出来的text + data来判别,下面是一个详细的MPC5748G S32DS for Power V1.2工程,其编译及我国所占Flash的巨细为23366(text) + 1372(data)=24738 Byte,而其S19文件巨细为73KB。

误区三:用户运用工程的编译成果主张不能超越MCU片上Flash的80%

经过对以上误区一的剖析,嵌入式MCU中用户运用工程的编译成果(数据和程序代码)是一向存储在片上Flash中的,对其下载编程之后在整个产品的生命周期中都不会再改动(除非用户开发了在线/长途晋级的BootLoader功用),因而,完全能够将将Flash悉数用来保存编译成果,只要在工程链接文件中依照MCU实践存储器巨细和地址进行装备,编译链接成果没有存储器溢出即可。用户运用工程的编译成果主张不能超越MCU片上Flash的80%的说法没有任何理论依据。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/dianzi/347361.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部