''' 5. 缓存交互模块(midware/bus/cache_handler.py) 实现与 SJA1000/61580 共享缓存的交互,提供WriteDoubleWord/ReadDoubleWord核心操作,对接虚拟芯片: ''' from loguru import logger class CacheHandler: """缓存交互层,实现sysbus WriteDoubleWord/ReadDoubleWord操作""" def __init__(self): # 模拟共享缓存(字典实现,key=内存地址,value=32位无符号整数) self.shared_cache = {} logger.info("共享缓存初始化完成(模拟SJA1000/61580)") def write_double_word(self, mem_addr, data): """ 写入双字(32位)数据到共享缓存 :param mem_addr: 内存地址(int) :param data: 16/32位数据(int),自动转为32位无符号整数 """ if not isinstance(mem_addr, int) or not isinstance(data, int): logger.error("写入缓存参数错误,地址/数据必须为整数") return False # 转为32位无符号整数 ##给RENODE的写入的语句未定 self.shared_cache[mem_addr] = data & 0xFFFFFFFF logger.debug(f"写入缓存:地址{hex(mem_addr)},数据{hex(self.shared_cache[mem_addr])}") return True def read_double_word(self, mem_addr): """ 从共享缓存读取双字(32位)数据 :param mem_addr: 内存地址(int) :return: 32位无符号整数,地址不存在返回0 """ if not isinstance(mem_addr, int): logger.error("读取缓存参数错误,地址必须为整数") return 0 data = self.shared_cache.get(mem_addr, 0) logger.debug(f"读取缓存:地址{hex(mem_addr)},数据{hex(data)}") return data def clear_cache(self, mem_addr=None): """清空指定地址/全部缓存""" if mem_addr: if mem_addr in self.shared_cache: del self.shared_cache[mem_addr] logger.debug(f"清空缓存地址:{hex(mem_addr)}") else: self.shared_cache.clear() logger.info("清空全部共享缓存") return True # 单例模式,全局唯一缓存实例 cache_handler = CacheHandler()