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);
|
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) {
|
std::map<int, TargetPinState> Avr8::getPinStates(int variantId) {
|
||||||
if (!this->targetVariantsById.contains(variantId)) {
|
if (!this->targetVariantsById.contains(variantId)) {
|
||||||
throw Exception("Invalid target variant ID");
|
throw Exception("Invalid target variant ID");
|
||||||
|
|||||||
@@ -109,6 +109,8 @@ namespace Bloom::Targets::Microchip::Avr::Avr8Bit
|
|||||||
TargetRegister getProgramCounterRegister();
|
TargetRegister getProgramCounterRegister();
|
||||||
void setProgramCounter(std::uint32_t programCounter) override;
|
void setProgramCounter(std::uint32_t programCounter) override;
|
||||||
|
|
||||||
|
std::uint32_t getStackPointer() override;
|
||||||
|
|
||||||
std::map<int, TargetPinState> getPinStates(int variantId) override;
|
std::map<int, TargetPinState> getPinStates(int variantId) override;
|
||||||
void setPinState(
|
void setPinState(
|
||||||
const TargetPinDescriptor& pinDescriptor,
|
const TargetPinDescriptor& pinDescriptor,
|
||||||
|
|||||||
@@ -275,6 +275,13 @@ namespace Bloom::Targets
|
|||||||
*/
|
*/
|
||||||
virtual void setProgramCounter(std::uint32_t programCounter) = 0;
|
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
|
* Should get the current pin states for each pin on the target, mapped by pin number
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user