Move away from using const references of std::vector<unsigned char> for target memory buffers. Replaced with std::span<const unsigned char> (via TargetMemoryBufferSpan alias)
This commit is contained in:
@@ -10,7 +10,7 @@ namespace DebugToolDrivers::Microchip::Protocols::Edbg::Avr::CommandFrames::Avr8
|
||||
class WriteMemory: public Avr8GenericCommandFrame<std::vector<unsigned char>>
|
||||
{
|
||||
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()
|
||||
{
|
||||
/*
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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<RegisterValue>(
|
||||
|
||||
@@ -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<std::reference_wrapper<const TriggerModule::TriggerDescriptor>> getAvailableTrigger();
|
||||
|
||||
@@ -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;
|
||||
|
||||
/**
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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<WriteTargetMemory>(
|
||||
addressSpaceDescriptor,
|
||||
memorySegmentDescriptor,
|
||||
startAddress,
|
||||
std::move(buffer)
|
||||
buffer
|
||||
),
|
||||
this->defaultTimeout,
|
||||
this->activeAtomicSessionId
|
||||
|
||||
@@ -155,7 +155,7 @@ namespace Services
|
||||
const Targets::TargetAddressSpaceDescriptor& addressSpaceDescriptor,
|
||||
const Targets::TargetMemorySegmentDescriptor& memorySegmentDescriptor,
|
||||
Targets::TargetMemoryAddress startAddress,
|
||||
Targets::TargetMemoryBuffer&& buffer
|
||||
Targets::TargetMemoryBufferSpan buffer
|
||||
) const;
|
||||
|
||||
/**
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -235,7 +235,7 @@ namespace Targets::RiscV
|
||||
const TargetAddressSpaceDescriptor& addressSpaceDescriptor,
|
||||
const TargetMemorySegmentDescriptor& memorySegmentDescriptor,
|
||||
TargetMemoryAddress startAddress,
|
||||
const TargetMemoryBuffer& buffer
|
||||
TargetMemoryBufferSpan buffer
|
||||
) {
|
||||
assert(!buffer.empty());
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -23,7 +23,7 @@ namespace Targets::RiscV::Wch
|
||||
const TargetAddressSpaceDescriptor& addressSpaceDescriptor,
|
||||
const TargetMemorySegmentDescriptor& memorySegmentDescriptor,
|
||||
TargetMemoryAddress startAddress,
|
||||
const TargetMemoryBuffer& buffer
|
||||
TargetMemoryBufferSpan buffer
|
||||
) override;
|
||||
|
||||
protected:
|
||||
|
||||
@@ -198,7 +198,7 @@ namespace Targets
|
||||
const TargetAddressSpaceDescriptor& addressSpaceDescriptor,
|
||||
const TargetMemorySegmentDescriptor& memorySegmentDescriptor,
|
||||
TargetMemoryAddress startAddress,
|
||||
const TargetMemoryBuffer& buffer
|
||||
TargetMemoryBufferSpan buffer
|
||||
) = 0;
|
||||
|
||||
/**
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user