# НАХОДИТСЯ ВНУТРИ ОСНОВНОГО ФАЙЛА СКРИПТА (После поиска code_end_vma)
# Вычисляем физический конец кода во Flash
code_end_lma = code_end_vma - 0x20000000
# КРИТИЧЕСКИЙ ФИКС ДЛЯ СОВМЕСТИМОСТИ С MPU:
# Округляем стартовый адрес данных до ближайшей аппаратной границы 16 КБ (0x4000)
# Это уберет BusFault и позволит MPU успешно разметить некэшируемую RAM!
flash_data_start_lma = (code_end_lma + 0x3FFF) & ~0x3FFF
print(f"[LMA Filter] Dynamic MPU-Safe Packing Initiated:")
print(f" -> Code region ends at Flash LMA: {hex(code_end_lma)}")
print(f" -> Data payload will start at aligned Flash LMA: {hex(flash_data_start_lma)}")