增加系统热数据配置,记录系统启动次数

This commit is contained in:
nnhy 2015-10-22 03:38:02 +00:00
parent 75e7a4deaf
commit 9353d90a5e
2 changed files with 64 additions and 7 deletions

View File

@ -86,9 +86,17 @@ bool ConfigBlock::Write(Storage* storage, uint addr, const ByteArray& bs)
//--//
Config::Config(Storage* st, uint addr)
{
Device = st;
Address = addr;
}
// 循环查找配置块
const void* Config::Find(const char* name, bool fAppend)
{
uint c_Version = 0x534F5453; // STOS
assert_param2(name, "配置段名称不能为空");
uint addr = Address;
@ -172,15 +180,43 @@ const void* Config::Get(const char* name)
}
// Flash最后一块作为配置区
Config* Config::CreateFlash()
Config& Config::CreateFlash()
{
// 最后一块作为配置区
static Flash flash;
static Config cfg;
cfg.Device = &flash;
cfg.Address = flash.Start + flash.Size - flash.Block;
static Config cfg(&flash, flash.Start + flash.Size - flash.Block);
//cfg.Device = &flash;
//cfg.Address = flash.Start + flash.Size - flash.Block;
return &cfg;
return cfg;
}
// RAM最后一小段作为热启动配置区
Config& Config::CreateRAM()
{
// 最后一块作为配置区
static CharStorage cs;
static Config cfg(&cs, Sys.StackTop());
//cfg.Device = &cs;
//cfg.Address = Sys.StackTop();
return cfg;
}
void* HotConfig::Next() const
{
return (void*)&this[1];
}
HotConfig& HotConfig::Current()
{
static Config& cfg = Config::CreateRAM();
// 查找配置数据,如果不存在,则清空
const void* dat = cfg.Get("Hot");
if(!dat) dat = cfg.Set("Hot", ByteArray((byte)0, sizeof(HotConfig)));
return *(HotConfig*)dat;
}
// 初始化

View File

@ -10,12 +10,13 @@
class Config
{
private:
static const uint c_Version = 0x534F5453; // STOS
public:
Storage* Device;
uint Address;
Config(Storage* st, uint addr);
// 查找
const void* Find(const char* name, bool fAppend = false);
// 废弃。仅清空名称,并不删除数据区
@ -30,7 +31,9 @@ public:
// 当前
static Config* Current;
// Flash最后一块作为配置区
static Config* CreateFlash();
static Config& CreateFlash();
// RAM最后一小段作为热启动配置区
static Config& CreateRAM();
};
// 必须设定为1字节对齐否则offsetof会得到错误的位置
@ -38,6 +41,24 @@ public:
// 强制结构体紧凑分配空间
#pragma pack(1)
// 系统配置信息
class HotConfig
{
public:
ushort Times; // 启动次数
void* Next() const;
static HotConfig& Current();
};
// 系统配置信息
class SysConfig
{
public:
};
// 配置信息
class TConfig
{