@@ -570,31 +570,26 @@ def _generate_bootloader_build(self, target_overrides, rom_start, rom_size):
570
570
raise ConfigException ("bootloader executable does not "
571
571
"start at 0x%x" % rom_start )
572
572
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 ,
577
575
filename )
578
- start += part_size
576
+ start = rom_start + part_size
579
577
if 'target.restrict_size' in target_overrides :
580
578
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 )
585
581
start += new_size
586
- start = Config ._align_on_sector (rom_start + start , self .sectors ) - rom_start
587
582
yield Region ("post_application" , rom_start + start , rom_size - start ,
588
583
False , None )
589
584
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 ,
592
586
True , None )
593
- if start > rom_size :
587
+ if start > rom_start + rom_size :
594
588
raise ConfigException ("Not enough memory on device to fit all "
595
589
"application regions" )
590
+
596
591
@staticmethod
597
- def _align_on_sector (address , sectors ):
592
+ def _find_sector (address , sectors ):
598
593
target_size = - 1
599
594
target_start = - 1
600
595
for (start , size ) in sectors :
@@ -604,8 +599,19 @@ def _align_on_sector(address, sectors):
604
599
target_size = size
605
600
if (target_size < 0 ):
606
601
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 )
609
615
610
616
@property
611
617
def report (self ):
0 commit comments