一定有工程师常常须要8位微掌握器供应的16、32、乃至64 KB的程序内存的很大一部分。那么如何充分利用MCU的非易失落性存储呢?本文将会先容如何利用多余的代码内存来开释一些Ram。
什么是只读存储器?
微掌握器存储器被分为对应于电气特性(例如,易失落性与非易失落性)和构造成分的种别,例如8051在内部数据存储器和“外部”数据存储器之间的差异(外部ram可能有点混乱,包括在芯片上)。
代码存储器,又称程序存储器或只读存储器(rom),是存储程序指令的地方。我们还称之为“闪存”,由于现在代码存储器是利用一种称为闪存的非易失落性存储技能实现的。
关于微掌握器的只读存储器,要理解的一件主要事情是它不是只读存储器。首先,如果它是真正的“只读”的,它将是毫无代价的,由于mcu的程序员硬件将无法将程序指令写入个中。更主要的是,MCU许可您从固件中写入此内存。因此,它实际上是可读的、可写的、非易失落性的存储器,可以用于一样平常的数据存储。
根据履历,在固件实行期间写入代码内存所需的过程非常繁芜,并且存在破坏flash的风险。不要利用代码内存来存储须要频繁修正的变量和数组,这些该当在数据内存中。
如果您的MCU没有足够的RAM来存储所有常常修正的变量,请利用其他MCU或添加外部内存芯片。
运行前存储
利用代码存储器补充ram的更好方法是存储常量值。这些可能是许多不同的东西:将发送到LCD模块的显示模式、将通过SPI或UART传输的固定字节或字符序列、将用于通过数模转换天生不同音频频率的估量算正弦波值等等。
用flash而不是ram存储常量值很随意马虎,由于只需在固件中包含这些值(作为普通变量或数组),并见告编译器您希望它们存储在代码内存中。对付我的编译器,我只须要在变量名之前放置关键字“code”(拜会下面的示例);编译器可能会有所不同。
无符号字符代码uart_[4]={0xaa,0xaa,0x1c,0x2d};
代码存储器有时非常丰富,可以用来存储某种基本图像或简短的数字化音频片段。
运行时存储
运行时存储是利用代码内存作为ram更换的更繁芜的方法。你必须查阅MCU的数据表,乃至是干系的运用程序解释,才能找到所需的过程并理解潜在的问题。
运行时期码内存存储对付保存设备操作期间天生的校准值非常有用。在这种情形下,紧张的优点是代码存储器是非易失落性的,由于这些类型的数据常日不会花费太多的ram。运行时期码内存存储可以帮助您处理ram限定的一个例子是,如果您须要记录一长串丈量值,这些值网络一次,然后单独保存,直到操作员将丈量值下载到pc。
结论
对付那些像我一样,在闪存耗尽之前更可能耗尽内存的人来说,程序存储器是一种有代价的资源,由于它可以使您在利用较小的微掌握器时知足系统哀求,并肃清合并外部存储器芯片的繁芜性和本钱。