Обновить логгер УМП и исправить запуск 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 -22
View File
@@ -335,10 +335,8 @@ void CAN_send(int Port, int data[], int Addr)
void Handlai(volatile struct ECAN_MBOXES * ECanMboxes)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Объявляет adr — данные adr. */
unsigned int adr;
/* Объявляет bit — представление регистра отдельными битовыми полями. */
unsigned int bit[3];
/* adr адресует очередное технологическое слово, slot выбирает одно из трёх слов кадра, mask хранит их биты достоверности 15..13. */
unsigned int adr, slot, mask;
/* Объявляет hiword — данные hiword; loword — данные loword. */
unsigned long hiword,loword;
/* Объявляет Data — данные. */
@@ -376,12 +374,8 @@ void Handlai(volatile struct ECAN_MBOXES * ECanMboxes)
/* Записывает adr значением (hiword >> 16); данные adr. */
adr = (hiword >> 16);
/* Записывает bit[0] значением adr & 0x8000; представление регистра отдельными битовыми полями. */
bit[0] = adr & 0x8000;
/* Записывает bit[1] значением adr & 0x4000; представление регистра отдельными битовыми полями. */
bit[1] = adr & 0x4000;
/* Записывает bit[2] значением adr & 0x2000; представление регистра отдельными битовыми полями. */
bit[2] = adr & 0x2000;
/* Маска 0xE000 объединяет биты достоверности трёх слов CAN; сдвиг в цикле последовательно выводит каждый из них в бит 15. */
mask = adr & 0xE000U;
/* Оставляет биты маски adr значением 0x1fff; данные adr. */
adr &= 0x1fff;
@@ -393,18 +387,12 @@ void Handlai(volatile struct ECAN_MBOXES * ECanMboxes)
/* Записывает Data[2] значением (loword ) & 0xffff; данные. */
Data[2] = (loword ) & 0xffff;
/* Проверяет if(bit[0]) if(adr < ANSWER_LEN и; последующий оператор выполняется только при истинном условии. */
if(bit[0]) if(adr < ANSWER_LEN &&
/* Записывает modbus[adr] значением Data[0]; adr++; массив технологических регистров; слово int на C28x занимает 16 бит. */
!(Desk == dsk_LOAD && (adr == 0x7CU || adr == 0x7DU))) modbus[adr] = Data[0]; adr++;
/* Проверяет if(bit[1]) if(adr < ANSWER_LEN и; последующий оператор выполняется только при истинном условии. */
if(bit[1]) if(adr < ANSWER_LEN &&
/* Записывает modbus[adr] значением Data[1]; adr++; массив технологических регистров; слово int на C28x занимает 16 бит. */
!(Desk == dsk_LOAD && (adr == 0x7CU || adr == 0x7DU))) modbus[adr] = Data[1]; adr++;
/* Проверяет if(bit[2]) if(adr < ANSWER_LEN и; последующий оператор выполняется только при истинном условии. */
if(bit[2]) if(adr < ANSWER_LEN &&
/* Записывает modbus[adr] значением Data[2]; массив технологических регистров; слово int на C28x занимает 16 бит. */
!(Desk == dsk_LOAD && (adr == 0x7CU || adr == 0x7DU))) modbus[adr] = Data[2];
/* Обрабатывает ровно три слова CAN; адрес растёт независимо от маски, а её сдвиг выбирает достоверность следующего слова. */
for (slot = 0; slot < 3; slot++, adr++, mask <<= 1)
/* Бит 15 текущей маски разрешает запись только в опубликованные 128 регистров, исключая выход за массив. */
if ((mask & 0x8000U) && adr < ANSWER_LEN &&
/* Для LOAD сохраняет статус 0x7C и отклоняет ноль в лимите 0x7D; остальные значения сохраняются как исходное 16-битное слово. */
!(Desk == dsk_LOAD && (adr == 0x7CU || (adr == 0x7DU && !(unsigned int)Data[slot])))) modbus[adr] = Data[slot];
/* Фиксируем применённую команду до выхода из обработчика CAN. */
/* A short frame cannot confirm voltage freshness. Service frames