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
|
else
|
||||||
bufferPos = pushWord(0, bufferPos);
|
bufferPos = pushWord(0, bufferPos);
|
||||||
|
|
||||||
bufferPos = _tableObjects[i]->save(buffer);
|
//bufferPos = _tableObjects[i]->save(buffer);
|
||||||
|
flashPos = _platform.writeNonVolatileMemory(flashPos, buffer, bufferPos - buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
_platform.commitNonVolatileMemory();
|
_platform.commitNonVolatileMemory();
|
||||||
|
@ -137,7 +137,9 @@ void Platform::commitNonVolatileMemory()
|
|||||||
{
|
{
|
||||||
writeBufferedEraseBlock();
|
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();
|
uint32_t end = bufferedEraseBlockEnd();
|
||||||
|
|
||||||
ptrdiff_t offset = relativeAddress - start;
|
ptrdiff_t offset = relativeAddress - start;
|
||||||
ptrdiff_t length = end - relativeAddress;
|
ptrdiff_t length = min(end - relativeAddress, size);
|
||||||
memcpy(_eraseblockBuffer + offset, buffer, length);
|
memcpy(_eraseblockBuffer + offset, buffer, length);
|
||||||
_bufferedEraseblockDirty = true;
|
_bufferedEraseblockDirty = true;
|
||||||
|
|
||||||
@ -170,7 +172,7 @@ void Platform::loadEraseblockContaining(uint32_t relativeAddress)
|
|||||||
fatalError();
|
fatalError();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (blockNum != _bufferedEraseblockNumber)
|
if (blockNum != _bufferedEraseblockNumber && _bufferedEraseblockNumber >= 0)
|
||||||
writeBufferedEraseBlock();
|
writeBufferedEraseBlock();
|
||||||
|
|
||||||
bufferEraseBlock(blockNum);
|
bufferEraseBlock(blockNum);
|
||||||
@ -211,6 +213,13 @@ void Platform::writeBufferedEraseBlock()
|
|||||||
|
|
||||||
void Platform::bufferEraseBlock(uint32_t eraseBlockNumber)
|
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());
|
memcpy(_eraseblockBuffer, userFlashStart() + eraseBlockNumber * flashEraseBlockSize() * flashPageSize(), flashEraseBlockSize() * flashPageSize());
|
||||||
|
|
||||||
_bufferedEraseblockNumber = eraseBlockNumber;
|
_bufferedEraseblockNumber = eraseBlockNumber;
|
||||||
|
Loading…
Reference in New Issue
Block a user