科普Ram与Rom


前言

RAM和ROM等存储单元的物理地址映射是由做硬件的数字工程师确定,他们在划分时主要会考虑电路的延迟,将这些储存单元按照一定的方式挂在同一条AHB总线上。
而嵌入式平台软件工程师可以通过修改链接脚本来设置哪些数据、代码在程序运行时放在ROM里,哪些放在RAM里.
这里多说一句,RAM在系统刚上电的时候,其内容是随机的。所谓的数据、代码放在RAM里,是指在初始化时,CPU从flash里读下载的bin文件,也有的平台下载的是hex文件,找出其中的ram段,以类似于memcpy的方式将数据从bin文件里的对应位置拷贝到RAM映射到的物理地址里,这才是所谓的放在RAM里。


一、RAM的分类

RAM分为很多种,关于SRAM、DDR、SDRAM、PSRAM等等,从软件的角度笼统一点,分为片内和片外ram。
对于软件工程师的来说,它们的区别就是访问速度,片内ram一般用TCM(Tightly Coupled Memory)的方式集成在CPU芯片内部,有单独的数据通道,它的访问速度可以和cache相媲美,而片外ram的访问要麻烦一些,CPU发出想访问的地址给AHB总线控制器,它会知道对应的地址是在片外RAM里,将访问请求递给RAM控制器,再由RAM控制器访问RAM后将数据返回。

大体上片内的访问速度是片外RAM的1.5~2倍。片内ram集成在CPU芯片内部,它是在CPU设计时就加上的,它使用和CPU几乎一样的制作工艺和材料,而且增加了芯片的大小,所以成本比较高,一般也就只有几十K字节,好钢当然要用在刀刃上,片内ram用来存放中断处理handler、RTOS调度器、任务上下文切换、内存分配释放等使用频率最高的代码和中断堆栈这种读写频率极高的内存区,如果有多余的部分也可以放一些经常被引用到的全局变量。

片外RAM一般就是采购的市面上的成品,如Samsung,Hynix,Apmemory等,价格相对便宜,其容量的可选范围也较为宽松,从几M到几G的都有,它可以用来存储全局变量,bss,以及我们常用到的malloc所分配的堆空间等。

还有一点不同的是:片内Ram上电就可以直接使用,而片外的RAM都需要一个硬件控制器完成对其时序的控制,软件人员则需要对该控制器编写专用的控制驱动。

二、ROM的分类

ROM一般是有两种,一种是指集成在CPU芯片内部的一块只读存储区域,一般是几K到几十K字节大小,用来存储系统刚上电时对cpu和一些核心外设(如时钟,串口,MMU、DRAM、Flash等)进行初始化的代码。

它在程序运行中也是不可写的,要对它执行写操作只能使用硬件烧写器进行,也就是一般所说的下载程序,这部分的代码在芯片测试阶段可以进行编程器下载更新,量产后一般就会固化,不能做任何修改的。另一种指的就是flash。首先需要说明的是,很多做嵌入式应用开发的同学一直把flash比作PC上的硬盘,其实它们指的是Nand flash,而对于很多小型的嵌入式系统,就只有一个2M或者4M的Nor Flash。它和硬盘有一个显著的区别:flash里存放的代码是可以由CPU直接取指并执行的,而PC上硬盘里的程序都需要加载到内存里才能运行。

flash并不是绝对的运行时不可写,有时候应用程序需要保存一些配置信息到flash里,类似于PC程序的配置文件,以保证掉电了之后它的内容不会丢失,下次开机时可以直接从flash读取到。不过,flash的写操作要比RAM麻烦的多了,flash在写之前需要发送多个命令字来握手,还要先对即将要写的地址所在的扇区进行整体擦除,就是把该扇区里的内容全设为1,所谓写flash就是把其中的一些bit设为0。

更要命的是,flash的每个独立bit位的写次数是有上限的,市面上大部分的产品都只能写10~100万次。多说一句,每个bit位的寿命是独立的,如果一个bit位在擦除和写的动作中,它的值始终为1,则不会有影响;例如反复对一个地址写0xF0,则不会影响高4bit的寿命,而低4bit每次都要先擦成1,再写入0,这样就会降低其寿命。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值