diff --git a/tools/build_api.py b/tools/build_api.py index f427067324..515c8141c1 100644 --- a/tools/build_api.py +++ b/tools/build_api.py @@ -436,6 +436,10 @@ def merge_region_list(region_list, destination, notify, padding=b'\xFF'): # throw intelhex.AddressOverlapError if there's overlapping part_size = 0 for es in part.segments(): + # Add padding in between segments starting from end of first segment + if (len(part.segments()) > 1 and (merged.maxaddr() != None)): + pad_size = es[0] - (merged.maxaddr() + 1) + merged.puts(merged.maxaddr()+1, padding * pad_size) part_size += es[1] - es[0] merged.merge(part[es[0]:_end_addr_inclusive(es[1])]) @@ -443,7 +447,12 @@ def merge_region_list(region_list, destination, notify, padding=b'\xFF'): raise ToolException("Contents of region %s does not fit" % region.name) - pad_size = region.size - part_size + # This padding applies for only files with one segment + if (len(part.segments()) == 1): + pad_size = region.size - part_size + else: + pad_size = 0 + if pad_size > 0 and region != region_list[-1] and format != ".hex": notify.info(" Padding region %s with 0x%x bytes" % (region.name, pad_size)) diff --git a/tools/config/__init__.py b/tools/config/__init__.py index 3d56e3120f..ab692a062e 100644 --- a/tools/config/__init__.py +++ b/tools/config/__init__.py @@ -714,14 +714,14 @@ class Config(object): # find the last valid address that's within rom_end and use that # to compute the bootloader size end_address = None - for each in part.segments(): - if (each[1] < rom_end): - end_address = each[1] + for start, stop in part.segments(): + if (stop < rom_end): + end_address = stop else: break if end_address == None: raise ConfigException("bootloader segments don't fit within rom region") - part_size = Config._align_ceiling(rom_start + (end_address - start), self.sectors) - rom_start + part_size = Config._align_ceiling(end_address, self.sectors) - rom_start yield Region("bootloader", rom_start, part_size, False, filename)