diff --git a/intelhex_class/intelhexclass.cpp b/intelhex_class/intelhexclass.cpp index 96d3e49..0a979dd 100644 --- a/intelhex_class/intelhexclass.cpp +++ b/intelhex_class/intelhexclass.cpp @@ -249,6 +249,22 @@ void intelhex::addError(string errorMessage) msgError.noOfErrors = msgError.ihErrors.size(); } +/******************************************************************************* +* Overwrite data at a given location +*******************************************************************************/ +void intelhex::overwriteData(unsigned char data, unsigned long address) +{ + map::iterator ihIterator; + + ihIterator = ihContent.find(address); + if(ihIterator != ihContent.end()) + { + ihContent.erase(address); + } + + ihReturn = ihContent.insert(pair(address, data)); +} + /******************************************************************************* * Decodes a data record read in from a file *******************************************************************************/ @@ -870,11 +886,11 @@ ostream& operator<<(ostream& dataOut, intelhex& ihLocal) thisRecord = ":02000004"; checksum = 0x02 + 0x04; - dataByte = static_cast(addressOffset & 0xFF); + dataByte = static_cast((addressOffset >> 8) & 0xFF); checksum += dataByte; thisRecord += ihLocal.ucToHexString(dataByte); - dataByte = static_cast((addressOffset >> 8) & 0xFF); + dataByte = static_cast(addressOffset & 0xFF); checksum += dataByte; thisRecord += ihLocal.ucToHexString(dataByte); @@ -889,11 +905,11 @@ ostream& operator<<(ostream& dataOut, intelhex& ihLocal) thisRecord = ":02000002"; checksum = 0x02 + 0x02; - dataByte = static_cast(addressOffset & 0xFF); + dataByte = static_cast((addressOffset >> 8) & 0xFF); checksum += dataByte; thisRecord += ihLocal.ucToHexString(dataByte); - dataByte = static_cast((addressOffset >> 8) & 0xFF); + dataByte = static_cast(addressOffset & 0xFF); checksum += dataByte; thisRecord += ihLocal.ucToHexString(dataByte); @@ -932,11 +948,11 @@ ostream& operator<<(ostream& dataOut, intelhex& ihLocal) thisRecord = ":02000004"; checksum = 0x02 + 0x04; - dataByte = static_cast(addressOffset & 0xFF); + dataByte = static_cast((addressOffset >> 8) & 0xFF); checksum += dataByte; thisRecord += ihLocal.ucToHexString(dataByte); - dataByte = static_cast((addressOffset >> 8) & 0xFF); + dataByte = static_cast(addressOffset & 0xFF); checksum += dataByte; thisRecord += ihLocal.ucToHexString(dataByte); @@ -962,11 +978,11 @@ ostream& operator<<(ostream& dataOut, intelhex& ihLocal) thisRecord = ":02000002"; checksum = 0x02 + 0x02; - dataByte = static_cast(addressOffset & 0xFF); + dataByte = static_cast((addressOffset >> 8) & 0xFF); checksum += dataByte; thisRecord += ihLocal.ucToHexString(dataByte); - dataByte = static_cast((addressOffset >> 8) & 0xFF); + dataByte = static_cast(addressOffset & 0xFF); checksum += dataByte; thisRecord += ihLocal.ucToHexString(dataByte);