73
73
74
74
# List of all possible ram memories that can be available for a target
75
75
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' ]
77
78
78
79
# List of all possible rom memories that can be available for a target
79
80
ROM_ALL_MEMORIES = ['IROM1' , 'PROGRAM_FLASH' , 'IROM2' ]
@@ -595,8 +596,6 @@ def sectors(self):
595
596
raise ConfigException ("No sector info available" )
596
597
597
598
def _get_cmsis_part (self ):
598
- if not getattr (self .target , "bootloader_supported" , False ):
599
- raise ConfigException ("Bootloader not supported on this target." )
600
599
if not hasattr (self .target , "device_name" ):
601
600
raise ConfigException ("Bootloader not supported on this target: "
602
601
"targets.json `device_name` not specified." )
@@ -632,10 +631,26 @@ def get_all_active_memories(self, memory_list):
632
631
active_memory_counter = 0
633
632
# Find which memory we are dealing with, RAM/ROM
634
633
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
+
636
651
present_memories = set (cmsis_part ['memory' ].keys ())
637
652
valid_memories = set (memory_list ).intersection (present_memories )
638
-
653
+
639
654
for memory in valid_memories :
640
655
mem_start , mem_size = self ._get_mem_specs (
641
656
[memory ],
@@ -647,8 +662,10 @@ def get_all_active_memories(self, memory_list):
647
662
mem_start = getattr (self .target , "mbed_rom_start" , False ) or mem_start
648
663
mem_size = getattr (self .target , "mbed_rom_size" , False ) or mem_size
649
664
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
652
669
mem_start = getattr (self .target , "mbed_ram_start" , False ) or mem_start
653
670
mem_size = getattr (self .target , "mbed_ram_size" , False ) or mem_size
654
671
memory = 'RAM'
@@ -683,6 +700,8 @@ def ram_regions(self):
683
700
@property
684
701
def regions (self ):
685
702
"""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." )
686
705
if ((self .target .bootloader_img or self .target .restrict_size ) and
687
706
(self .target .mbed_app_start or self .target .mbed_app_size )):
688
707
raise ConfigException (
0 commit comments