diff --git a/src/DebugToolDrivers/Microchip/Protocols/EDBG/AVR/CommandFrames/AVR8Generic/WriteMemory.hpp b/src/DebugToolDrivers/Microchip/Protocols/EDBG/AVR/CommandFrames/AVR8Generic/WriteMemory.hpp index bd06460b..f1a1a5b3 100644 --- a/src/DebugToolDrivers/Microchip/Protocols/EDBG/AVR/CommandFrames/AVR8Generic/WriteMemory.hpp +++ b/src/DebugToolDrivers/Microchip/Protocols/EDBG/AVR/CommandFrames/AVR8Generic/WriteMemory.hpp @@ -10,7 +10,7 @@ namespace DebugToolDrivers::Microchip::Protocols::Edbg::Avr::CommandFrames::Avr8 class WriteMemory: public Avr8GenericCommandFrame> { public: - WriteMemory(const Avr8MemoryType& type, std::uint32_t address, const Targets::TargetMemoryBuffer& buffer) + WriteMemory(const Avr8MemoryType& type, std::uint32_t address, Targets::TargetMemoryBufferSpan buffer) : Avr8GenericCommandFrame() { /* diff --git a/src/DebugToolDrivers/Microchip/Protocols/EDBG/AVR/EdbgAvr8Interface.cpp b/src/DebugToolDrivers/Microchip/Protocols/EDBG/AVR/EdbgAvr8Interface.cpp index 70aa88fe..919d992e 100644 --- a/src/DebugToolDrivers/Microchip/Protocols/EDBG/AVR/EdbgAvr8Interface.cpp +++ b/src/DebugToolDrivers/Microchip/Protocols/EDBG/AVR/EdbgAvr8Interface.cpp @@ -745,7 +745,7 @@ namespace DebugToolDrivers::Microchip::Protocols::Edbg::Avr const Targets::TargetAddressSpaceDescriptor& addressSpaceDescriptor, const Targets::TargetMemorySegmentDescriptor& memorySegmentDescriptor, TargetMemoryAddress startAddress, - const TargetMemoryBuffer& buffer + Targets::TargetMemoryBufferSpan buffer ) { if (memorySegmentDescriptor.type == TargetMemorySegmentType::FLASH) { if (this->session.configVariant == Avr8ConfigVariant::XMEGA) { @@ -1484,7 +1484,7 @@ namespace DebugToolDrivers::Microchip::Protocols::Edbg::Avr void EdbgAvr8Interface::writeMemory( Avr8MemoryType type, TargetMemoryAddress startAddress, - const TargetMemoryBuffer& buffer + Targets::TargetMemoryBufferSpan buffer ) { if (type == Avr8MemoryType::FUSES && this->session.configVariant == Avr8ConfigVariant::DEBUG_WIRE) { throw Exception{"Cannot access AVR fuses via the debugWIRE interface"}; @@ -1548,7 +1548,7 @@ namespace DebugToolDrivers::Microchip::Protocols::Edbg::Avr this->writeMemory( type, startAddress + bytesWritten, - TargetMemoryBuffer{buffer.begin() + bytesWritten, buffer.begin() + bytesWritten + chunkSize} + buffer.subspan(bytesWritten, chunkSize) ); bytesWritten += chunkSize; diff --git a/src/DebugToolDrivers/Microchip/Protocols/EDBG/AVR/EdbgAvr8Interface.hpp b/src/DebugToolDrivers/Microchip/Protocols/EDBG/AVR/EdbgAvr8Interface.hpp index f2618083..b95faae3 100644 --- a/src/DebugToolDrivers/Microchip/Protocols/EDBG/AVR/EdbgAvr8Interface.hpp +++ b/src/DebugToolDrivers/Microchip/Protocols/EDBG/AVR/EdbgAvr8Interface.hpp @@ -259,7 +259,7 @@ namespace DebugToolDrivers::Microchip::Protocols::Edbg::Avr const Targets::TargetAddressSpaceDescriptor& addressSpaceDescriptor, const Targets::TargetMemorySegmentDescriptor& memorySegmentDescriptor, Targets::TargetMemoryAddress startAddress, - const Targets::TargetMemoryBuffer& buffer + Targets::TargetMemoryBufferSpan buffer ) override; /** @@ -546,7 +546,11 @@ namespace DebugToolDrivers::Microchip::Protocols::Edbg::Avr * @param address * @param buffer */ - void writeMemory(Avr8MemoryType type, Targets::TargetMemoryAddress address, const Targets::TargetMemoryBuffer& buffer); + void writeMemory( + Avr8MemoryType type, + Targets::TargetMemoryAddress address, + Targets::TargetMemoryBufferSpan buffer + ); /** * Fetches the current target state. diff --git a/src/DebugToolDrivers/Protocols/RiscVDebugSpec/DebugTranslator.cpp b/src/DebugToolDrivers/Protocols/RiscVDebugSpec/DebugTranslator.cpp index 2621c724..6a43043b 100644 --- a/src/DebugToolDrivers/Protocols/RiscVDebugSpec/DebugTranslator.cpp +++ b/src/DebugToolDrivers/Protocols/RiscVDebugSpec/DebugTranslator.cpp @@ -43,6 +43,7 @@ namespace DebugToolDrivers::Protocols::RiscVDebugSpec using ::Targets::TargetMemoryAddressRange; using ::Targets::TargetMemorySize; using ::Targets::TargetMemoryBuffer; + using ::Targets::TargetMemoryBufferSpan; using ::Targets::TargetStackPointer; using ::Targets::TargetAddressSpaceDescriptor; using ::Targets::TargetMemorySegmentDescriptor; @@ -389,7 +390,7 @@ namespace DebugToolDrivers::Protocols::RiscVDebugSpec const TargetAddressSpaceDescriptor& addressSpaceDescriptor, const TargetMemorySegmentDescriptor& memorySegmentDescriptor, TargetMemoryAddress startAddress, - const TargetMemoryBuffer& buffer + TargetMemoryBufferSpan buffer ) { using DebugModule::Registers::MemoryAccessControlField; @@ -799,7 +800,7 @@ namespace DebugToolDrivers::Protocols::RiscVDebugSpec void DebugTranslator::writeMemoryViaAbstractCommand( Targets::TargetMemoryAddress startAddress, - const TargetMemoryBuffer& buffer + Targets::TargetMemoryBufferSpan buffer ) { using DebugModule::Registers::MemoryAccessControlField; @@ -814,7 +815,7 @@ namespace DebugToolDrivers::Protocols::RiscVDebugSpec .commandType = AbstractCommandRegister::CommandType::MEMORY_ACCESS }; - for (TargetMemoryAddress offset = 0; offset < buffer.size(); offset += 4) { + for (auto offset = TargetMemoryAddress{0}; offset < buffer.size(); offset += 4) { this->dtmInterface.writeDebugModuleRegister( RegisterAddress::ABSTRACT_DATA_0, static_cast( diff --git a/src/DebugToolDrivers/Protocols/RiscVDebugSpec/DebugTranslator.hpp b/src/DebugToolDrivers/Protocols/RiscVDebugSpec/DebugTranslator.hpp index 5d473130..54ba2193 100644 --- a/src/DebugToolDrivers/Protocols/RiscVDebugSpec/DebugTranslator.hpp +++ b/src/DebugToolDrivers/Protocols/RiscVDebugSpec/DebugTranslator.hpp @@ -84,7 +84,7 @@ namespace DebugToolDrivers::Protocols::RiscVDebugSpec const Targets::TargetAddressSpaceDescriptor& addressSpaceDescriptor, const Targets::TargetMemorySegmentDescriptor& memorySegmentDescriptor, Targets::TargetMemoryAddress startAddress, - const Targets::TargetMemoryBuffer& buffer + Targets::TargetMemoryBufferSpan buffer ) override; private: @@ -146,7 +146,7 @@ namespace DebugToolDrivers::Protocols::RiscVDebugSpec ); void writeMemoryViaAbstractCommand( Targets::TargetMemoryAddress startAddress, - const Targets::TargetMemoryBuffer& buffer + Targets::TargetMemoryBufferSpan buffer ); std::optional> getAvailableTrigger(); diff --git a/src/DebugToolDrivers/TargetInterfaces/Microchip/AVR8/Avr8DebugInterface.hpp b/src/DebugToolDrivers/TargetInterfaces/Microchip/AVR8/Avr8DebugInterface.hpp index f6508c72..11328c31 100644 --- a/src/DebugToolDrivers/TargetInterfaces/Microchip/AVR8/Avr8DebugInterface.hpp +++ b/src/DebugToolDrivers/TargetInterfaces/Microchip/AVR8/Avr8DebugInterface.hpp @@ -118,7 +118,7 @@ namespace DebugToolDrivers::TargetInterfaces::Microchip::Avr8 const Targets::TargetAddressSpaceDescriptor& addressSpaceDescriptor, const Targets::TargetMemorySegmentDescriptor& memorySegmentDescriptor, Targets::TargetMemoryAddress startAddress, - const Targets::TargetMemoryBuffer& buffer + Targets::TargetMemoryBufferSpan buffer ) = 0; /** diff --git a/src/DebugToolDrivers/TargetInterfaces/RiscV/RiscVDebugInterface.hpp b/src/DebugToolDrivers/TargetInterfaces/RiscV/RiscVDebugInterface.hpp index 2a4e8a7c..fdd9f676 100644 --- a/src/DebugToolDrivers/TargetInterfaces/RiscV/RiscVDebugInterface.hpp +++ b/src/DebugToolDrivers/TargetInterfaces/RiscV/RiscVDebugInterface.hpp @@ -52,7 +52,7 @@ namespace DebugToolDrivers::TargetInterfaces::RiscV const Targets::TargetAddressSpaceDescriptor& addressSpaceDescriptor, const Targets::TargetMemorySegmentDescriptor& memorySegmentDescriptor, Targets::TargetMemoryAddress startAddress, - const Targets::TargetMemoryBuffer& buffer + Targets::TargetMemoryBufferSpan buffer ) = 0; }; } diff --git a/src/Services/TargetControllerService.cpp b/src/Services/TargetControllerService.cpp index 023828d0..278f1dbf 100644 --- a/src/Services/TargetControllerService.cpp +++ b/src/Services/TargetControllerService.cpp @@ -68,6 +68,7 @@ namespace Services using Targets::TargetMemorySize; using Targets::TargetMemoryAddressRange; using Targets::TargetMemoryBuffer; + using Targets::TargetMemoryBufferSpan; using Targets::TargetStackPointer; using Targets::TargetBreakpoint; @@ -210,14 +211,14 @@ namespace Services const TargetAddressSpaceDescriptor& addressSpaceDescriptor, const TargetMemorySegmentDescriptor& memorySegmentDescriptor, TargetMemoryAddress startAddress, - Targets::TargetMemoryBuffer&& buffer + TargetMemoryBufferSpan buffer ) const { this->commandManager.sendCommandAndWaitForResponse( std::make_unique( addressSpaceDescriptor, memorySegmentDescriptor, startAddress, - std::move(buffer) + buffer ), this->defaultTimeout, this->activeAtomicSessionId diff --git a/src/Services/TargetControllerService.hpp b/src/Services/TargetControllerService.hpp index 6603fa37..61c469ff 100644 --- a/src/Services/TargetControllerService.hpp +++ b/src/Services/TargetControllerService.hpp @@ -155,7 +155,7 @@ namespace Services const Targets::TargetAddressSpaceDescriptor& addressSpaceDescriptor, const Targets::TargetMemorySegmentDescriptor& memorySegmentDescriptor, Targets::TargetMemoryAddress startAddress, - Targets::TargetMemoryBuffer&& buffer + Targets::TargetMemoryBufferSpan buffer ) const; /** diff --git a/src/TargetController/Commands/WriteTargetMemory.hpp b/src/TargetController/Commands/WriteTargetMemory.hpp index 40fc5622..c1e50a23 100644 --- a/src/TargetController/Commands/WriteTargetMemory.hpp +++ b/src/TargetController/Commands/WriteTargetMemory.hpp @@ -18,18 +18,18 @@ namespace TargetController::Commands const Targets::TargetAddressSpaceDescriptor& addressSpaceDescriptor; const Targets::TargetMemorySegmentDescriptor& memorySegmentDescriptor; Targets::TargetMemoryAddress startAddress; - Targets::TargetMemoryBuffer buffer; + Targets::TargetMemoryBufferSpan buffer; WriteTargetMemory( const Targets::TargetAddressSpaceDescriptor& addressSpaceDescriptor, const Targets::TargetMemorySegmentDescriptor& memorySegmentDescriptor, Targets::TargetMemoryAddress startAddress, - Targets::TargetMemoryBuffer&& buffer + Targets::TargetMemoryBufferSpan buffer ) : addressSpaceDescriptor(addressSpaceDescriptor) , memorySegmentDescriptor(memorySegmentDescriptor) , startAddress(startAddress) - , buffer(std::move(buffer)) + , buffer(buffer) {}; [[nodiscard]] CommandType getType() const override { diff --git a/src/TargetController/TargetControllerComponent.cpp b/src/TargetController/TargetControllerComponent.cpp index 428ce58f..f7f58064 100644 --- a/src/TargetController/TargetControllerComponent.cpp +++ b/src/TargetController/TargetControllerComponent.cpp @@ -741,8 +741,8 @@ namespace TargetController void TargetControllerComponent::writeTargetMemory( const TargetAddressSpaceDescriptor& addressSpaceDescriptor, const TargetMemorySegmentDescriptor& memorySegmentDescriptor, - Targets::TargetMemoryAddress startAddress, - const TargetMemoryBuffer& buffer + TargetMemoryAddress startAddress, + TargetMemoryBufferSpan buffer ) { const auto isProgramMemory = this->target->isProgramMemory( addressSpaceDescriptor, diff --git a/src/TargetController/TargetControllerComponent.hpp b/src/TargetController/TargetControllerComponent.hpp index c0298496..8a42cb58 100644 --- a/src/TargetController/TargetControllerComponent.hpp +++ b/src/TargetController/TargetControllerComponent.hpp @@ -302,7 +302,7 @@ namespace TargetController const Targets::TargetAddressSpaceDescriptor& addressSpaceDescriptor, const Targets::TargetMemorySegmentDescriptor& memorySegmentDescriptor, Targets::TargetMemoryAddress startAddress, - const Targets::TargetMemoryBuffer& buffer + Targets::TargetMemoryBufferSpan buffer ); void eraseTargetMemory( diff --git a/src/Targets/Microchip/AVR8/Avr8.cpp b/src/Targets/Microchip/AVR8/Avr8.cpp index edbe353a..037237c0 100644 --- a/src/Targets/Microchip/AVR8/Avr8.cpp +++ b/src/Targets/Microchip/AVR8/Avr8.cpp @@ -405,7 +405,7 @@ namespace Targets::Microchip::Avr8 const TargetAddressSpaceDescriptor& addressSpaceDescriptor, const TargetMemorySegmentDescriptor& memorySegmentDescriptor, std::uint32_t startAddress, - const TargetMemoryBuffer& buffer + TargetMemoryBufferSpan buffer ) { if (memorySegmentDescriptor.type == TargetMemorySegmentType::FLASH && !this->programmingModeEnabled()) { throw Exception{"Attempted Flash memory write in the absence of an active programming session."}; @@ -1088,7 +1088,7 @@ namespace Targets::Microchip::Avr8 this->fuseAddressSpaceDescriptor, this->fuseMemorySegmentDescriptor, ocdenRegisterDescriptor.startAddress, - {newValue} + TargetMemoryBuffer({newValue}) ); Logger::debug("Verifying OCDEN fuse bit"); @@ -1140,7 +1140,7 @@ namespace Targets::Microchip::Avr8 this->fuseAddressSpaceDescriptor, this->fuseMemorySegmentDescriptor, eesaveRegisterDescriptor.startAddress, - {newValue} + TargetMemoryBuffer({newValue}) ); Logger::debug("Verifying EESAVE fuse bit"); diff --git a/src/Targets/Microchip/AVR8/Avr8.hpp b/src/Targets/Microchip/AVR8/Avr8.hpp index 5a5668d7..9c421398 100644 --- a/src/Targets/Microchip/AVR8/Avr8.hpp +++ b/src/Targets/Microchip/AVR8/Avr8.hpp @@ -84,7 +84,7 @@ namespace Targets::Microchip::Avr8 const TargetAddressSpaceDescriptor& addressSpaceDescriptor, const TargetMemorySegmentDescriptor& memorySegmentDescriptor, TargetMemoryAddress startAddress, - const TargetMemoryBuffer& buffer + TargetMemoryBufferSpan buffer ) override; bool isProgramMemory( const TargetAddressSpaceDescriptor& addressSpaceDescriptor, diff --git a/src/Targets/RiscV/RiscV.cpp b/src/Targets/RiscV/RiscV.cpp index 793b8556..73639e52 100644 --- a/src/Targets/RiscV/RiscV.cpp +++ b/src/Targets/RiscV/RiscV.cpp @@ -235,7 +235,7 @@ namespace Targets::RiscV const TargetAddressSpaceDescriptor& addressSpaceDescriptor, const TargetMemorySegmentDescriptor& memorySegmentDescriptor, TargetMemoryAddress startAddress, - const TargetMemoryBuffer& buffer + TargetMemoryBufferSpan buffer ) { assert(!buffer.empty()); diff --git a/src/Targets/RiscV/RiscV.hpp b/src/Targets/RiscV/RiscV.hpp index 95030adb..895c21be 100644 --- a/src/Targets/RiscV/RiscV.hpp +++ b/src/Targets/RiscV/RiscV.hpp @@ -62,7 +62,7 @@ namespace Targets::RiscV const TargetAddressSpaceDescriptor& addressSpaceDescriptor, const TargetMemorySegmentDescriptor& memorySegmentDescriptor, TargetMemoryAddress startAddress, - const TargetMemoryBuffer& buffer + TargetMemoryBufferSpan buffer ) override; bool isProgramMemory( const TargetAddressSpaceDescriptor& addressSpaceDescriptor, diff --git a/src/Targets/RiscV/Wch/WchRiscV.cpp b/src/Targets/RiscV/Wch/WchRiscV.cpp index f16ad7eb..e06fff24 100644 --- a/src/Targets/RiscV/Wch/WchRiscV.cpp +++ b/src/Targets/RiscV/Wch/WchRiscV.cpp @@ -106,7 +106,7 @@ namespace Targets::RiscV::Wch const TargetAddressSpaceDescriptor& addressSpaceDescriptor, const TargetMemorySegmentDescriptor& memorySegmentDescriptor, TargetMemoryAddress startAddress, - const TargetMemoryBuffer& buffer + TargetMemoryBufferSpan buffer ) { /* * WCH targets have an alias segment that maps to either the program memory segment or the boot program diff --git a/src/Targets/RiscV/Wch/WchRiscV.hpp b/src/Targets/RiscV/Wch/WchRiscV.hpp index c64a15e0..5f990890 100644 --- a/src/Targets/RiscV/Wch/WchRiscV.hpp +++ b/src/Targets/RiscV/Wch/WchRiscV.hpp @@ -23,7 +23,7 @@ namespace Targets::RiscV::Wch const TargetAddressSpaceDescriptor& addressSpaceDescriptor, const TargetMemorySegmentDescriptor& memorySegmentDescriptor, TargetMemoryAddress startAddress, - const TargetMemoryBuffer& buffer + TargetMemoryBufferSpan buffer ) override; protected: diff --git a/src/Targets/Target.hpp b/src/Targets/Target.hpp index fb16dfa4..5a6dbd58 100644 --- a/src/Targets/Target.hpp +++ b/src/Targets/Target.hpp @@ -198,7 +198,7 @@ namespace Targets const TargetAddressSpaceDescriptor& addressSpaceDescriptor, const TargetMemorySegmentDescriptor& memorySegmentDescriptor, TargetMemoryAddress startAddress, - const TargetMemoryBuffer& buffer + TargetMemoryBufferSpan buffer ) = 0; /** diff --git a/src/Targets/TargetMemoryCache.cpp b/src/Targets/TargetMemoryCache.cpp index 95ca3274..7cc7c707 100644 --- a/src/Targets/TargetMemoryCache.cpp +++ b/src/Targets/TargetMemoryCache.cpp @@ -33,7 +33,7 @@ namespace Targets && intersectingSegmentIt->second >= (startAddress + bytes - 1); } - void TargetMemoryCache::insert(TargetMemoryAddress startAddress, const TargetMemoryBuffer& data) { + void TargetMemoryCache::insert(TargetMemoryAddress startAddress, TargetMemoryBufferSpan data) { const auto startIndex = startAddress - this->memorySegmentDescriptor.addressRange.startAddress; std::copy(data.begin(), data.end(), this->data.begin() + startIndex); diff --git a/src/Targets/TargetMemoryCache.hpp b/src/Targets/TargetMemoryCache.hpp index de521f57..eefa6267 100644 --- a/src/Targets/TargetMemoryCache.hpp +++ b/src/Targets/TargetMemoryCache.hpp @@ -39,7 +39,7 @@ namespace Targets * @param startAddress * @param data */ - void insert(TargetMemoryAddress startAddress, const TargetMemoryBuffer& data); + void insert(TargetMemoryAddress startAddress, TargetMemoryBufferSpan data); /** * Clears the cache.