Files
Balsam_167/tests/eeprom_profiles/check_publication.py
Andrey 1e911e5250 Обновить логгер УМП и исправить запуск UART и EEPROM
Перейти на компактные 12-словные записи v4 и сохранять 10 процентов банка после отключения. Добавить трёхсекундное ожидание роста ЗПТ и настраиваемый лимит пусков. Явно инициализировать состояние UART и гарантировать публикацию параметров EEPROM перед запуском Timer2. Сохранить воспроизводимые сборки, регрессионные проверки, документацию и обновлённые результаты сборки; исключить временные артефакты.
2026-10-12 12:25:41 +03:00

19 lines
2.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import re # Разбирает инструкции текстового дизассемблера TI C2000.
import sys # Получает путь к проверяемому листингу OUT.
from pathlib import Path # Читает сохранённый результат dis2000.
text = Path(sys.argv[1]).read_text(encoding="utf-8-sig") # Использует UTF-8-вывод дизассемблера.
for name in ("Seeprom_read", "Seeprom_write"): # Проверяет оба пути публикации задания Timer2.
match = re.search(r"^\w+\s+_" + name + r":$", text, re.M) # Находит начало настоящей функции в готовом OUT.
assert match, "Missing function: " + name # Не допускает успешной проверки неполного листинга.
body = text[match.end():] # Отделяет инструкции от заголовка функции.
end = re.search(r"^\w+\s+_\w+:$", body, re.M) # Ограничивает анализ следующим именованным символом.
body = body[:end.start()] if end else body # Не учитывает записи из другой функции.
request = re.search(r"\bOR\s+\*\+XAR\d\[2\], #0x000[12]", body) # Находит установку запроса чтения 2 или записи 1 в csr.
assert request, "Missing request publication: " + name # Требует известную форму TI O3, иначе проверку нужно пересмотреть.
stores = re.findall(r"\bMOVL\s+\*\+XAR(\d)\[(0|2|4)\],", body[:request.start()]) # Собирает только записи, выполненные до публикации запроса.
groups = {} # Группирует смещения полей по базовому регистру дескриптора.
for register, offset in stores: # Обрабатывает каждую инструкцию записи 32-битного поля.
groups.setdefault(register, set()).add(int(offset)) # Отмечает указатель 0, длину 2 и адрес 4 в словах C28x.
assert any({0, 2, 4} <= offsets for offsets in groups.values()), "Descriptor stores follow request/wait: " + name # Отвергает установленный дефект с отложенными до выхода из ожидания параметрами.
print("PASS TI O3 publication: " + name) # Подтверждает порядок инструкций конкретной функции в данном OUT.