Skip to content

Commit 3956451

Browse files
committed
Fixing some corner cases
1. Adding SRAM in available ram 2. If the target doesn't exist in cmsis but targets.json, handle accordingly and raise apt exceptions where needed. 3. If no sram is provided, raise exception
1 parent 27f20c7 commit 3956451

File tree

2 files changed

+35
-9
lines changed

2 files changed

+35
-9
lines changed

tools/config/__init__.py

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,8 @@
7373

7474
# List of all possible ram memories that can be available for a target
7575
RAM_ALL_MEMORIES = ['IRAM1', 'IRAM2', 'IRAM3', 'IRAM4', 'SRAM_OC', \
76-
'SRAM_ITC', 'SRAM_DTC', 'SRAM_UPPER', 'SRAM_LOWER']
76+
'SRAM_ITC', 'SRAM_DTC', 'SRAM_UPPER', 'SRAM_LOWER', \
77+
'SRAM']
7778

7879
# List of all possible rom memories that can be available for a target
7980
ROM_ALL_MEMORIES = ['IROM1', 'PROGRAM_FLASH', 'IROM2']
@@ -595,8 +596,6 @@ def sectors(self):
595596
raise ConfigException("No sector info available")
596597

597598
def _get_cmsis_part(self):
598-
if not getattr(self.target, "bootloader_supported", False):
599-
raise ConfigException("Bootloader not supported on this target.")
600599
if not hasattr(self.target, "device_name"):
601600
raise ConfigException("Bootloader not supported on this target: "
602601
"targets.json `device_name` not specified.")
@@ -632,10 +631,26 @@ def get_all_active_memories(self, memory_list):
632631
active_memory_counter = 0
633632
# Find which memory we are dealing with, RAM/ROM
634633
active_memory = 'RAM' if any('RAM' in mem_list for mem_list in memory_list) else 'ROM'
635-
cmsis_part = self._get_cmsis_part()
634+
635+
try:
636+
cmsis_part = self._get_cmsis_part()
637+
except ConfigException:
638+
""" If the target doesn't exits in cmsis, but present in targets.json
639+
with ram and rom start/size defined"""
640+
if getattr(self.target, "mbed_ram_start") and \
641+
getattr(self.target, "mbed_rom_start"):
642+
mem_start = getattr(self.target, "mbed_" + active_memory.lower() + "_start")
643+
mem_size = getattr(self.target, "mbed_" + active_memory.lower() + "_size")
644+
available_memories[active_memory] = [mem_start, mem_size]
645+
return available_memories
646+
else:
647+
raise ConfigException("Bootloader not supported on this target. "
648+
"ram/rom start/size not found in "
649+
"targets.json.")
650+
636651
present_memories = set(cmsis_part['memory'].keys())
637652
valid_memories = set(memory_list).intersection(present_memories)
638-
653+
639654
for memory in valid_memories:
640655
mem_start, mem_size = self._get_mem_specs(
641656
[memory],
@@ -647,8 +662,10 @@ def get_all_active_memories(self, memory_list):
647662
mem_start = getattr(self.target, "mbed_rom_start", False) or mem_start
648663
mem_size = getattr(self.target, "mbed_rom_size", False) or mem_size
649664
memory = 'ROM'
650-
elif (memory == 'IRAM1' or memory == 'SRAM_OC' or \
651-
memory == 'SRAM_UPPER') and (not self.has_ram_regions):
665+
elif memory == 'IRAM1' or memory == 'SRAM_OC' or \
666+
memory == 'SRAM_UPPER' or memory == 'SRAM':
667+
if (self.has_ram_regions):
668+
continue
652669
mem_start = getattr(self.target, "mbed_ram_start", False) or mem_start
653670
mem_size = getattr(self.target, "mbed_ram_size", False) or mem_size
654671
memory = 'RAM'
@@ -683,6 +700,8 @@ def ram_regions(self):
683700
@property
684701
def regions(self):
685702
"""Generate a list of regions from the config"""
703+
if not getattr(self.target, "bootloader_supported", False):
704+
raise ConfigException("Bootloader not supported on this target.")
686705
if ((self.target.bootloader_img or self.target.restrict_size) and
687706
(self.target.mbed_app_start or self.target.mbed_app_size)):
688707
raise ConfigException(

tools/toolchains/__init__.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -693,14 +693,19 @@ def mem_stats(self, map):
693693

694694
return None
695695

696-
def _add_defines_from_region(self, region, suffixes=['_ADDR', '_SIZE']):
696+
def _add_defines_from_region(self, region, linker_define=False, suffixes=['_ADDR', '_SIZE']):
697697
for define in [(region.name.upper() + suffixes[0], region.start),
698698
(region.name.upper() + suffixes[1], region.size)]:
699699
define_string = "-D%s=0x%x" % define
700700
self.cc.append(define_string)
701701
self.cppc.append(define_string)
702702
self.flags["common"].append(define_string)
703-
703+
if linker_define:
704+
ld_string = ("%s" % define[0], "0x%x" % define[1])
705+
ld_string = self.make_ld_define(*ld_string)
706+
self.ld.append(ld_string)
707+
self.flags["ld"].append(ld_string)
708+
704709
def _add_all_regions(self, region_list, active_region_name):
705710
for region in region_list:
706711
self._add_defines_from_region(region)
@@ -742,6 +747,7 @@ def add_regions(self):
742747
rom_start, rom_size = value
743748
self._add_defines_from_region(
744749
Region("MBED_" + key, rom_start, rom_size),
750+
True,
745751
suffixes=["_START", "_SIZE"]
746752
)
747753
except ConfigException:
@@ -753,6 +759,7 @@ def add_regions(self):
753759
ram_start, ram_size = value
754760
self._add_defines_from_region(
755761
Region("MBED_" + key, ram_start, ram_size),
762+
True,
756763
suffixes=["_START", "_SIZE"]
757764
)
758765
except ConfigException:

0 commit comments

Comments
 (0)