Flipped multi-byte AVR8 register values in AVR8 EDBG driver (AVR8 registers are stored LSB, so they needed to be flipped to MSB)

This commit is contained in:
Nav
2021-08-31 19:45:05 +01:00
parent ff820d8983
commit 6907b79880

View File

@@ -1239,11 +1239,21 @@ TargetRegisters EdbgAvr8Interface::readRegisters(const TargetRegisterDescriptors
// Construct our TargetRegister objects directly from the flat memory buffer // Construct our TargetRegister objects directly from the flat memory buffer
for (const auto& descriptor : descriptors) { for (const auto& descriptor : descriptors) {
const auto bufferStartIt = flatMemoryBuffer.begin() + (descriptor->startAddress.value() - startAddress); /*
* Multi-byte AVR8 registers are stored in LSB form.
*
* This is why we use reverse iterators when extracting our data from flatMemoryBuffer. Doing so allows
* us to extract the data in MSB form (as is expected for all register values held in TargetRegister
* objects).
*/
const auto bufferStartIt = flatMemoryBuffer.rend() - (descriptor->startAddress.value() - startAddress)
- descriptor->size;
output.emplace_back( output.emplace_back(
TargetRegister(*descriptor, TargetRegister(
TargetMemoryBuffer(bufferStartIt, bufferStartIt + descriptor->size)) *descriptor,
TargetMemoryBuffer(bufferStartIt, bufferStartIt + descriptor->size)
)
); );
} }
} }