From df1f3958c015ed6bbac84b484b15f20ffbf0b2b6 Mon Sep 17 00:00:00 2001 From: Nav Date: Mon, 30 Aug 2021 22:31:44 +0100 Subject: [PATCH] Ignoring AVR8 registers that are not in the data address space --- .../AVR/AVR8/TargetDescription/TargetDescriptionFile.cpp | 7 ++++++- src/Targets/TargetDescription/RegisterGroup.hpp | 1 + src/Targets/TargetDescription/TargetDescriptionFile.cpp | 4 ++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/Targets/Microchip/AVR/AVR8/TargetDescription/TargetDescriptionFile.cpp b/src/Targets/Microchip/AVR/AVR8/TargetDescription/TargetDescriptionFile.cpp index aa5696e2..4537d469 100644 --- a/src/Targets/Microchip/AVR/AVR8/TargetDescription/TargetDescriptionFile.cpp +++ b/src/Targets/Microchip/AVR/AVR8/TargetDescription/TargetDescriptionFile.cpp @@ -66,7 +66,7 @@ TargetDescriptionFile::TargetDescriptionFile( matchingDescriptionFiles.begin(), matchingDescriptionFiles.end(), std::back_inserter(targetNames), - [](const QJsonValue& descriptionFile) { + [] (const QJsonValue& descriptionFile) { return QString("\"" + descriptionFile.toObject().find("targetName")->toString().toLower() + "\""); } ); @@ -473,6 +473,11 @@ void TargetDescriptionFile::loadTargetRegisterDescriptors() { auto& peripheralRegisterGroups = this->peripheralRegisterGroupsMappedByModuleRegisterGroupName .at(registerGroupName); for (const auto& peripheralRegisterGroup : peripheralRegisterGroups) { + if (peripheralRegisterGroup.addressSpaceId.value_or("") != "data") { + // Currently, we only deal with registers in the data address space. + continue; + } + for (const auto& [moduleRegisterName, moduleRegister] : registerGroup.registersMappedByName) { if (moduleRegister.size < 1) { continue; diff --git a/src/Targets/TargetDescription/RegisterGroup.hpp b/src/Targets/TargetDescription/RegisterGroup.hpp index 54000e4e..9b06276e 100644 --- a/src/Targets/TargetDescription/RegisterGroup.hpp +++ b/src/Targets/TargetDescription/RegisterGroup.hpp @@ -20,6 +20,7 @@ namespace Bloom::Targets::TargetDescription std::string name; std::optional moduleName; std::optional offset; + std::optional addressSpaceId; std::map registersMappedByName; }; } diff --git a/src/Targets/TargetDescription/TargetDescriptionFile.cpp b/src/Targets/TargetDescription/TargetDescriptionFile.cpp index bfe7498f..9914928b 100644 --- a/src/Targets/TargetDescription/TargetDescriptionFile.cpp +++ b/src/Targets/TargetDescription/TargetDescriptionFile.cpp @@ -173,6 +173,10 @@ RegisterGroup TargetDescriptionFile::generateRegisterGroupFromXml(const QDomElem registerGroup.moduleName = xmlElement.attribute("name-in-module").toLower().toStdString(); } + if (xmlElement.hasAttribute("address-space")) { + registerGroup.addressSpaceId = xmlElement.attribute("address-space").toLower().toStdString(); + } + if (xmlElement.hasAttribute("offset")) { registerGroup.offset = xmlElement.attribute("offset").toInt(nullptr, 16); }