mirror of
https://github.com/thelsing/knx.git
synced 2025-09-05 17:50:22 +02:00
added malloc for _EraseBlockBuffer, fixed some bugs
This commit is contained in:
parent
266287e2d1
commit
d742752e72
@ -139,7 +139,8 @@ void Memory::writeMemory()
|
||||
else
|
||||
bufferPos = pushWord(0, bufferPos);
|
||||
|
||||
bufferPos = _tableObjects[i]->save(buffer);
|
||||
//bufferPos = _tableObjects[i]->save(buffer);
|
||||
flashPos = _platform.writeNonVolatileMemory(flashPos, buffer, bufferPos - buffer);
|
||||
}
|
||||
|
||||
_platform.commitNonVolatileMemory();
|
||||
|
@ -137,7 +137,9 @@ void Platform::commitNonVolatileMemory()
|
||||
{
|
||||
writeBufferedEraseBlock();
|
||||
|
||||
// _bufferedEraseblockNumber = -1; // does that make sense?
|
||||
free(_eraseblockBuffer);
|
||||
_eraseblockBuffer = nullptr;
|
||||
_bufferedEraseblockNumber = -1; // does that make sense?
|
||||
}
|
||||
}
|
||||
|
||||
@ -150,7 +152,7 @@ uint32_t Platform::writeNonVolatileMemory(uint32_t relativeAddress, uint8_t* buf
|
||||
uint32_t end = bufferedEraseBlockEnd();
|
||||
|
||||
ptrdiff_t offset = relativeAddress - start;
|
||||
ptrdiff_t length = end - relativeAddress;
|
||||
ptrdiff_t length = min(end - relativeAddress, size);
|
||||
memcpy(_eraseblockBuffer + offset, buffer, length);
|
||||
_bufferedEraseblockDirty = true;
|
||||
|
||||
@ -170,7 +172,7 @@ void Platform::loadEraseblockContaining(uint32_t relativeAddress)
|
||||
fatalError();
|
||||
}
|
||||
|
||||
if (blockNum != _bufferedEraseblockNumber)
|
||||
if (blockNum != _bufferedEraseblockNumber && _bufferedEraseblockNumber >= 0)
|
||||
writeBufferedEraseBlock();
|
||||
|
||||
bufferEraseBlock(blockNum);
|
||||
@ -211,6 +213,13 @@ void Platform::writeBufferedEraseBlock()
|
||||
|
||||
void Platform::bufferEraseBlock(uint32_t eraseBlockNumber)
|
||||
{
|
||||
if(_bufferedEraseblockNumber == eraseBlockNumber)
|
||||
return;
|
||||
|
||||
if(_eraseblockBuffer == nullptr)
|
||||
{
|
||||
_eraseblockBuffer = (uint8_t*)malloc(flashEraseBlockSize() * flashPageSize());
|
||||
}
|
||||
memcpy(_eraseblockBuffer, userFlashStart() + eraseBlockNumber * flashEraseBlockSize() * flashPageSize(), flashEraseBlockSize() * flashPageSize());
|
||||
|
||||
_bufferedEraseblockNumber = eraseBlockNumber;
|
||||
|
Loading…
Reference in New Issue
Block a user