目录
关键词
嵌入式、C语言、autosar
平台说明
项目 | Value |
---|---|
OS | autosar OS |
autosar厂商 | vector |
芯片厂商 | TI |
编程语言 | C,C++ |
编译器 | HighTec (GCC) |
背景
在嵌入式系统中,单片机的存储器分为不同的层次,包括速度更快但容量较小的寄存器、速度适中但容量适中的内部RAM(Random Access Memory)和较慢但容量较大的外部存储器(如Flash存储器)和特殊类型的高速缓存 (Scratchpad memory)。Scratchpad memory 与传统的缓存(比如 L1、L2、L3 缓存)有所不同,因为它不受处理器硬件的自动管理。程序员需要显式地将数据存储在 Scratchpad memory 中,以确保更精准的内存访问和更高的性能。这些不同的存储器对CPU负载(CPU Load)有着不同的影响。
另外,不同的芯片硬件设计和存储分布也决定了不同的memory mapping 对性能的影响。
一、 存储类型
1.1 RAM
1.1.1 SRAM
在单片机(Microcontroller)中,SRAM(Static Random-Access Memory,静态随机存取存储器)是一种用于存储数据的类型。与动态随机存取存储器(DRAM)不同,SRAM 不需要定期刷新操作,因此速度更快,但相对来说也更昂贵且占用更多的空间。
1.1.1.1特性和用途
1.静态性质: SRAM 是一种静态存储器,这意味着它的数据保持在存储器中,只要供电保持,而不需要像动态存储器那样进行周期性的刷新。t
2.快速访问: SRAM 提供快速的读写访问时间,这使得它在需要快速存取的应用中很有用,例如在嵌入式系统和单片机中。
3.相对较小的密度: 相较于动态存储器,SRAM 的存储密度较小,这意味着每个存储单元需要更多的晶体管,占用更多的芯片空间
1.1.2 DRAM
在单片机中,DRAM(Dynamic Random-Access Memory,动态随机存取存储器)通常不是首选的内存类型但是价格便宜。
1.1.2.1特性和用途
1.动态性: DRAM 存储器单元需要定期刷新,以保持存储的信息。这与静态内存(如 SRAM)不同,后者不需要刷新。
2.随机访问: 与顺序访问存储器(例如磁带)不同,DRAM 允许在存储器中直接访问任意位置的数据。
1.2 ROM
1.2.1 PROM
“PROM” 通常指的是可编程只读存储器(Programmable Read-Only Memory)。PROM 是一种存储数据的芯片,它的特点是在生产后可以被编程一次,而之后的内容不能再次被更改。与普通的只读存储器(ROM)不同,PROM 具有可编程的特性,允许用户将特定的数据或程序写入其中。
1.2.1.1特性和用途
1.可编程性: PROM 具有可编程的特性,意味着在制造之后,用户可以将数据或程序写入这种存储器。一旦编程完成,其内容将保持不变。
2.只读性: 尽管 PROM 具有可编程的能力,但它的基本特性是只读存储器,用户不能在正常操作中随意修改其中的内容。它被设计成在编程后仅允许读取操作。
3.一次编程: 与一些可擦除可编程只读存储器(EEPROM 或 Flash)不同,PROM 通常是一次性的,一旦编程完成,就不能再次擦除或修改。
广泛用途: PROM 在嵌入式系统和单片机中用于存储固件、程序或配置数据。它通常用于存储在制造过程中就能确定的静态数据,而不是需要在运行时动态修改的数据。
随着技术的发展,许多新型存储器技术已经出现,如EEPROM、Flash等,它们提供了更多的灵活性和可擦写性。然而,PROM 仍然在某些应用中有其用途,特别是在一次性编程的场景中。
1.2.2 EPROM
EPROM 是可擦除可编程只读存储器(Erasable Programmable Read-Only Memory)的缩写。它是一种用于存储固定数据的存储器类型,其中的数据在生产后是只读的,但是可以通过特殊的操作进行擦除和重新编程。
1.2.2.1 特性和用途
1.只读存储器(ROM)的一种: EPROM 是只读存储器的一种,因为其中的数据通常在制造时被设定,并且通常不允许在运行时进行修改。不同于一些其他只读存储器,EPROM 允许进行擦除和重新编程,从而可以多次使用。
2.擦除和编程操作: EPROM 的特殊之处在于它允许通过使用紫外线激光或特殊设备进行擦除。在擦除之后,可以使用专门的编程设备将新的数据编程到芯片中。这使得 EPROM 具有可重新编程的能力,尽管擦除和编程操作通常需要一些专业设备。
3.应用: EPROM 在历史上用于存储程序代码、固定的配置信息等。然而,由于其擦除和编程过程相对较为复杂,现代的存储器技术更常用于嵌入式系统和单片机中。
4.被替代的存储器类型: 随着技术的发展,EPROM 逐渐被更先进、更方便的可擦除存储器类型取代,如 EEPROM(Electrically Erasable Programmable Read-Only Memory)和 Flash 存储器。这些存储器类型具有更快的擦除和编程速度,而且不需要紫外线激光。
在单片机和嵌入式系统中,通常使用 Flash 存储器而不是 EPROM,因为 Flash 存储器更容易擦除和编程,同时还提供了更高的性能。
1.2.3 EEPROM
EEPROM 是一种可擦写可编程只读存储器(Electrically Erasable Programmable Read-Only Memory)的缩写。在单片机和嵌入式系统中,EEPROM 通常被用来存储需要在断电后保持的数据,例如配置设置、校准值、计数器状态等。
EEPROM 和传统的 ROM(只读存储器)不同之处在于,它允许在需要时通过电子方式进行擦除和编程,而不需要将芯片从系统中移除。这使得在运行时更新存储在 EEPROM 中的数据成为可能,而不会影响其他部分的程序或数据。
可以被按字节读写
1.2.3.1特性和用途
1.配置存储: 存储系统配置和参数,例如通信设置、显示选项等。
2.校准数据: 存储传感器校准值、系统参数等,以确保系统在各种条件下的准确性。
3.计数器和计时器状态: 保存计数器和计时器的当前状态,以便在断电后恢复。
4.唯一设备标识: 为设备分配唯一标识符,以便在生产和使用过程中进行跟踪。
5.防止数据丢失: 保存临时数据,以防止系统断电时丢失重要信息。
1.3 FLASH
Flash Memory,闪存,结合了ROM和RAM的长处,广义上也可以说是ROM,是可擦除可编程的存储器,因为flash简化了电路,数据密度更高,成本更低,不同与EEPROM是不能以字节为最小单位擦除。只能把1写为0,不能把0写为1,操作flash的时候,都是先要擦除才能写,不然数据会错乱。
1.3.1 Nor Flash
或称为 NOR Flash 存储器,是一种非易失性存储器(Non-Volatile Memory,NVM)技术,常用于单片机和嵌入式系统中。与 NAND Flash 不同,Nor Flash 和 NAND Flash 是两种不同的闪存存储技术,它们在内部结构和应用场景上有一些差异。
1.3.1.1特性和用途
1.结构: Nor Flash 存储器的内部结构相对简单,数据存储和读取速度较快。它通常采用并行存储的方式,这意味着每个存储单元都有独立的访问通道,可直接寻址。
2.读取速度: Nor Flash 具有较快的随机读取速度,因为它可以直接通过地址线寻址任何存储位置,适用于需要快速随机访问的应用。
3.用途: Nor Flash 通常用于嵌入式系统的代码存储,例如单片机中的程序存储器。由于其较快的读取速度,它适用于需要执行代码的应用场景。
4.读取方式: Nor Flash 支持随机访问,这意味着可以按地址直接读取存储器中的数据。这使得 Nor Flash 在执行代码时表现优越,因为程序代码通常需要在随机位置执行。
5.擦写方式: 按字节擦除,Nor Flash 的擦写速度相对较慢,擦写单元的大小通常比 NAND Flash 大。这使得 Nor Flash 不如 NAND Flash 适合大容量数据的快速写入。
1.3.2 Nand Flash
NAND Flash 是一种非易失性存储器技术,常用于嵌入式系统和单片机中。它是一种基于 NAND 门的闪存技术,用于存储数据,并且相对于 NOR Flash 具有较高的存储密度和较低的成本。
1.3.2.1特性和用途
1.存储原理: NAND Flash 存储信息的方式类似于传统的 NAND 门的工作原理。它由一系列的存储单元组成,每个单元可以存储一个或多个位的信息。这些单元通过在浮栅中存储电荷来表示数据的状态。
2.结构: NAND Flash 存储器被组织成块(Block)、页(Page)和字节(Byte)。一般而言,一个块包含多个页,而一个页包含多个字节。数据的写入和擦除通常是以块为单位进行的。
3.快速读取和写入: NAND Flash 具有相对较快的读取和写入速度,这使得它在需要快速访问大量数据的应用中非常有用。
4.高密度和低成本: NAND Flash 的结构允许在芯片上实现高存储密度,从而提供相对较大的存储容量。此外,由于 NAND Flash 的制造成本相对较低,因此它是一种成本效益高的存储解决方案。
1.3.3 Nand Flash 和 Nor flash 区别
NAND Flash和NOR Flash都是常见的非易失性存储器(Flash Memory)类型,它们在单片机应用中都有自己的特点和用途。以下是它们之间的一些主要区别:
1.结构和内部组织:
NAND Flash: NAND Flash 使用 NAND 门结构,其中存储单元被组织成页面和块。它通常以块(Block)为单位进行擦除,而读和写是以页面(Page)为单位进行的。
NOR Flash: NOR Flash 使用 NOR 门结构,其中存储单元以字节为单位组织。 NOR Flash 通常允许随机访问存储单元,这意味着可以直接读取和写入任意地址的数据。
读取速度:
2.读取速度
NAND Flash: NAND Flash 通常具有更高的读取速度,特别是在顺序读取方面。
NOR Flash: NOR Flash 通常具有较慢的读取速度,特别是对于大容量存储器。
写入速度和擦除:
3.写入速度
NAND Flash: NAND Flash 的写入速度相对较快,但擦除速度相对较慢。擦除通常以块为单位进行。
NOR Flash: NOR Flash 具有相对较慢的写入速度,但擦除速度较快。 NOR Flash 的擦除是以扇区为单位进行的。
寿命和耐用性:
4.存储密度
NAND Flash: NAND Flash 通常具有较高的存储密度,但相对较低的寿命。它适用于大容量存储,如固态硬盘(SSD)。
NOR Flash: NOR Flash 具有较高的寿命和较好的耐用性,适用于需要频繁读取和较低存储密度的应用,如嵌入式系统的代码存储。
适用场景:
5.存储容量
NAND Flash: 适用于大容量、顺序读取较多的应用,如数据存储。
NOR Flash: 适用于小容量、需要频繁读取的应用,如嵌入式系统的代码存储。
在选择 Flash 存储器时,开发者需要考虑应用的特定需求,包括读取和写入的频率、存储密度、寿命要求等。因此,NAND Flash和NOR Flash在单片机中的选择取决于具体的应用场景。
1.4 cache
缓存(Cache)通常不是一种存储类型,而是一种高速缓存存储器,用于临时存储处理器频繁访问的数据和指令,以提高程序性能。缓存是一种在处理器和主存之间的高速存储器,存储了最近被处理器访问的数据和指令。
1.4.1cache分类
1.指令缓存(Instruction Cache): 存储处理器执行的程序的指令。当处理器需要执行指令时,它首先检查指令缓存,如果命中(缓存中已经有该指令),就可以快速执行,否则需要从主存中加载指令。
2.数据缓存(Data Cache): 存储处理器读取和写入的数据。类似于指令缓存,当处理器需要访问数据时,它首先检查数据缓存,如果命中,就可以快速读取或写入数据,否则需要从主存中加载或写回数据。
3.联合缓存(Unified Cache): 有些系统使用统一的缓存来存储指令和数据。在这种情况下,缓存中的存储单元可以被用作指令或数据,具体取决于处理器的需要。
缓存的作用是通过提供快速访问最常用的数据和指令来减少对主存的访问次数,从而提高程序的性能。缓存的大小和组织方式可以因处理器架构而异,一些高性能的单片机可能具有更大、更高级的缓存系统,而一些资源受限的系统可能没有缓存或只有很小的缓存。在嵌入式系统中,设计者需要根据应用的需求权衡资源利用和性能。
1.5 Scratchpad Memory(SPM)高速缓存器
在一些嵌入式系统或特定的硬件架构中,程序员可以使用spm内存来暂存一些计算中间结果或需要快速访问的数据。这种内存通常相对较小,但由于程序员对其直接控制,可以更灵活地使用。
1.6 SPM 和cache 区别
在单片机中,Cache 和 Scratchpad Memory(高速暂存存储器)是两个不同的概念,它们分别用于不同的目的。
Cache:
作用: Cache 是一种高速缓存,用于存储最常用的数据和指令,以提高对内存的访问速度。它通常用于缓存主存(RAM)中的数据,以减少处理器访问内存的时间。
管理: Cache 通常由硬件自动管理,不需要程序员干预。数据在被访问时,如果在 Cache 中找到,就是缓存命中(cache hit);否则,需要从主存中加载数据,这称为缓存未命中(cache miss)。
层次: 大多数现代单片机和处理器具有多级缓存,如 L1 Cache、L2 Cache 等,层次结构的目的是更好地匹配不同的性能需求。
Scratchpad Memory:
作用: Scratchpad Memory 是一块被程序员直接管理的内存,用于存储程序执行过程中的临时数据。程序员可以显式地将数据存储在 Scratchpad Memory 中,以提高对这些数据的访问速度。
管理: 与 Cache 不同,Scratchpad Memory 由程序员负责管理,需要手动分配和释放。程序员可以通过直接访问内存地址来读写 Scratchpad Memory 中的数据。
用途: Scratchpad Memory 常用于一些对性能要求较高的嵌入式系统,例如在嵌入式控制器中,用于存储计算中的中间结果、临时变量等。
在总体上,Cache 和 Scratchpad Memory 都是用于提高内存访问效率的技术,但它们的管理方式、作用和使用场景存在很大的不同。Cache 由硬件管理,自动缓存常用数据,而 Scratchpad Memory 由程序员手动管理,用于存储程序中特定的临时数据。
1.7 小结
目前使用的在单片机上,大部分用的是Nor Flash和SRAM,cache,SPM,有些也带有EEPROM,但一般都比较小。
![在这里插入图片描述](https://img-blog.csdnimg.cn/7a3c889fe14a40c5ad466f7fff9a19a5.png
二、 存储结构的发展
在现代嵌入式单片机中,存储结构经历了显著的演进,从最初的原始ROM和RAM组成逐渐发展为更为先进和灵活的ROM、RAM、Cache以及Scratchpad Memory(SPM)的复合结构。原始的ROM仅用于存储固定的程序代码,而现代单片机的ROM已经演变为Flash存储器,支持可擦写、可编程的特性,使得固件更新更为便捷。RAM仍然用于存储变量和程序运行时的临时数据。
与此同时,引入了Cache机制,用于高效地缓存频繁访问的数据和指令,以提升存储器访问速度。Cache在现代单片机中扮演着关键的角色,通过在处理器和主存之间建立快速的数据缓存,有效地降低了存储访问延迟,提高了系统性能。
此外,Scratchpad Memory(SPM)的引入为程序员提供了更直接的内存控制权,用于存储临时数据和中间计算结果,从而优化了特定应用的性能。SPM的手动管理允许程序员更灵活地定制内存使用方式,适应不同的嵌入式系统需求。
综合而言,现代嵌入式单片机的存储结构已经从简单的ROM和RAM进化为更为复杂和多样化的组合,涵盖了Flash存储器、Cache、以及Scratchpad Memory等元素,以满足不断增长的计算需求和性能要求
三、三种经典的单片机结构
3.1 global RAM ,Local RAM
*Global RAM(全局RAM):
*
定义: Global RAM 通常指的是在整个程序执行期间都可以访问的内存区域。这是在程序的全局范围内定义的变量,可以在程序的任何地方使用。
作用: 全局RAM中的变量在程序的所有函数和模块中都是可见的。这使得这些变量成为共享数据,可以在整个程序中使用。通常,全局RAM用于存储全局状态、配置参数、以及在不同部分之间共享的数据。
Local RAM(局部RAM):
定义: Local RAM 则是在特定函数或代码块中定义的局部变量的内存区域。这些变量只在其被定义的函数或代码块的执行期间存在,离开该函数或代码块后,这些变量的内存可能会被释放。
作用: 局部RAM用于存储临时变量、函数参数以及其他仅在函数执行期间需要的数据。局部变量的作用域仅限于定义它们的函数,这有助于隔离不同部分的数据,提高代码的可维护性和安全性。
在典型的嵌入式系统和单片机中,由于资源有限,全局RAM和局部RAM的合理使用对于优化内存和提高系统性能都非常重要。程序员需要根据程序的需求和设计目标,合理地管理全局和局部变量的内存使用。
3.2单核MCU
特性:不带cache和SPM,主频一般不高于400MHZ
3.3 多核MCU
特性:带cache和SPM,主频一般300 - 800 MZH
3.4 多核异构
特性:带有cache 和SPM 主频一般大于800Mhz,有外接 flash和DRAM,通过memory 控制器映射可以访问。进程内有L缓存,进程间有L2缓存,核间有L3缓存。
四、不同的mapping对性能的影响。
4.1 背景
在汽车软件开发中,通常会用到ETH或者CAN,这中大数据的频繁更新会消耗大量的cpu资源。如果我们利用上述的特性,会大大提高cpu的利用率,提高性能。例如把ETHbuffer或者canbuffer mapping到不同的内存中。
4.2mapping到 global RAM
4.3 mapping到local RAM
4.4 mapping 到 local ram 带SPM
4.5 硬件校验
如果硬件带校验功能,可以把一些必要的计算交给硬件处理,会大幅度提高性能
4.6小结
要实现代码的高性能运行要注意以下几点:
1.高频率访问的代码尽量放到SPM。
2.通讯总线会占用极高的内存资源,要把共享代码放到cache中。
3.尽量开启cache,如果涉及到多核数据交互和数据一致性请仔细甄别。
4.检查第三方包中的缓存配置。
5.评估工程中的数据哪些该放到什么类型的内存中,通用规则:离cpu越近的内存速度越快。
6.通常情况下mcu的主频不会决定性能瓶颈,内存才会决定。