Обновить логгер УМП и исправить запуск UART и EEPROM

Перейти на компактные 12-словные записи v4 и сохранять 10 процентов банка после отключения. Добавить трёхсекундное ожидание роста ЗПТ и настраиваемый лимит пусков. Явно инициализировать состояние UART и гарантировать публикацию параметров EEPROM перед запуском Timer2. Сохранить воспроизводимые сборки, регрессионные проверки, документацию и обновлённые результаты сборки; исключить временные артефакты.
This commit is contained in:
2026-10-12 12:25:41 +03:00
parent f741741cf8
commit 1e911e5250
38 changed files with 2089 additions and 1485 deletions
@@ -0,0 +1,18 @@
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.