如何优化MCU的ROM/RAM大小

概述

本文简单探讨了ROM/RAM的的组成和一般优化的方法,通过本文可以快速建立ROM和RAM的基本认识,并了解ROM/RAM优化的基本方向和注意点。

背景

项目中需要降本增效,因而需要选择同系列更有性价比的MCU型号,但不可避免带来的问题就是更加有限的硬件资源,ROM由原来的1MB变为500KB, RAM大小由原来的124KB变为512KB。在上述硬件资源的约束条件下,需要将原来的AutoSar平台迁移到新的硬件平台上。而实际上原有平台ROM已经使用了600KB, RAM已经使用了100KB,看起来似乎是不太可能完成的任务。

ROM/RAM的组成

参照之前一篇文章如何评估软件模块的堆栈大小概述的第一张图,ROM (Flash)主要由中断向量表、代码区和常量区(这里是值,变量在data段)组成,而RAM主要由初始化的全局变量(data段)、未初始化的全局变量(bss段)、堆区和栈区。

ROM RAM
中断向量表、代码区、常量区 data区、bss区、堆栈

基本上所有的MCU内存分区都由上述几个方面组成,不同的芯片或者编译器可能叫法会有些许差异。
以S32K146为例,其内存分布如下:


MEMORY
{
   
  /* Flash */
  m_interrupts          (RX)  : ORIGIN = 0x00000000, LENGTH = 0x00000400
  m_flash_config        (RX)  : ORIGIN = 0x00000400, LENGTH = 0x00000010
  m_text                (RX)  : ORIGIN = 0x00000410, LENGTH = 0x000FFBF0

  /* SRAM_L */
  m_data                (RW)  : ORIGIN = 0x1FFF0000, LENGTH = 0x00010000

  /* SRAM_U */
  m_data_2              (RW)  : ORIGIN = 0x20000000, LENGTH = 0x0000F000
}

/* Define output sections */
SECTIONS
{
   
  /* The startup code goes first into internal flash */
  .interrupts :
  {
   
    __VECTOR_TABLE = .;
    __interrupts_start__ = .;
    . = ALIGN(4);
    KEEP(*(.isr_vector))     /* Startup code */
    __interrupts_end__ = .;
    . = ALIGN(4);
  } > m_interrupts

  .flash_config :
  {
   
    . = ALIGN(4);
    KEEP(*(.FlashConfig)
MCU中,RAM(随机存取存储器)、ROM(只读存储器)和Flash(闪存)是三种常见的存储器类型,它们在MCU中具有不同的作用和功能。 首先,ROM是一种只读存储器,用于存储固定的程序代码和数据,它在MCU出厂时就被烧录好,无法进行修改。ROM中的程序代码和数据可以被CPU直接读取和使用,因此ROMMCU中负责存储启动程序和系统固化的各种功能,确保MCU在上电后能正常运行。 其次,RAM是一种随机存取存储器,用于存储正在运行的程序和临时数据。RAM的数据存储是易失性的,即在断电后数据会丢失。RAMMCU中用于存储CPU的运算过程中需要读写的数据,提供了程序运行的临时存储空间。因为RAM速度快且可以重写,所以RAMMCU中常被用来实现变量的存储和实时数据的缓存,是程序运行过程中频繁访问的存储器。 最后,Flash是一种非易失性存储器,也是MCU中常见的主要存储介质之一。Flash用于存储程序代码或者其他需要长久保存的数据,其数据存储在断电后不会丢失。Flash具有可擦写、可重写的特点,可以被CPU进行修改操作。它与ROM不同,Flash的内容可以在MCU运行期间被CPU通过特定的操作进行修改。 综上所述,在MCU中,ROM用于存储系统启动程序和固化的功能程序,RAM用于存储运行过程中的程序代码和临时数据,而Flash用于存储可修改的程序代码和长期存储的数据。这三种存储器类型在MCU中相互合作,为MCU的正常运行和数据的存储提供了基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alpha-PORT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值