HAL_ChibiOS: ensure periph uses same RAM0 address as bootloader
this fixes passing of addresses for boards that use an ALT_RAM_MAP
This commit is contained in:
parent
38d7af450f
commit
91cc0d7dba
@ -689,11 +689,13 @@ class ChibiOSHWDef(object):
|
|||||||
return lib.mcu[name]
|
return lib.mcu[name]
|
||||||
|
|
||||||
def get_ram_reserve_start(self):
|
def get_ram_reserve_start(self):
|
||||||
'''get amount of memory to reserve for bootloader comms'''
|
'''get amount of memory to reserve for bootloader comms and the address if non-zero'''
|
||||||
ram_reserve_start = self.get_config('RAM_RESERVE_START', default=0, type=int)
|
ram_reserve_start = self.get_config('RAM_RESERVE_START', default=0, type=int)
|
||||||
if ram_reserve_start == 0 and self.is_periph_fw():
|
if ram_reserve_start == 0 and self.is_periph_fw():
|
||||||
ram_reserve_start = 256
|
ram_reserve_start = 256
|
||||||
return ram_reserve_start
|
ram_map_bootloader = self.get_ram_map(use_bootloader=True)
|
||||||
|
ram0_start_address = ram_map_bootloader[0][0]
|
||||||
|
return ram_reserve_start, ram0_start_address
|
||||||
|
|
||||||
def make_line(self, label):
|
def make_line(self, label):
|
||||||
'''return a line for a label'''
|
'''return a line for a label'''
|
||||||
@ -757,19 +759,11 @@ class ChibiOSHWDef(object):
|
|||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def get_ram_map(self):
|
def get_ram_map(self, use_bootloader=False):
|
||||||
'''get RAM_MAP. May be different for bootloader'''
|
'''get RAM_MAP. May be different for bootloader'''
|
||||||
if 'APP_RAM_START' not in self.env_vars:
|
if self.is_bootloader_fw() or use_bootloader:
|
||||||
self.env_vars['APP_RAM_START'] = None
|
|
||||||
if self.is_bootloader_fw():
|
|
||||||
ram_map = self.get_mcu_config('RAM_MAP_BOOTLOADER', False)
|
ram_map = self.get_mcu_config('RAM_MAP_BOOTLOADER', False)
|
||||||
if ram_map is not None:
|
if ram_map is not None:
|
||||||
app_ram_map = self.get_mcu_config('RAM_MAP', False)
|
|
||||||
if app_ram_map is not None and app_ram_map[0][0] != ram_map[0][0]:
|
|
||||||
# we need to find the location of app_ram_map[0] in ram_map
|
|
||||||
for i in range(len(ram_map)):
|
|
||||||
if app_ram_map[0][0] == ram_map[i][0] and self.env_vars['APP_RAM_START'] is None:
|
|
||||||
self.env_vars['APP_RAM_START'] = i
|
|
||||||
return ram_map
|
return ram_map
|
||||||
elif self.env_vars['EXT_FLASH_SIZE_MB'] and not self.env_vars['INT_FLASH_PRIMARY']:
|
elif self.env_vars['EXT_FLASH_SIZE_MB'] and not self.env_vars['INT_FLASH_PRIMARY']:
|
||||||
ram_map = self.get_mcu_config('RAM_MAP_EXTERNAL_FLASH', False)
|
ram_map = self.get_mcu_config('RAM_MAP_EXTERNAL_FLASH', False)
|
||||||
@ -1107,18 +1101,13 @@ class ChibiOSHWDef(object):
|
|||||||
f.write('#define APP_START_OFFSET_KB %u\n' % self.get_config('APP_START_OFFSET_KB', default=0, type=int))
|
f.write('#define APP_START_OFFSET_KB %u\n' % self.get_config('APP_START_OFFSET_KB', default=0, type=int))
|
||||||
f.write('\n')
|
f.write('\n')
|
||||||
|
|
||||||
ram_map = self.get_ram_map()
|
ram_reserve_start,ram0_start_address = self.get_ram_reserve_start()
|
||||||
|
|
||||||
ram0_index = self.env_vars['APP_RAM_START']
|
|
||||||
if ram0_index is None:
|
|
||||||
ram0_index = 0
|
|
||||||
ram0_start_address = ram_map[ram0_index][0]
|
|
||||||
f.write('#define HAL_RAM0_START 0x%08x\n' % ram0_start_address)
|
f.write('#define HAL_RAM0_START 0x%08x\n' % ram0_start_address)
|
||||||
|
|
||||||
ram_reserve_start = self.get_ram_reserve_start()
|
|
||||||
if ram_reserve_start > 0:
|
if ram_reserve_start > 0:
|
||||||
f.write('#define HAL_RAM_RESERVE_START 0x%08x\n' % ram_reserve_start)
|
f.write('#define HAL_RAM_RESERVE_START 0x%08x\n' % ram_reserve_start)
|
||||||
|
|
||||||
|
ram_map = self.get_ram_map()
|
||||||
|
|
||||||
f.write('// memory regions\n')
|
f.write('// memory regions\n')
|
||||||
regions = []
|
regions = []
|
||||||
cc_regions = []
|
cc_regions = []
|
||||||
@ -1391,10 +1380,8 @@ class ChibiOSHWDef(object):
|
|||||||
if ext_flash_size > 32:
|
if ext_flash_size > 32:
|
||||||
self.error("We only support 24bit addressing over external flash")
|
self.error("We only support 24bit addressing over external flash")
|
||||||
|
|
||||||
if self.env_vars['APP_RAM_START'] is None:
|
ram_reserve_start,ram0_start_address = self.get_ram_reserve_start()
|
||||||
# default to start of ram for shared ram
|
if ram_reserve_start > 0 and ram0_start_address == ram0_start:
|
||||||
# possibly reserve some memory for app/bootloader comms
|
|
||||||
ram_reserve_start = self.get_ram_reserve_start()
|
|
||||||
ram0_start += ram_reserve_start
|
ram0_start += ram_reserve_start
|
||||||
ram0_len -= ram_reserve_start
|
ram0_len -= ram_reserve_start
|
||||||
if ext_flash_length == 0 or self.is_bootloader_fw():
|
if ext_flash_length == 0 or self.is_bootloader_fw():
|
||||||
|
Loading…
Reference in New Issue
Block a user