摘要:对嵌入式设备来说,存储空间的大小无疑是一个很重要的参数,但是调试的时候我们通常无法方便地对不同内存大小的设备进行测试。这时候使用模拟器是一个很 好的选择,本文介绍了如何在.Net Micro Framework中通过代码和XML配置文件两种方式来配置模拟器的Memory(包括Ram和Flash Memory)。并使得模拟器具有持久存储的能 力。
在.Net Micro Framework中,提供了MemoryManager 类型(见Microsoft.SPOT.Emulator.Memory命名空间)来描述和模拟RAM和FLASH。不过这个类型本身并不直接提供属性 和方法来对模拟器的存储空间进行配置,而是提供了以下两个属性:RamManager和FlashManager 。这两个属性同属于微软提供的模拟器组件(Emulator Components)。它们 都是由Memorymanager跟据你的配置动态创建的。你可以在Emulator的配置文件里面来完成RAM和FLASH的配置,这我们将在后文讨论。
Random Access Memory (RAM)
前面提到的MemoryManager.RamManager是一个同名类型(RamManager)的属性,对于RamManager类型,唯一你可以设置(set)的属性就是Size,它表示了RAM的大小, 单位是byte。在配置文件里面,你需要先在”<Types>”的标签区域内将MemoryManager 和RamManager标签添加进来,这就像C#代码中的using一样,使得 EmulatorComponents内的MemoryManager 和RamManager标签能被模拟器的配置引擎解析出来。下面的XML代码演示了如何在配置文件里以一个16进制数0x2000000来设置32兆 的RAM:
<?xml version="1.0" encoding="utf-8"?> <Emulator> <Types> <MemoryManager>Microsoft.SPOT.Emulator.Memory.MemoryManager</MemoryManager> <RamManager>Microsoft.SPOT.Emulator.Memory.RamManager</RamManager> </Types> <EmulatorComponents> <MemoryManager> <RamManager type="RamManager"> <Size format="HexNumber">2000000</Size> </RamManager> </MemoryManager> </EmulatorComponents> </Emulator>
需要注意的是,模拟器的RAM默认情况下只有1Mbyte
之前我尝试在带有VGA(640x480)的LCD模拟器上尝试显示大图的时候,Visual Studio 会抛出以下异常:
Failed allocation for 51205 blocks, 614460 bytes
在System.OutOfMemoryException 中第一次偶然出现的 “Microsoft.SPOT.Graphics.dll”类型的异常
未处理的“System.OutOfMemoryException”类型的异常出现在Microsoft.SPOT.Graphics.dll 中。
在我把模拟器的内存配置为32兆之后就不再出现这个问题了。这是因为模拟器默认的RAM大小为1024kb.而我的图片640*480*16/8=bmp600kb+图片77kb+应用用程 序大小已经超过了RAM的分配限制。
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索memory
, 模拟器
, 配置
, 类型
, outofmemoryexception
, emulator
, microsoft
, 模拟器详解
模拟命名空间
.net micro framework、micro framework、micro framework 4.5、microframework、.net microframework,以便于您获取更多的相关知识。