Skip to content

Commit c475a4a

Browse files
committed
Fall back to target.json memories when CMSIS has empty memories
1 parent db8a018 commit c475a4a

File tree

1 file changed

+42
-37
lines changed

1 file changed

+42
-37
lines changed

tools/config/__init__.py

Lines changed: 42 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -745,6 +745,48 @@ def get_all_active_memories(self, memory_list):
745745

746746
try:
747747
cmsis_part = self._get_cmsis_part()
748+
present_memories = set(cmsis_part['memories'].keys())
749+
valid_memories = set(memory_list).intersection(present_memories)
750+
751+
memories = self._get_mem_specs(
752+
["read", "write" if active_memory == "RAM" else "execute"],
753+
cmsis_part
754+
)
755+
for memory in valid_memories:
756+
mem_start = memories[memory]["start"]
757+
mem_size = memories[memory]["size"]
758+
if memory in ['IROM1', 'PROGRAM_FLASH']:
759+
start, size = self._get_primary_memory_override("rom")
760+
if start:
761+
mem_start = start
762+
if size:
763+
mem_size = size
764+
memory = 'ROM'
765+
elif memory in ['IRAM1', 'SRAM_OC', 'SRAM_UPPER', 'SRAM']:
766+
if (self.has_ram_regions):
767+
continue
768+
start, size = self._get_primary_memory_override("ram")
769+
if start:
770+
mem_start = start
771+
if size:
772+
mem_size = size
773+
memory = 'RAM'
774+
else:
775+
active_memory_counter += 1
776+
memory = active_memory + str(active_memory_counter)
777+
778+
if not isinstance(mem_start, int):
779+
mem_start = int(mem_start, 0)
780+
if not isinstance(mem_size, int):
781+
mem_size = int(mem_size, 0)
782+
available_memories[memory] = [mem_start, mem_size]
783+
784+
if not available_memories:
785+
raise ConfigException(
786+
"Bootloader not supported on this target. "
787+
"No memories found."
788+
)
789+
return available_memories
748790
except ConfigException:
749791
""" If the target doesn't exits in cmsis, but present in targets.json
750792
with ram and rom start/size defined"""
@@ -764,43 +806,6 @@ def get_all_active_memories(self, memory_list):
764806
available_memories[active_memory] = [start, size]
765807
return available_memories
766808

767-
present_memories = set(cmsis_part['memories'].keys())
768-
valid_memories = set(memory_list).intersection(present_memories)
769-
770-
memories = self._get_mem_specs(
771-
["read", "write" if active_memory == "RAM" else "execute"],
772-
cmsis_part
773-
)
774-
for memory in valid_memories:
775-
mem_start = memories[memory]["start"]
776-
mem_size = memories[memory]["size"]
777-
if memory in ['IROM1', 'PROGRAM_FLASH']:
778-
start, size = self._get_primary_memory_override("rom")
779-
if start:
780-
mem_start = start
781-
if size:
782-
mem_size = size
783-
memory = 'ROM'
784-
elif memory in ['IRAM1', 'SRAM_OC', 'SRAM_UPPER', 'SRAM']:
785-
if (self.has_ram_regions):
786-
continue
787-
start, size = self._get_primary_memory_override("ram")
788-
if start:
789-
mem_start = start
790-
if size:
791-
mem_size = size
792-
memory = 'RAM'
793-
else:
794-
active_memory_counter += 1
795-
memory = active_memory + str(active_memory_counter)
796-
797-
if not isinstance(mem_start, int):
798-
mem_start = int(mem_start, 0)
799-
if not isinstance(mem_size, int):
800-
mem_size = int(mem_size, 0)
801-
available_memories[memory] = [mem_start, mem_size]
802-
803-
return available_memories
804809

805810
@property
806811
def ram_regions(self):

0 commit comments

Comments
 (0)