from ScEpTIC.config.base_config import ScEpTICBaseConfig from ScEpTIC.emulator.memory.physical.physical_memory_management_unit import PhysicalMemoryManagementUnit class BaseMemoryConfig(ScEpTICBaseConfig): """ Configuration for volatile / non-volatile memory """ _config_domain = { 'enabled': {'class': bool, 'mode': 'set'}, 'contains_stack': {'class': bool, 'mode': 'set'}, 'contains_heap': {'class': bool, 'mode': 'set'}, 'contains_gst': {'class': bool, 'mode': 'set'}, 'gst_prefix': {'class': str, 'mode': 'set'}, 'gst_base_address': {'class': int, 'mode': 'set'}, 'max_size': {'class': int, 'mode': 'set'}, 'gst_mmu': {'class': PhysicalMemoryManagementUnit, 'mode': 'set'}, } def __init__(self, main_config): super().__init__(main_config) self.enabled = True self.contains_stack = False self.contains_heap = False self.contains_gst = True self.gst_prefix = 'GST' self.gst_base_address = 0 self.max_size = 0 self.gst_mmu = None class MemoryConfig(ScEpTICBaseConfig): """ Memory configuration """ _config_domain = { 'stack_base_address': {'class': int, 'mode': 'set'}, 'stack_prefix': {'class': str, 'mode': 'set'}, 'stack_mmu': {'class': PhysicalMemoryManagementUnit, 'mode': 'set'}, 'heap_base_address': {'class': int, 'mode': 'set'}, 'heap_prefix': {'class': str, 'mode': 'set'}, 'heap_mmu': {'class': PhysicalMemoryManagementUnit, 'mode': 'set'}, 'gst_default_memory': {'class': 'specific', 'values': ['volatile', 'non_volatile'], 'mode': 'set'}, 'gst_other_memory_section': {'class': str, 'mode': 'set'}, 'address_size': {'class': int, 'mode': 'set'}, 'check_memory_size': {'class': bool, 'mode': 'set'}, } def __init__(self, main_config): super().__init__(main_config) self.volatile = BaseMemoryConfig(main_config) self.volatile.set_config('gst_prefix', 'VGST') self.volatile.set_config('contains_stack', True) self.volatile.set_config('contains_heap', True) self.non_volatile = BaseMemoryConfig(main_config) self.non_volatile.set_config('gst_prefix', 'NGST') self.stack_base_address = 0 self.stack_prefix = 'S' self.stack_mmu = None self.heap_base_address = 0 self.heap_prefix = 'H' self.heap_mmu = None self.gst_default_memory = 'volatile' self.gst_other_memory_section = '.DATA,.NVM' self.address_size = 32 self.check_memory_size = True