Обновить логгер УМП и исправить запуск 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
+10
View File
@@ -1,3 +1,4 @@
static char size_cmd15; /* Моделирует локальную настройку длины команды, которую заполняет create_uart_vars. */
/* Проверка rs232_fifo на модели ПК. Русские пояснения сохранены в UTF-8. */
/* Продолжает список аргументов, полей или выражение volatile struct SCI_REGS SciaRegs,ScibRegs;; порядок элементов сохраняется. */
@@ -142,6 +143,15 @@ int main(void)
unsigned data[4200],sizes[]={0,1,2,7,8,15,16,17,31,120,253,400,8194};
/* Продолжает список аргументов, полей или выражение unsigned a,n,i,mode;unsigned request[]={16,3,0x10,0,0,16,0,0};; порядок элементов сохраняется. */
unsigned a,n,i,mode;unsigned request[]={16,3,0x10,0,0,16,0,0};
RS_DATA expected = {0}; /* Задаёт чистое состояние порта независимо от содержимого моделируемой RAM. */
memset(&rs_a, 0xA5, sizeof(rs_a)); /* Воспроизводит ненулевые длины, указатели и флаги SCI-A после загрузки COFF. */
memset(&rs_b, 0x5A, sizeof(rs_b)); /* Проверяет независимый сброс второго порта с другим рисунком мусора. */
create_uart_vars(17); /* Вызывает настоящую загрузочную инициализацию до разрешения IRQ. */
expected.commnumber = COM_1; /* Единственным ненулевым полем после общего сброса должен быть номер первого порта. */
assert(memcmp(&rs_a, &expected, sizeof(rs_a)) == 0); /* Проверяет все поля и оба буфера первого порта, включая флаги готовности. */
expected.commnumber = COM_2; /* Подготавливает ожидаемое состояние второго порта. */
assert(memcmp(&rs_b, &expected, sizeof(rs_b)) == 0 && size_cmd15 == 17); /* Проверяет второй порт и сохранение настройки длины команды. */
/* Цикл for(mode=0;mode<2;mode++)for(a=0;a<sizeof(sizes)/sizeof(sizes[0]);a++) ; задаёт начальное значение, условие продолжения и шаг перебора. */
for(mode=0;mode<2;mode++)for(a=0;a<sizeof(sizes)/sizeof(sizes[0]);a++) {
/* Записывает n значением sizes[a];for(i=0;i<4200;i++)data[i]=(i*131U+17U)&65535; данные n. */
+2 -2
View File
@@ -22,8 +22,8 @@ def read(path):
return re.sub(r'/\*.*?\*/|//[^\n]*','',path.read_bytes().decode('utf-8').replace('\r\n','\n'),flags=re.S)
# Задаёт source по выражению справа; значение используется последующими операциями.
source=read(root/'Source/Internal/RS485.c')
# Задаёт names по выражению справа; значение используется последующими операциями.
names=['RS_RX_Handler','RS_TX_Handler','RS_Send','RS_BSend','RS_SetBitMode',
# Извлекает инициализацию и обработчики UART, чтобы проверить старт на неочищенной RAM вместе с обменом.
names=['create_uart_vars','RS_RX_Handler','RS_TX_Handler','RS_Send','RS_BSend','RS_SetBitMode',
# Продолжает текущий вызов, список или выражение: 'RS_FifoWait','RS_FifoTx','RS_FifoStart','RS_FifoAbort','RS_FifoTick1ms']; порядок аргументов сохраняется.
'RS_FifoWait','RS_FifoTx','RS_FifoStart','RS_FifoAbort','RS_FifoTick1ms']
# Задаёт prototypes по выражению справа; значение используется последующими операциями.