.Net Micro Framework研究—数据的永久存储

简介: 感谢Donald Thompson 和 Rob S. Miles,从他们的大作上找到了问题的解决办法。办法就是把对象保存到Flash(EEPROM)中(有点像对象的二进制序列化)。

.Net Micro Framework不支持文件系统(目前该项功能正在研发之中),所以无法像Windows和windows ce平台那样把需要永久保存的数据保存到文件之中。内存中保存的数据只要系统一掉电,所有的数据也都消失了,这对一些需要保存参数的应用来说真是不妙。
这几天在研究MF触摸屏功能时就遇到该问题,因为触摸屏校准之后,需要保存校准后的参数,否则MF一重启,难道还需要重新校准不成?
 感谢Donald Thompson 和 Rob S. Miles,从他们的大作上找到了问题的解决办法。办法就是把对象保存到Flash(EEPROM)中(有点像对象的二进制序列化)。
下面是我整理的示例代码(实现比较简单,但总觉得不太正规,不知道能存多大,也搞不清楚数据到底存放在什么位置了。):

using System;
using Microsoft.SPOT;
using System.Collections;
using System.Threading;
 
namespace DataStorage
{
    public class Program
    {      
        public static void Main()
        {
            FlashDatas fd = FlashDatas.Load();
            fd.dump();
            fd.Flag = "adfg";
            //fd.Items.Clear();               
            //fd.AddItem(new FlashData(55, "1aaa"));
            //fd.AddItem(new FlashData(66, "2bbb"));
            //fd.AddItem(new FlashData(77, "3ccc"));
            //fd.AddItem(new FlashData(88, "4ddd"));
            fd.Save();
            Thread.Sleep(3000);            
        }
 
        [Serializable]
        private class FlashData
        {
            public DateTime date;
            public int iData;
            public string sData;
            public FlashData(int iData, string sData)
            {
                date = DateTime.Now;
                this.iData = iData;
                this.sData = sData;
            }
 
            public override string ToString()
            {
                return date.ToString() + " " + iData.ToString() + " " + sData;
            }
        }
 
        [Serializable]
        private class FlashDatas
        {
            public DateTime CreateTime = DateTime.Now;
            public string Flag = @"http://blog.csdn.net/yefanqiu/";
            public ArrayList Items = new ArrayList();
 
            public void dump()
            {
                Debug.Print(CreateTime.ToString());
                Debug.Print(Flag);
                foreach (FlashData Item in Items)
                {
                    if (Item != null)
                    {
                        Debug.Print(Item.ToString());
                    }
                }
            }
            public void AddItem(FlashData Item)
            {
                Items.Add(Item);
            }
 
            //调入数据
            public static FlashDatas Load()
            {
                ExtendedWeakReference ewr = ExtendedWeakReference.RecoverOrCreate(
                        typeof(FlashDatas),                       //类型,任意类都可以,其名称起到一个索引作用
                        0,                                        //ID号,这个数据比较有用,不同ID号代表不同数据
                        ExtendedWeakReference.c_SurvivePowerdown);//该标志和.c_SurviveBoot 区别不大
                ewr.Priority = (Int32)ExtendedWeakReference.PriorityLevel.Important;
 
                FlashDatas data = ewr.Target as FlashDatas;
                if (data == null)
                {
                    data = new FlashDatas();
                }
                return data;
            }        
 
            //保存数据
            public void Save()
            {
                ExtendedWeakReference ewr = ExtendedWeakReference.RecoverOrCreate(typeof(FlashDatas), 0, ExtendedWeakReference.c_SurvivePowerdown);
                ewr.Priority = (Int32)ExtendedWeakReference.PriorityLevel.Important;
                ewr.Target = this;
            }
        }
    }
}

以上代码在Digi开发板上测试成功,断电之后,再上电,保存的数据确实没有丢失。
MSDN中相关函数的说明如下:
ExtendedWeakReference Members
The following tables list the members exposed by the ExtendedWeakReference type.
Public Constructors
1.png

相关文章
|
1月前
|
API C++ Windows
Visual C++运行库、.NET Framework和DirectX运行库的作用及常见问题解决方案,涵盖MSVCP140.dll丢失、0xc000007b错误等典型故障的修复方法
本文介绍Visual C++运行库、.NET Framework和DirectX运行库的作用及常见问题解决方案,涵盖MSVCP140.dll丢失、0xc000007b错误等典型故障的修复方法,提供官方下载链接与系统修复工具使用指南。
499 2
|
4月前
|
C++ Windows
.NET Framework安装不成功,下载`NET Framework 3.5`文件,Microsoft Visual C++
.NET Framework常见问题及解决方案汇总,涵盖缺失组件、安装失败、错误代码等,提供多种修复方法,包括全能王DLL修复工具、微软官方运行库及命令行安装等,适用于Windows系统,解决应用程序无法运行问题。
343 3
|
1月前
|
开发框架 安全 .NET
Microsoft .NET Framework 3.5、4.5.2、4.8.1,适用于 Windows 版本的 .NET,Microsoft C Runtime等下载
.NET Framework是Windows平台的开发框架,包含CLR和FCL,支持多种语言开发桌面、Web应用。常用版本有3.5、4.5.2、4.8.1,系统可同时安装多个版本,确保软件兼容运行。
545 0
Microsoft .NET Framework 3.5、4.5.2、4.8.1,适用于 Windows 版本的 .NET,Microsoft C Runtime等下载
|
2月前
|
C++
提示缺少.NET Framework 3.5 安装错误:0x80070002、0x800F0950\0x80004002
.NET Framework常见问题及解决方法汇总,
454 0
|
3月前
.NET Framework 3.5离线安装包合集下载
本文介绍了如何获取和安装.NET Framework运行库离线合集包。用户可通过提供的链接下载安装包,安装过程简单,按提示逐步操作即可完成。安装时可选择所需版本,工具会自动适配架构,无需手动判断,方便高效。
1531 0
|
4月前
|
C++ Windows
WindowsDLL修复专家,MSVCP**、DLL修复vcruntime**、DLL修复、`.Net Framework`缺失、DirectX类DLL修复、VC运行库修复
Windows DLL修复专家是一款专为解决因DLL文件缺失、版本错误导致的软件或游戏无法运行问题的系统工具。它支持一键扫描和修复各类DLL异常,涵盖MSVCP、vcruntime、.NET Framework、DirectX等多种常见问题。具备自动检测、备份还原功能,确保修复过程安全可靠。适用于软件报错、系统异常及新系统适配场景,降低用户手动修复门槛,提升系统稳定性与兼容性。
196 3
使用的是.NET Framework 4.0,并且需要使用SMTP协议发送电子邮件
使用的是.NET Framework 4.0,并且需要使用SMTP协议发送电子邮件
182 1
|
9月前
|
人工智能 机器人
D1net阅闻 | 谷歌DeepMind研究发现LLM新特性
D1net阅闻 | 谷歌DeepMind研究发现LLM新特性
|
开发框架 缓存 监控
NET Framework 到 .NET 5/6 的迁移是重大的升级
本文详细介绍了从 .NET Framework 4.8 迁移到 .NET 5/6 的过程,通过具体案例分析了迁移策略与最佳实践,包括技术栈评估、代码迁移、依赖项更新及数据库访问层的调整,强调了分阶段迁移、保持代码可维护性及性能监控的重要性。
189 3

热门文章

最新文章

下一篇
oss云网关配置