Skip to content

Commit 623b171

Browse files
committed
Introduce sector ceiling/floor rounding
Use ceiling for bootloader end address Use floor for application size
1 parent 785dd10 commit 623b171

File tree

1 file changed

+22
-16
lines changed

1 file changed

+22
-16
lines changed

tools/config/__init__.py

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -570,31 +570,26 @@ def _generate_bootloader_build(self, target_overrides, rom_start, rom_size):
570570
raise ConfigException("bootloader executable does not "
571571
"start at 0x%x" % rom_start)
572572
part_size = (part.maxaddr() - part.minaddr()) + 1
573-
start = Config._align_on_sector(rom_start + start, self.sectors) - rom_start
574-
offset = start + rom_start
575-
part_size = Config._align_on_sector(offset + part_size, self.sectors) - offset
576-
yield Region("bootloader", offset, part_size, False,
573+
part_size = Config._align_ceiling(rom_start + part_size, self.sectors) - rom_start
574+
yield Region("bootloader", rom_start, part_size, False,
577575
filename)
578-
start += part_size
576+
start = rom_start + part_size
579577
if 'target.restrict_size' in target_overrides:
580578
new_size = int(target_overrides['target.restrict_size'], 0)
581-
start = Config._align_on_sector(rom_start + start, self.sectors) - rom_start
582-
offset = rom_start + start
583-
new_size = Config._align_on_sector(offset + new_size, self.sectors) - offset
584-
yield Region("application", offset, new_size, True, None)
579+
new_size = Config._align_floor(start + new_size, self.sectors) - start
580+
yield Region("application", start, new_size, True, None)
585581
start += new_size
586-
start = Config._align_on_sector(rom_start + start, self.sectors) - rom_start
587582
yield Region("post_application", rom_start + start, rom_size - start,
588583
False, None)
589584
else:
590-
start = Config._align_on_sector(rom_start + start, self.sectors) - rom_start
591-
yield Region("application", rom_start + start, rom_size - start,
585+
yield Region("application", start, rom_size - start,
592586
True, None)
593-
if start > rom_size:
587+
if start > rom_start + rom_size:
594588
raise ConfigException("Not enough memory on device to fit all "
595589
"application regions")
590+
596591
@staticmethod
597-
def _align_on_sector(address, sectors):
592+
def _find_sector(address, sectors):
598593
target_size = -1
599594
target_start = -1
600595
for (start, size) in sectors:
@@ -604,8 +599,19 @@ def _align_on_sector(address, sectors):
604599
target_size = size
605600
if (target_size < 0):
606601
raise ConfigException("No valid sector found")
607-
sector_num = (address - target_start)//target_size
608-
return target_start + (sector_num*target_size)
602+
return target_start, target_size
603+
604+
@staticmethod
605+
def _align_floor(address, sectors):
606+
target_start, target_size = Config._find_sector(address, sectors)
607+
sector_num = (address - target_start) // target_size
608+
return target_start + (sector_num * target_size)
609+
610+
@staticmethod
611+
def _align_ceiling(address, sectors):
612+
target_start, target_size = Config._find_sector(address, sectors)
613+
sector_num = ((address - target_start) + target_size - 1) // target_size
614+
return target_start + (sector_num * target_size)
609615

610616
@property
611617
def report(self):

0 commit comments

Comments
 (0)