Included check for flash memory segments with name "PROGMEM", for the new AVR8 TDFs

This commit is contained in:
Nav
2021-06-05 23:49:18 +01:00
parent 02446116df
commit 0c1549c1d2
2 changed files with 10 additions and 4 deletions

View File

@@ -10,6 +10,7 @@ class Avr8TargetDescriptionFile extends TargetDescriptionFile
const AVR8_FAMILY_MEGA = 'MEGA'; const AVR8_FAMILY_MEGA = 'MEGA';
const AVR8_FAMILY_TINY = 'TINY'; const AVR8_FAMILY_TINY = 'TINY';
const AVR8_FAMILY_XMEGA = 'XMEGA'; const AVR8_FAMILY_XMEGA = 'XMEGA';
const AVR8_FAMILY_OTHER = 'OTHER';
const AVR8_PHYSICAL_INTERFACE_JTAG = 'JTAG'; const AVR8_PHYSICAL_INTERFACE_JTAG = 'JTAG';
const AVR8_PHYSICAL_INTERFACE_PDI = 'PDI'; const AVR8_PHYSICAL_INTERFACE_PDI = 'PDI';
@@ -75,6 +76,9 @@ class Avr8TargetDescriptionFile extends TargetDescriptionFile
} else if (stristr($deviceAttributes['family'], 'mega') !== false) { } else if (stristr($deviceAttributes['family'], 'mega') !== false) {
$this->family = self::AVR8_FAMILY_MEGA; $this->family = self::AVR8_FAMILY_MEGA;
} else {
$this->family = self::AVR8_FAMILY_OTHER;
} }
} }
@@ -94,7 +98,8 @@ class Avr8TargetDescriptionFile extends TargetDescriptionFile
$progAddressSpace = $this->addressSpacesById['prog'] ?? null; $progAddressSpace = $this->addressSpacesById['prog'] ?? null;
if (!empty($progAddressSpace)) { if (!empty($progAddressSpace)) {
$flashMemorySegment = $progAddressSpace->memorySegmentsByTypeAndName['flash']['flash'] $flashMemorySegment = $progAddressSpace->memorySegmentsByTypeAndName['flash']['flash']
?? $progAddressSpace->memorySegmentsByTypeAndName['flash']['app_section'] ?? null; ?? $progAddressSpace->memorySegmentsByTypeAndName['flash']['app_section']
?? $progAddressSpace->memorySegmentsByTypeAndName['flash']['progmem'] ?? null;
$bootSectionMemorySegment = $progAddressSpace->memorySegmentsByTypeAndName['flash']['boot_section_1'] $bootSectionMemorySegment = $progAddressSpace->memorySegmentsByTypeAndName['flash']['boot_section_1']
?? $progAddressSpace->memorySegmentsByTypeAndName['flash']['boot_section'] ?? null; ?? $progAddressSpace->memorySegmentsByTypeAndName['flash']['boot_section'] ?? null;

View File

@@ -369,11 +369,12 @@ std::optional<MemorySegment> TargetDescriptionFile::getFlashMemorySegment() cons
auto& flashMemorySegments = programMemorySegments.find(MemorySegmentType::FLASH)->second; auto& flashMemorySegments = programMemorySegments.find(MemorySegmentType::FLASH)->second;
/* /*
* Some target descriptions describe the flash memory segments in the "APP_SECTION" segment, whereas * In AVR8 TDFs, flash memory segments are typically named "APP_SECTION", "PROGMEM" or "FLASH".
* others use the "FLASH" segment.
*/ */
auto flashSegmentIt = flashMemorySegments.find("app_section") != flashMemorySegments.end() ? auto flashSegmentIt = flashMemorySegments.find("app_section") != flashMemorySegments.end() ?
flashMemorySegments.find("app_section") : flashMemorySegments.find("flash"); flashMemorySegments.find("app_section")
: flashMemorySegments.find("progmem") != flashMemorySegments.end()
? flashMemorySegments.find("progmem") : flashMemorySegments.find("flash");
if (flashSegmentIt != flashMemorySegments.end()) { if (flashSegmentIt != flashMemorySegments.end()) {
return flashSegmentIt->second; return flashSegmentIt->second;