diff --git a/Config.cpp b/Config.cpp index 14331c8b..675b5d83 100644 --- a/Config.cpp +++ b/Config.cpp @@ -29,7 +29,7 @@ struct ConfigBlock const void* Data() const; uint CopyTo(Buffer& bs) const; - bool Init(const char* name, const Buffer& bs); + bool Init(const String& name, const Buffer& bs); bool Write(const Storage& storage, uint addr, const Buffer& bs); bool Remove(const Storage& storage, uint addr); }; @@ -73,28 +73,19 @@ uint ConfigBlock::CopyTo(Buffer& bs) const } // 构造一个新的配置块 -bool ConfigBlock::Init(const char* name, const Buffer& bs) +bool ConfigBlock::Init(const String& name, const Buffer& bs) { - if(name == nullptr) return false; - //assert_param2(name, "配置块名称不能为空"); + if(!name) return false; TS("ConfigBlock::Init"); - uint slen = strlen(name); - if(slen > sizeof(Name)) return false; - - if(slen > ArrayLength(Name)) slen = ArrayLength(Name); - - Buffer ns(Name, ArrayLength(Name)); - // 无论如何,把整个名称区域清空 - ns.Clear(); + if(name.Length() > sizeof(Name)) return false; // 配置块的大小,只有第一次能够修改,以后即使废弃也不能修改,仅仅清空名称 if(bs.Length() > 0) { Size = bs.Length(); - ns.SetLength(slen); - ns = name; + name.CopyTo(0, Name, -1); } Hash = GetHash(); @@ -169,26 +160,23 @@ bool CheckSignature(const Storage& st, uint& addr, bool create) } // 循环查找配置块 -const ConfigBlock* FindBlock(const Storage& st, uint addr, const char* name) +const ConfigBlock* FindBlock(const Storage& st, uint addr, const String& name) { TS("Config::Find"); - if(name == nullptr) return nullptr; - //assert_param2(name, "配置段名称不能为空"); + if(!name) return nullptr; if(!CheckSignature(st, addr, false)) return nullptr; // 第一个配置块 auto cfg = (const ConfigBlock*)addr; - uint slen = strlen(name); - if(slen > sizeof(cfg->Name)) return nullptr; - //assert_param2(slen <= sizeof(cfg->Name), "配置段名称最大4个字符"); + if(name.Length() > sizeof(cfg->Name)) return nullptr; // 遍历链表,找到同名块 while(cfg->Valid()) { - if(cfg->Name[0] && memcmp(name, cfg->Name, slen) == 0) return cfg; + if(cfg->Name[0] && name == cfg->Name) return cfg; cfg = cfg->Next(); } @@ -218,7 +206,7 @@ const ConfigBlock* NewBlock(const Storage& st, uint addr, int size) } // 循环查找配置块 -const void* Config::Find(const char* name) const +const void* Config::Find(const String& name) const { return FindBlock(Device, Address, name); } @@ -240,12 +228,12 @@ const void* Config::New(int size) const } // 删除 -bool Config::Remove(const char* name) const +bool Config::Remove(const String& name) const { //return Set(name, ByteArray(0)); TS("Config::Remove"); - if(name == nullptr) return nullptr; + if(!name) return false; auto cfg = FindBlock(Device, Address, name); if(!cfg) return false; @@ -258,13 +246,11 @@ bool Config::Remove(const char* name) const } // 根据名称更新块 -const void* Config::Set(const char* name, const Buffer& bs) const +const void* Config::Set(const String& name, const Buffer& bs) const { TS("Config::Set"); - if(name == nullptr) return nullptr; - //assert_param2(name, "配置块名称不能为空"); - //assert_param2(Device, "未指定配置段的存储设备"); + if(!name) return nullptr; auto cfg = FindBlock(Device, Address, name); if(!cfg) cfg = NewBlock(Device, Address, bs.Length()); @@ -279,12 +265,11 @@ const void* Config::Set(const char* name, const Buffer& bs) const } // 获取配置数据 -bool Config::Get(const char* name, Buffer& bs) const +bool Config::Get(const String& name, Buffer& bs) const { TS("Config::Get"); - if(name == nullptr) return false; - //assert_param2(name, "配置块名称不能为空"); + if(!name) return false; auto cfg = FindBlock(Device, Address, name); if(!cfg) return false; @@ -292,12 +277,11 @@ bool Config::Get(const char* name, Buffer& bs) const return cfg->CopyTo(bs) > 0; } -const void* Config::Get(const char* name) const +const void* Config::Get(const String& name) const { TS("Config::GetByName"); - if(name == nullptr) return nullptr; - //assert_param2(name, "配置块名称不能为空"); + if(!name) return nullptr; auto cfg = FindBlock(Device, Address, name); if(cfg && cfg->Size) return cfg->Data(); @@ -306,7 +290,7 @@ const void* Config::Get(const char* name) const } /*// 获取配置数据,如果不存在则覆盖 -bool Config::GetOrSet(const char* name, Buffer& bs) const +bool Config::GetOrSet(const String& name, Buffer& bs) const { TS("Config::GetOrSet"); diff --git a/Config.h b/Config.h index 47ee3852..9412eccb 100644 --- a/Config.h +++ b/Config.h @@ -19,19 +19,19 @@ public: Config(const Storage& st, uint addr, uint size); // 查找。size不为0时表示要查找该大小的合适配置块 - const void* Find(const char* name) const; + const void* Find(const String& name) const; // 创建一个指定大小的配置块 const void* New(int size) const; // 删除。仅清空名称,并不删除数据区 - bool Remove(const char* name) const; + bool Remove(const String& name) const; // 设置配置数据 - const void* Set(const char* name, const Buffer& bs) const; + const void* Set(const String& name, const Buffer& bs) const; // 获取配置数据 - bool Get(const char* name, Buffer& bs) const; + bool Get(const String& name, Buffer& bs) const; // 获取配置数据,如果不存在则覆盖 //bool GetOrSet(const char* name, Buffer& bs) const; // 获取配置数据 - const void* Get(const char* name) const; + const void* Get(const String& name) const; // 当前 static const Config* Current; diff --git a/Debug.cpp b/Debug.cpp index c2f46a80..0c7bfd47 100644 --- a/Debug.cpp +++ b/Debug.cpp @@ -2,6 +2,8 @@ #include "Platform\stm32.h" +#include + // 仅用于调试使用的一些函数实现,RTM不需要 #define MEM_DEBUG DEBUG @@ -313,6 +315,7 @@ void ShowFault(uint exception) #else +#if defined ( __CC_ARM ) # include // 发行版不允许抛出异常以及显示异常信息,这将极大减小使用C++标准库所带来的固件膨胀 @@ -324,5 +327,6 @@ void _RWSTD_EXPORT __rw_throw (int, ...) } _RWSTD_NAMESPACE_END // __rw +#endif #endif diff --git a/Net/ITransport.h b/Net/ITransport.h index 9c97a27b..dfe45189 100644 --- a/Net/ITransport.h +++ b/Net/ITransport.h @@ -44,9 +44,9 @@ public: virtual void Register(TransportHandler handler, void* param = nullptr); #if DEBUG - virtual const char* ToString() const { return "ITransport"; } + virtual String ToString() const { return String("ITransport"); } #else - virtual const char* ToString() const { return ""; } + virtual String ToString() const { return String(""); } #endif protected: @@ -76,7 +76,7 @@ public: virtual void Set(ITransport* port); - virtual const char* ToString() const { return "PackPort"; } + virtual String ToString() const { return String("PackPort"); } protected: virtual bool OnOpen(); diff --git a/Platform/Boot_F1.cpp b/Platform/Boot_F1.cpp index 4f1f391c..75998861 100644 --- a/Platform/Boot_F1.cpp +++ b/Platform/Boot_F1.cpp @@ -2,7 +2,7 @@ extern "C" { - uint32_t HSE_VALUE = 8000000; + unsigned int HSE_VALUE = 8000000; uint32_t SystemCoreClock = 72000000; __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; diff --git a/TinyNet/TinyMessage.cpp b/TinyNet/TinyMessage.cpp index 457c86a4..cd18f08e 100644 --- a/TinyNet/TinyMessage.cpp +++ b/TinyNet/TinyMessage.cpp @@ -358,9 +358,10 @@ void TinyController::ShowMessage(const TinyMessage& msg, bool send, const ITrans if(st) { msg_printf("Mac="); - if(strcmp(port->ToString(), "R24") == 0) + auto name = port->ToString(); + if(name == "R24") ByteArray(st, 5).Show(); - else if(strcmp(port->ToString(), "ShunCom") == 0) + else if(name == "ShunCom") ByteArray(st, 2).Show(); else ByteArray(st, 6).Show(); diff --git a/Type.cpp b/Type.cpp index 0fdda0dd..d6645039 100644 --- a/Type.cpp +++ b/Type.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include "Sys.h" //#include "Type.h"