Merge pull request #316 from thewhobox/fix/unloading

Permanently unload device
This commit is contained in:
thelsing 2025-07-21 19:02:42 +02:00 committed by GitHub
commit e2642b64ca
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 23 additions and 0 deletions

5
examples/knx-demo/.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
.pio
.vscode/.browse.c_cpp.db*
.vscode/c_cpp_properties.json
.vscode/launch.json
.vscode/ipch

View File

@ -49,6 +49,7 @@ void BauSystemBDevice::loop()
#ifdef USE_DATASECURE #ifdef USE_DATASECURE
_appLayer.loop(); _appLayer.loop();
#endif #endif
_memory.loop();
} }
void BauSystemBDevice::sendNextGroupTelegram() void BauSystemBDevice::sendNextGroupTelegram()

View File

@ -301,10 +301,15 @@ void Memory::freeMemory(uint8_t* ptr)
removeFromUsedList(block); removeFromUsedList(block);
addToFreeList(block); addToFreeList(block);
_saveTimeout = millis();
} }
void Memory::writeMemory(uint32_t relativeAddress, size_t size, uint8_t* data) void Memory::writeMemory(uint32_t relativeAddress, size_t size, uint8_t* data)
{ {
if(_saveTimeout != 0)
{
_saveTimeout = millis();
}
_platform.writeNonVolatileMemory(relativeAddress, data, size); _platform.writeNonVolatileMemory(relativeAddress, data, size);
} }
@ -541,3 +546,13 @@ VersionCheckCallback Memory::versionCheckCallback()
{ {
return _versionCheckCallback; return _versionCheckCallback;
} }
void Memory::loop()
{
if(_saveTimeout != 0 && millis() - _saveTimeout > 5000)
{
println("saveMemory timeout");
_saveTimeout = 0;
writeMemory();
}
}

View File

@ -46,6 +46,7 @@ class Memory
void clearMemory(); void clearMemory();
void addSaveRestore(SaveRestore* obj); void addSaveRestore(SaveRestore* obj);
void addSaveRestore(TableObject* obj); void addSaveRestore(TableObject* obj);
void loop();
uint8_t* allocMemory(size_t size); uint8_t* allocMemory(size_t size);
void freeMemory(uint8_t* ptr); void freeMemory(uint8_t* ptr);
@ -82,4 +83,5 @@ class Memory
MemoryBlock* _freeList = nullptr; MemoryBlock* _freeList = nullptr;
MemoryBlock* _usedList = nullptr; MemoryBlock* _usedList = nullptr;
uint16_t _metadataSize = 6 + LEN_HARDWARE_TYPE; // accounting for 3x pushWord and pushByteArray of length LEN_HARDWARE_TYPE uint16_t _metadataSize = 6 + LEN_HARDWARE_TYPE; // accounting for 3x pushWord and pushByteArray of length LEN_HARDWARE_TYPE
unsigned long _saveTimeout = 0;
}; };