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

94 lines
9.0 KiB
C
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.
/* Проверка ump_logger на модели ПК. Русские пояснения сохранены в UTF-8. */
/* Подключает "../../Source/Internal/log_to_mem.c": двухбанковый регистратор событий нагрузки во внешней RAM. */
#include "../../Source/Internal/log_to_mem.c"
/* Описывает структуру mock_gpio GpioDataRegs;; порядок полей определяет расположение данных. */
struct mock_gpio GpioDataRegs;
/* Объявляет READY — данные READY; Desk — аппаратно определённый тип платы; Mode — рабочий адрес или режим платы, выбранный перемычками. Начальное значение задаётся справа от знака равенства. */
int READY = 1, Desk = 6, Mode = 5;
/* Объявляет modbus — массив технологических регистров; слово int на C28x занимает 16 бит; CanTimeOutErrorTR — CAN Time Out ошибка TR. */
int modbus[128], CanTimeOutErrorTR;
/* Объявляет IMPowse — данные IMPowse; WAKEpowse — данные WAKEpowse. */
unsigned long IMPowse, WAKEpowse;
/* Объявляет ADC_table — АЦП table. */
unsigned int ADC_table[4];
/* Задаёт CHECK = if (!(x)) return __LINE__; данные CHECK. */
#define CHECK(x) if (!(x)) return __LINE__
/* Точка входа: настраивает периферию, загружает параметры и обслуживает команды в главном цикле. */
int main(void)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Объявляет i — данные i. */
unsigned int i;
/* Simulate COFF boot with dirty RAM, including a stale active bank. */
/* Записывает ump_state значением ump_count = ump_cursor = ump_next = 0xA5A5; данные ump_state. */
ump_state = ump_count = ump_cursor = ump_next = 0xA5A5;
/* Записывает ump_period значением ump_divider = 0xA5A5; период записи регистратора в миллисекундных тактах. */
ump_period = ump_divider = 0xA5A5;
/* Записывает ump_time значением ump_sequence = 0xA5A5A5A5UL; миллисекундное время регистратора. */
ump_time = ump_sequence = 0xA5A5A5A5UL;
/* Записывает ump_bank значением ump_archive_bank = 0xA5A5; индекс активного банка регистратора. */
ump_bank = ump_archive_bank = 0xA5A5;
/* Записывает ump_archive_count значением ump_archive_next = ump_generation = 0xA5A5; ump archive число. */
ump_archive_count = ump_archive_next = ump_generation = 0xA5A5;
/* Записывает ump_source значением ump_post = 0xA5A5; данные ump_source. */
ump_source = ump_post = 0xA5A5;
/* Цикл for (i = 0; i < 2; i++) ump_pm67_voltage[i] = 0xA5A5;; задаёт начальное значение, условие продолжения и шаг перебора. */
for (i = 0; i < 2; i++) ump_pm67_voltage[i] = 0xA5A5;
/* Записывает ump_prev_commands значением ump_prev_inputs = ump_prev_outputs = 0xA5A5; данные ump_prev_commands. */
ump_prev_commands = ump_prev_inputs = ump_prev_outputs = 0xA5A5;
/* Вызывает ump_log_init. Явно инициализирует оба банка регистратора до включения IRQ; повторный старт записи архив не стирает. */
ump_log_init();
/* Вызывает CHECK с аргументами (ump_log_read(UMP_LOG_BASE) == 0x554D) в текущей последовательности операций. */
CHECK(ump_log_read(UMP_LOG_BASE) == 0x554D);
/* Вызывает CHECK с аргументами (ump_log_read(UMP_LOG_BASE+1) == 4) в текущей последовательности операций. */
CHECK(ump_log_read(UMP_LOG_BASE+1) == 4);
/* Вызывает CHECK с аргументами (ump_log_read(UMP_LOG_BASE+2) == 0) в текущей последовательности операций. */
CHECK(ump_log_read(UMP_LOG_BASE+2) == 0);
/* Вызывает CHECK с аргументами (ump_log_read(UMP_LOG_BASE+3) == 0) в текущей последовательности операций. */
CHECK(ump_log_read(UMP_LOG_BASE+3) == 0);
/* Вызывает CHECK с аргументами (ump_log_read(UMP_LOG_BASE+6) == 20) в текущей последовательности операций. */
CHECK(ump_log_read(UMP_LOG_BASE+6) == 20);
/* Цикл for (i = 7; i <= 8; i++) CHECK(ump_log_read(UMP_LOG_BASE+i) == 0);; задаёт начальное значение, условие продолжения и шаг перебора. */
for (i = 7; i <= 8; i++) CHECK(ump_log_read(UMP_LOG_BASE+i) == 0);
/* Цикл for (i = 12; i <= 15; i++) CHECK(ump_log_read(UMP_LOG_BASE+i) == 0);; задаёт начальное значение, условие продолжения и шаг перебора. */
for (i = 12; i <= 15; i++) CHECK(ump_log_read(UMP_LOG_BASE+i) == 0);
/* Вызывает CHECK с аргументами (ump_bank == 0 && ump_archive_bank == 1) в текущей последовательности операций. */
CHECK(ump_bank == 0 && ump_archive_bank == 1);
/* Вызывает CHECK с аргументами (ump_cursor == 0 && ump_next == 0 && ump_archive_next == 0) в текущей последовательности операций. */
CHECK(ump_cursor == 0 && ump_next == 0 && ump_archive_next == 0);
/* Вызывает CHECK с аргументами (ump_divider == 0 && ump_sequence == 0 && ump_post == 0) в текущей последовательности операций. */
CHECK(ump_divider == 0 && ump_sequence == 0 && ump_post == 0);
/* Цикл for (i = 0; i < 2; i++) CHECK(ump_pm67_voltage[i] == 0);; задаёт начальное значение, условие продолжения и шаг перебора. */
for (i = 0; i < 2; i++) CHECK(ump_pm67_voltage[i] == 0);
/* Вызывает CHECK с аргументами (ump_prev_commands == 0 && ump_prev_inputs == 0 && ump_prev_outputs == 0) в текущей последовательности операций. */
CHECK(ump_prev_commands == 0 && ump_prev_inputs == 0 && ump_prev_outputs == 0);
/* Вызывает CHECK с аргументами (ump_log_write(UMP_LOG_BASE+1, 20)) в текущей последовательности операций. */
CHECK(ump_log_write(UMP_LOG_BASE+1, 20));
/* Вызывает CHECK с аргументами (ump_log_write(UMP_LOG_BASE, 1)) в текущей последовательности операций. */
CHECK(ump_log_write(UMP_LOG_BASE, 1));
/* Вызывает CHECK с аргументами (ump_state == 1 && ump_count == 1) в текущей последовательности операций. */
CHECK(ump_state == 1 && ump_count == 1);
/* Вызывает ump_log_tick. Продвигает время регистратора в Timer1 и снимает записи с заданным периодом. */
ump_log_tick();
/* Вызывает CHECK с аргументами (ump_time == 1) в текущей последовательности операций. */
CHECK(ump_time == 1);
/* Вызывает CHECK с аргументами (ump_log_write(UMP_LOG_BASE, 0)) в текущей последовательности операций. */
CHECK(ump_log_write(UMP_LOG_BASE, 0));
/* Записывает ump_archive_count значением 7; ump_generation = 2; ump archive число. */
ump_archive_count = 7; ump_generation = 2;
/* Записывает ump_pm67_voltage[0] значением 123; данные ump_pm67_voltage. */
ump_pm67_voltage[0] = 123;
/* Вызывает CHECK с аргументами (ump_log_write(UMP_LOG_BASE, 1)) в текущей последовательности операций. */
CHECK(ump_log_write(UMP_LOG_BASE, 1));
/* Вызывает CHECK с аргументами (ump_time == 1 && ump_archive_count == 7 && ump_generation == 2) в текущей последовательности операций. */
CHECK(ump_time == 1 && ump_archive_count == 7 && ump_generation == 2);
/* Вызывает CHECK с аргументами (ump_word(0, 0, 9) == 123) в текущей последовательности операций. */
CHECK(ump_word(0, 0, 9) == 123);
/* Завершает main и возвращает 0. */
return 0;
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}