Support for reserved hardware breakpoint (for stepping on AVR8 targets)
This commit is contained in:
@@ -697,7 +697,7 @@ namespace Targets::Microchip::Avr::Avr8Bit
|
||||
}
|
||||
|
||||
BreakpointResources Avr8::getBreakpointResources() {
|
||||
auto maxHardwareBreakpoints = 0;
|
||||
auto maxHardwareBreakpoints = static_cast<std::uint16_t>(0);
|
||||
|
||||
switch (this->targetConfig.physicalInterface) {
|
||||
case PhysicalInterface::JTAG: {
|
||||
@@ -719,7 +719,11 @@ namespace Targets::Microchip::Avr::Avr8Bit
|
||||
|
||||
return BreakpointResources(
|
||||
maxHardwareBreakpoints,
|
||||
std::nullopt
|
||||
std::nullopt,
|
||||
std::min(
|
||||
static_cast<std::uint16_t>(this->targetConfig.reserveSteppingBreakpoint ? 1 : 0),
|
||||
maxHardwareBreakpoints
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -35,31 +35,51 @@ namespace Targets::Microchip::Avr::Avr8Bit
|
||||
|
||||
// The 'manageDwenFuseBit' param used to be 'updateDwenFuseBit' - we still support the old, for now.
|
||||
if (targetNode["updateDwenFuseBit"]) {
|
||||
this->manageDwenFuseBit = targetNode["updateDwenFuseBit"].as<bool>();
|
||||
this->manageDwenFuseBit = targetNode["updateDwenFuseBit"].as<bool>(
|
||||
this->manageDwenFuseBit
|
||||
);
|
||||
}
|
||||
|
||||
if (targetNode["manageDwenFuseBit"]) {
|
||||
this->manageDwenFuseBit = targetNode["manageDwenFuseBit"].as<bool>();
|
||||
this->manageDwenFuseBit = targetNode["manageDwenFuseBit"].as<bool>(
|
||||
this->manageDwenFuseBit
|
||||
);
|
||||
}
|
||||
|
||||
if (targetNode["cycleTargetPowerPostDwenUpdate"]) {
|
||||
this->cycleTargetPowerPostDwenUpdate = targetNode["cycleTargetPowerPostDwenUpdate"].as<bool>();
|
||||
this->cycleTargetPowerPostDwenUpdate = targetNode["cycleTargetPowerPostDwenUpdate"].as<bool>(
|
||||
this->cycleTargetPowerPostDwenUpdate
|
||||
);
|
||||
}
|
||||
|
||||
if (targetNode["disableDebugWirePreDisconnect"]) {
|
||||
this->disableDebugWireOnDeactivate = targetNode["disableDebugWirePreDisconnect"].as<bool>();
|
||||
this->disableDebugWireOnDeactivate = targetNode["disableDebugWirePreDisconnect"].as<bool>(
|
||||
this->disableDebugWireOnDeactivate
|
||||
);
|
||||
}
|
||||
|
||||
if (targetNode["targetPowerCycleDelay"]) {
|
||||
this->targetPowerCycleDelay = std::chrono::milliseconds(targetNode["targetPowerCycleDelay"].as<int>());
|
||||
this->targetPowerCycleDelay = std::chrono::milliseconds(targetNode["targetPowerCycleDelay"].as<int>(
|
||||
this->targetPowerCycleDelay.count()
|
||||
));
|
||||
}
|
||||
|
||||
if (targetNode["manageOcdenFuseBit"]) {
|
||||
this->manageOcdenFuseBit = targetNode["manageOcdenFuseBit"].as<bool>();
|
||||
this->manageOcdenFuseBit = targetNode["manageOcdenFuseBit"].as<bool>(
|
||||
this->manageOcdenFuseBit
|
||||
);
|
||||
}
|
||||
|
||||
if (targetNode["preserveEeprom"]) {
|
||||
this->preserveEeprom = targetNode["preserveEeprom"].as<bool>();
|
||||
this->preserveEeprom = targetNode["preserveEeprom"].as<bool>(
|
||||
this->preserveEeprom
|
||||
);
|
||||
}
|
||||
|
||||
if (targetNode["reserveSteppingBreakpoint"]) {
|
||||
this->reserveSteppingBreakpoint = targetNode["reserveSteppingBreakpoint"].as<bool>(
|
||||
this->reserveSteppingBreakpoint
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -93,6 +93,11 @@ namespace Targets::Microchip::Avr::Avr8Bit
|
||||
*/
|
||||
bool preserveEeprom = true;
|
||||
|
||||
/**
|
||||
* Determines if Bloom will reserve a single hardware breakpoint for stepping operations.
|
||||
*/
|
||||
bool reserveSteppingBreakpoint = true;
|
||||
|
||||
explicit Avr8TargetConfig(const TargetConfig& targetConfig);
|
||||
|
||||
private:
|
||||
|
||||
Reference in New Issue
Block a user