太阳城在线注册



澳门太阳城注册官网 嵌入式固件提示和技巧:使用只读内存释放RAM

2019-09-20 09:02:21 嵌入式开发中心 3

        本文就如何充分利用mcu的非易失性存储提供了一些想法。

一定有工程师经常需要8位微控制器提供的16、32、甚至64 KB的程序内存的很大一部分。那么如何充分利用MCU的非易失性存储呢?本文将会介绍如何使用多余的代码内存来释放一些Ram。

 

什么是只读存储器?

微控制器存储器被分为对应于电气特性(例如,易失性与非易失性)和结构因素的类别,例如8051在内部数据存储器和“外部”数据存储器之间的区别(外部ram可能有点混乱,包括在芯片上)。

代码存储器,又称程序存储器或只读存储器(rom),是存储程序指令的地方。我们还称之为“闪存”,因为现在代码存储器是使用一种称为闪存的非易失性存储技术实现的。

关于微控制器的只读存储器,要了解的一件重要事情是它不是只读存储器。首先,如果它是真正的“只读”的,它将是毫无价值的,因为mcu的程序员硬件将无法将程序指令写入其中。更重要的是,MCU允许您从固件中写入此内存。因此,它实际上是可读的、可写的、非易失性的存储器,可以用于一般的数据存储。

 

根据经验,在固件执行期间写入代码内存所需的过程非常复杂,并且存在损坏flash的风险。不要使用代码内存来存储需要频繁修改的变量和数组,这些应该在数据内存中。

如果您的MCU没有足够的RAM来存储所有经常修改的变量,请使用其他MCU或添加外部内存芯片。

未标题-1.jpg

 

运行前存储

使用代码存储器补充ram的更好方法是存储常量值。这些可能是许多不同的东西:将发送到LCD模块的显示模式、将通过SPIUART传输的固定字节或字符序列、将用于通过数模转换生成不同音频频率的预计算正弦波值等等。

flash而不是ram存储常量值很容易,因为只需在固件中包含这些值(作为普通变量或数组),并告诉编译器您希望它们存储在代码内存中。对于我的编译器,我只需要在变量名之前放置关键字“code”(参见下面的示例);编译器可能会有所不同。

无符号字符代码uart_消息[4]={0xaa,0xaa,0x1c,0x2d}

代码存储器有时非常丰富,可以用来存储某种基本图像或简短的数字化音频片段。

 

运行时存储

运行时存储是使用代码内存作为ram替换的更复杂的方法。你必须查阅MCU的数据表,甚至是相关的应用程序说明,才能找到所需的过程并了解潜在的问题。

运行时代码内存存储对于保存设备操作期间生成的校准值非常有用。在这种情况下,主要的优点是代码存储器是非易失性的,因为这些类型的数据通常不会消耗太多的ram。运行时代码内存存储可以帮助您处理ram限制的一个例子是,如果您需要记录一长串测量值,这些值收集一次,然后单独保存,直到操作员将测量值下载到pc。

 

结论

   对于那些像我一样,在闪存耗尽之前更可能耗尽内存的人来说,程序存储器是一种有价值的资源,因为它可以使您在使用较小的微控制器时满足系统要求,并消除合并外部存储器芯片的复杂性和成本。


本文由朗锐智科(www.syweixing.cn)编辑整理,如有侵权请联系本站。





24小时全国服务热线:0755-88879880

 

深圳市朗锐智科实业太阳城在线注册是深圳北航物联网研究院旗下专注物联网方案实施实现的创新企业,致力于成为“领先的物联网综合方案服务提供商”。

提供从云到端的全流程产品研发和生产服务,硬件设计涵盖单片机、ARM、X86、DSP等平台,软件开发跨Windows、linux、android及IOS等操作系统,应用技术从数据采集、工业通讯、自动化控制到机器视觉等,服务领域从电梯安全、油田监控、环保监测、铁路安全、现代农业到医疗健康等。

以物联网综合解决方案为基础,通过高效软硬件开发,服务客户的垂直行业应用,帮助客户实现物联网项目快速实施快速盈利。

在线留言
深圳市朗锐智科实业太阳城在线注册