Separate routine for fetching the current stack pointer
This commit is contained in:
@@ -254,6 +254,19 @@ void Avr8::setProgramCounter(std::uint32_t programCounter) {
|
||||
this->avr8Interface->setProgramCounter(programCounter);
|
||||
}
|
||||
|
||||
std::uint32_t Avr8::getStackPointer() {
|
||||
const auto stackPointerRegister = this->readRegisters(
|
||||
{this->targetRegisterDescriptorsByType.at(TargetRegisterType::STACK_POINTER)}
|
||||
).front();
|
||||
|
||||
std::uint32_t stackPointer = 0;
|
||||
for (std::size_t i = 0; i < stackPointerRegister.size() && i < 4; i++) {
|
||||
stackPointer = (stackPointer << (8 * i)) | stackPointerRegister.value[i];
|
||||
}
|
||||
|
||||
return stackPointer;
|
||||
}
|
||||
|
||||
std::map<int, TargetPinState> Avr8::getPinStates(int variantId) {
|
||||
if (!this->targetVariantsById.contains(variantId)) {
|
||||
throw Exception("Invalid target variant ID");
|
||||
|
||||
@@ -109,6 +109,8 @@ namespace Bloom::Targets::Microchip::Avr::Avr8Bit
|
||||
TargetRegister getProgramCounterRegister();
|
||||
void setProgramCounter(std::uint32_t programCounter) override;
|
||||
|
||||
std::uint32_t getStackPointer() override;
|
||||
|
||||
std::map<int, TargetPinState> getPinStates(int variantId) override;
|
||||
void setPinState(
|
||||
const TargetPinDescriptor& pinDescriptor,
|
||||
|
||||
@@ -275,6 +275,13 @@ namespace Bloom::Targets
|
||||
*/
|
||||
virtual void setProgramCounter(std::uint32_t programCounter) = 0;
|
||||
|
||||
/**
|
||||
* Should fetch the current stack pointer value.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
virtual std::uint32_t getStackPointer() = 0;
|
||||
|
||||
/**
|
||||
* Should get the current pin states for each pin on the target, mapped by pin number
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user