单片机内外部RAM
下面主要讲小芯片,即连MCU都算不上的一些小芯片。
芯片基本都包括其内部的RAM、外部RAM、EEPROM、Flash 等
Flash 程序存储器,其有擦写寿命,而且小芯片的Flash擦写寿命都不高,所有在程序中
最好不要随意的去擦写。不过有些数据需要掉电不丢失,而操作次数不多的话可以考虑动
态存储在Flash中。
存储大小对于芯片来说是很紧张的一件事情。一个小芯片的存储容量是很有限的。
虽然 比尔盖茨说过:64K is enough for everybody ! 但是这是针对程序存储器而言。
小芯片的内部RAM容量都很小,但是访问速度很快。外部RAM容量相对较大,但是访
问速度慢。 而且芯片寻址在内部的基础上还增加了两位。 也就是说内部指针变量大小
两个
字节的话,外部指针变量大小则要占四个字节(有的芯片是三个字节)。
一般在芯片编程的时候,新手很少去注意变量定义在哪里,指针指向的变量是外部
RAM的还是内部RAM的。因为直接用C编出来实现功能就OK了,哪还管那么多。其实
不然。做程序员就要做一个有洁癖的程序员,追求代码质量。
在处理内外部RAM时,使用很频繁的变量放在内部RAM中,不怎么频繁访问的常
量就放在外部RAM。 当内部RAM快用完了,怎么办呢?直接就用外部RAM吗?但是这
样访问速度就慢了。怎么去解决这个问题,很容易做到。首先将变量定义在外部RAM
中,然后在内部RAM中定义一个指针,该指针指向外部RAM变量。注意指针变量不要
定义在外部RAM中,这样起不到提高访问速度的效果。
现在就剩下最后一个问题了,如何指定变量定义在外部RAM和内部RAM中呢?这
个问题当你拿到芯片手册和该芯片配套编译器说明的时候,你就可以从上面找到。
51单片机大家都很熟悉,它就有伪指令,去指定变量定义在内部RAM还是外部RAM,
还可以直接把变量写入Flash中。芯片编译器会说明这些细节,还有不要过分相信编译
器。