修正配置区加载失败的BUG,触摸开关3简单测试通过
This commit is contained in:
parent
085d9856cb
commit
398b1dd70c
35
Config.cpp
35
Config.cpp
|
@ -20,7 +20,7 @@ struct ConfigBlock
|
||||||
{
|
{
|
||||||
ushort Hash;
|
ushort Hash;
|
||||||
ushort Size;
|
ushort Size;
|
||||||
char Name[4];
|
char Name[8];
|
||||||
|
|
||||||
ushort GetHash() const;
|
ushort GetHash() const;
|
||||||
bool Valid() const;
|
bool Valid() const;
|
||||||
|
@ -150,7 +150,7 @@ const void* Config::Find(const char* name) const
|
||||||
//assert_param2(name, "配置段名称不能为空");
|
//assert_param2(name, "配置段名称不能为空");
|
||||||
|
|
||||||
uint addr = Address;
|
uint addr = Address;
|
||||||
if(CheckSignature(Device, addr, false)) return NULL;
|
if(!CheckSignature(Device, addr, false)) return NULL;
|
||||||
|
|
||||||
// 第一个配置块
|
// 第一个配置块
|
||||||
auto cfg = (const ConfigBlock*)addr;
|
auto cfg = (const ConfigBlock*)addr;
|
||||||
|
@ -176,13 +176,12 @@ const void* Config::New(int size) const
|
||||||
TS("Config::New");
|
TS("Config::New");
|
||||||
|
|
||||||
uint addr = Address;
|
uint addr = Address;
|
||||||
if(CheckSignature(Device, addr, true)) return NULL;
|
if(!CheckSignature(Device, addr, true)) return NULL;
|
||||||
|
|
||||||
// 第一个配置块
|
// 第一个配置块
|
||||||
auto cfg = (const ConfigBlock*)addr;
|
auto cfg = (const ConfigBlock*)addr;
|
||||||
|
|
||||||
// 找一块合适大小的空闲区域
|
// 找一块合适大小的空闲区域
|
||||||
cfg = (const ConfigBlock*)addr;
|
|
||||||
while(cfg->Valid())
|
while(cfg->Valid())
|
||||||
{
|
{
|
||||||
if(cfg->Name[0] == 0 && cfg->Size == size) return cfg;
|
if(cfg->Name[0] == 0 && cfg->Size == size) return cfg;
|
||||||
|
@ -191,8 +190,10 @@ const void* Config::New(int size) const
|
||||||
}
|
}
|
||||||
|
|
||||||
// 实在没办法,最后划分一个新的区块。这里判断一下空间是否足够
|
// 实在没办法,最后划分一个新的区块。这里判断一下空间是否足够
|
||||||
if(Size && (uint)(byte*)cfg + sizeof(ConfigBlock) + size <= Address + Size)
|
if(Size && (uint)cfg + sizeof(ConfigBlock) + size > Address + Size)
|
||||||
{
|
{
|
||||||
|
debug_printf("Config::New 0x%08X + %d + %d 配置区(0x%08X, %d)空间不足\r\n", cfg, sizeof(ConfigBlock), size, Address, Size);
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -347,28 +348,34 @@ void ConfigBase::Load()
|
||||||
// 尝试加载配置区设置
|
// 尝试加载配置区设置
|
||||||
auto bs = ToArray();
|
auto bs = ToArray();
|
||||||
//New = !Cfg.GetOrSet(_Name, bs);
|
//New = !Cfg.GetOrSet(_Name, bs);
|
||||||
New = !Cfg.Get(_Name);
|
New = !Cfg.Get(_Name, bs);
|
||||||
if(New)
|
if(New)
|
||||||
debug_printf("%s::Load 首次运行,创建配置区!\r\n", _Name);
|
debug_printf("%s::Load 首次运行,创建配置区!\r\n", _Name);
|
||||||
else
|
else
|
||||||
debug_printf("%s::Load 从配置区加载配置\r\n", _Name);
|
debug_printf("%s::Load 从配置区加载配置 %d 字节\r\n", _Name, bs.Length());
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConfigBase::Save() const
|
void ConfigBase::Save() const
|
||||||
{
|
{
|
||||||
debug_printf("%s::Save \r\n", _Name);
|
auto bs = ToArray();
|
||||||
|
debug_printf("%s::Save %d 字节 ", _Name, bs.Length());
|
||||||
|
|
||||||
Cfg.Set(_Name, ToArray());
|
auto pt = Cfg.Set(_Name, bs);
|
||||||
|
if(pt)
|
||||||
|
debug_printf("成功 0x%08X \r\n", pt);
|
||||||
|
else
|
||||||
|
debug_printf("失败\r\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConfigBase::Clear()
|
void ConfigBase::Clear()
|
||||||
{
|
{
|
||||||
//Init();
|
debug_printf("%s::Clear ", _Name);
|
||||||
|
|
||||||
debug_printf("%s::Clear \r\n", _Name);
|
bool rs = Cfg.Remove(_Name);
|
||||||
|
if(rs)
|
||||||
//Cfg.Set(_Name, ToArray());
|
debug_printf("成功\r\n");
|
||||||
Cfg.Remove(_Name);
|
else
|
||||||
|
debug_printf("失败\r\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConfigBase::Show() const
|
void ConfigBase::Show() const
|
||||||
|
|
|
@ -5,7 +5,7 @@ TinyConfig* TinyConfig::Current = NULL;
|
||||||
|
|
||||||
TinyConfig::TinyConfig() : ConfigBase()
|
TinyConfig::TinyConfig() : ConfigBase()
|
||||||
{
|
{
|
||||||
_Name = "TCFG";
|
_Name = "TinyConf";
|
||||||
_Start = &Length;
|
_Start = &Length;
|
||||||
_End = &TagEnd;
|
_End = &TagEnd;
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ TokenConfig* TokenConfig::Current = NULL;
|
||||||
|
|
||||||
TokenConfig::TokenConfig() : ConfigBase()
|
TokenConfig::TokenConfig() : ConfigBase()
|
||||||
{
|
{
|
||||||
_Name = "TKCF";
|
_Name = "TokenCfg";
|
||||||
_Start = &Length;
|
_Start = &Length;
|
||||||
_End = &TagEnd;
|
_End = &TagEnd;
|
||||||
Init();
|
Init();
|
||||||
|
|
Loading…
Reference in New Issue