Обновить логгер УМП и исправить запуск UART и EEPROM
Перейти на компактные 12-словные записи v4 и сохранять 10 процентов банка после отключения. Добавить трёхсекундное ожидание роста ЗПТ и настраиваемый лимит пусков. Явно инициализировать состояние UART и гарантировать публикацию параметров EEPROM перед запуском Timer2. Сохранить воспроизводимые сборки, регрессионные проверки, документацию и обновлённые результаты сборки; исключить временные артефакты.
This commit is contained in:
@@ -34,25 +34,17 @@ int main(void)
|
||||
ump_archive_count = ump_archive_next = ump_generation = 0xA5A5;
|
||||
/* Записывает ump_source значением ump_post = 0xA5A5; данные ump_source. */
|
||||
ump_source = ump_post = 0xA5A5;
|
||||
/* Записывает ump_can_header значением ump_can_count = 0xA5A5; ump CAN header. */
|
||||
ump_can_header = ump_can_count = 0xA5A5;
|
||||
/* Цикл for (i = 0; i < 3; i++) ump_can_data[i] = 0xA5A5;; задаёт начальное значение, условие продолжения и шаг перебора. */
|
||||
for (i = 0; i < 3; i++) ump_can_data[i] = 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_dac_ramp значением ump_dac_duration = ump_dac_go10 = 0xA5A5; ump ЦАП ramp. */
|
||||
ump_dac_ramp = ump_dac_duration = ump_dac_go10 = 0xA5A5;
|
||||
/* Записывает ump_dac_stop10 значением ump_dac_position = 0xA5A5; ump ЦАП stop 10. */
|
||||
ump_dac_stop10 = ump_dac_position = 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) == 3) в текущей последовательности операций. */
|
||||
CHECK(ump_log_read(UMP_LOG_BASE+1) == 3);
|
||||
/* Вызывает 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) в текущей последовательности операций. */
|
||||
@@ -69,18 +61,10 @@ int main(void)
|
||||
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);
|
||||
/* Вызывает CHECK с аргументами (ump_can_header == 0 && ump_can_count == 0) в текущей последовательности операций. */
|
||||
CHECK(ump_can_header == 0 && ump_can_count == 0);
|
||||
/* Цикл for (i = 0; i < 3; i++) CHECK(ump_can_data[i] == 0);; задаёт начальное значение, условие продолжения и шаг перебора. */
|
||||
for (i = 0; i < 3; i++) CHECK(ump_can_data[i] == 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_dac_ramp == 0 && ump_dac_duration == 0 && ump_dac_go10 == 0) в текущей последовательности операций. */
|
||||
CHECK(ump_dac_ramp == 0 && ump_dac_duration == 0 && ump_dac_go10 == 0);
|
||||
/* Вызывает CHECK с аргументами (ump_dac_stop10 == 0 && ump_dac_position == 0) в текущей последовательности операций. */
|
||||
CHECK(ump_dac_stop10 == 0 && ump_dac_position == 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)) в текущей последовательности операций. */
|
||||
@@ -101,8 +85,8 @@ int main(void)
|
||||
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, 40) == 123) в текущей последовательности операций. */
|
||||
CHECK(ump_word(0, 0, 40) == 123);
|
||||
/* Вызывает CHECK с аргументами (ump_word(0, 0, 9) == 123) в текущей последовательности операций. */
|
||||
CHECK(ump_word(0, 0, 9) == 123);
|
||||
/* Завершает main и возвращает 0. */
|
||||
return 0;
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
|
||||
@@ -60,10 +60,12 @@ __declspec(dllexport) int run_tests(void)
|
||||
ump_log_can(0x8000U | 306U, 999, 0, 0); /* Not a one-based CAN address. */ /* Вызывает ump_log_can. Обновляет последние CAN-данные и напряжения для следующего снимка регистратора. */
|
||||
/* Вызывает CHECK с аргументами (ump_log_write(UMP_LOG_BASE, 1)) в текущей последовательности операций. */
|
||||
CHECK(ump_log_write(UMP_LOG_BASE, 1));
|
||||
/* Вызывает CHECK с аргументами (ump_word(0, 0, 40) == 123 && ump_word(0, 0, 41) == 789) в текущей последовательности операций. */
|
||||
CHECK(ump_word(0, 0, 40) == 123 && ump_word(0, 0, 41) == 789);
|
||||
/* Вызывает CHECK с аргументами (ump_word(0, 0, 9) == 123 && ump_word(0, 0, 10) == 789) в текущей последовательности операций. */
|
||||
CHECK(ump_word(0, 0, 9) == 123 && ump_word(0, 0, 10) == 789);
|
||||
/* Вызывает CHECK с аргументами (2UL * UMP_LOG_CAPACITY * UMP_LOG_WORDS <= LOG_PAGE_LEN) в текущей последовательности операций. */
|
||||
CHECK(2UL * UMP_LOG_CAPACITY * UMP_LOG_WORDS <= LOG_PAGE_LEN);
|
||||
/* Проверяет чётную ширину записи v4 и нулевой резерв, необходимый для пар слов CAN. */
|
||||
CHECK(UMP_LOG_WORDS == 12 && ump_word(0, 0, 11) == 0);
|
||||
/* Вызывает CHECK с аргументами (!ump_log_write(UMP_LOG_BASE, 1)) в текущей последовательности операций. */
|
||||
CHECK(!ump_log_write(UMP_LOG_BASE, 1));
|
||||
/* Вызывает CHECK с аргументами (!ump_log_write(UMP_LOG_BASE+1, 20)) в текущей последовательности операций. */
|
||||
@@ -76,10 +78,10 @@ __declspec(dllexport) int run_tests(void)
|
||||
CHECK(ump_word(0, 0, 0) == 901-UMP_LOG_CAPACITY);
|
||||
/* Вызывает CHECK с аргументами (ump_word(0, UMP_LOG_CAPACITY-1, 0) == 900) в текущей последовательности операций. */
|
||||
CHECK(ump_word(0, UMP_LOG_CAPACITY-1, 0) == 900);
|
||||
/* Вызывает CHECK с аргументами (ump_word(0, 0, 8) == 1234) в текущей последовательности операций. */
|
||||
CHECK(ump_word(0, 0, 8) == 1234);
|
||||
/* Вызывает CHECK с аргументами (ump_word(0, 0, 24) == 6) в текущей последовательности операций. */
|
||||
CHECK(ump_word(0, 0, 24) == 6);
|
||||
/* Вызывает CHECK с аргументами (ump_word(0, 0, 6) == 160) в текущей последовательности операций. */
|
||||
CHECK(ump_word(0, 0, 6) == 160);
|
||||
/* Вызывает CHECK с аргументами (ump_word(0, 0, 7) == 6) в текущей последовательности операций. */
|
||||
CHECK(ump_word(0, 0, 7) == 6);
|
||||
/* Короткая CAN-команда должна остаться отдельным событием. */
|
||||
/* Записывает modbus[127] значением 0x40; массив технологических регистров; слово int на C28x занимает 16 бит. */
|
||||
modbus[127] = 0x40;
|
||||
@@ -99,8 +101,8 @@ __declspec(dllexport) int run_tests(void)
|
||||
CHECK(ump_post == UMP_POST_POINTS);
|
||||
/* Вызывает CHECK с аргументами (ump_word(0, ump_count-1, 2) == 0x103) в текущей последовательности операций. */
|
||||
CHECK(ump_word(0, ump_count-1, 2) == 0x103);
|
||||
/* Вызывает CHECK с аргументами (ump_word(0, ump_count-1, 18) == 0x807F) в текущей последовательности операций. */
|
||||
CHECK(ump_word(0, ump_count-1, 18) == 0x807F);
|
||||
/* Вызывает CHECK с аргументами (ump_word(0, ump_count-1, 3) == 0x40) в текущей последовательности операций. */
|
||||
CHECK(ump_word(0, ump_count-1, 3) == 0x40);
|
||||
/* Цикл for (i=0; i<UMP_POST_POINTS-1; i++) ump_log_tick();; задаёт начальное значение, условие продолжения и шаг перебора. */
|
||||
for (i=0; i<UMP_POST_POINTS-1; i++) ump_log_tick();
|
||||
/* Вызывает CHECK с аргументами (ump_generation == 0) в текущей последовательности операций. */
|
||||
@@ -117,16 +119,16 @@ __declspec(dllexport) int run_tests(void)
|
||||
CHECK(ump_word(1, UMP_LOG_CAPACITY-1, 2) == 5);
|
||||
/* Вызывает CHECK с аргументами (ump_count == 0 && ump_state == 1) в текущей последовательности операций. */
|
||||
CHECK(ump_count == 0 && ump_state == 1);
|
||||
/* Вызывает CHECK с аргументами (ump_word(1, UMP_LOG_CAPACITY-1, 40) == 123) в текущей последовательности операций. */
|
||||
CHECK(ump_word(1, UMP_LOG_CAPACITY-1, 40) == 123);
|
||||
/* Вызывает CHECK с аргументами (ump_word(1, UMP_LOG_CAPACITY-1, 41) == 789) в текущей последовательности операций. */
|
||||
CHECK(ump_word(1, UMP_LOG_CAPACITY-1, 41) == 789);
|
||||
/* Вызывает CHECK с аргументами (ump_word(1, UMP_LOG_CAPACITY-1, 9) == 123) в текущей последовательности операций. */
|
||||
CHECK(ump_word(1, UMP_LOG_CAPACITY-1, 9) == 123);
|
||||
/* Вызывает CHECK с аргументами (ump_word(1, UMP_LOG_CAPACITY-1, 10) == 789) в текущей последовательности операций. */
|
||||
CHECK(ump_word(1, UMP_LOG_CAPACITY-1, 10) == 789);
|
||||
/* Вызывает ump_log_can. Обновляет последние CAN-данные и напряжения для следующего снимка регистратора. */
|
||||
ump_log_can(0x8000U | 305U, 999, 0, 0);
|
||||
/* Вызывает CHECK с аргументами (ump_word(0, ump_count-1, 40) == 999) в текущей последовательности операций. */
|
||||
CHECK(ump_word(0, ump_count-1, 40) == 999);
|
||||
/* Вызывает CHECK с аргументами (ump_word(1, UMP_LOG_CAPACITY-1, 40) == 123) в текущей последовательности операций. */
|
||||
CHECK(ump_word(1, UMP_LOG_CAPACITY-1, 40) == 123);
|
||||
/* Вызывает CHECK с аргументами (ump_word(0, ump_count-1, 9) == 999) в текущей последовательности операций. */
|
||||
CHECK(ump_word(0, ump_count-1, 9) == 999);
|
||||
/* Вызывает CHECK с аргументами (ump_word(1, UMP_LOG_CAPACITY-1, 9) == 123) в текущей последовательности операций. */
|
||||
CHECK(ump_word(1, UMP_LOG_CAPACITY-1, 9) == 123);
|
||||
/* Записывает generation значением ump_generation; данные generation. */
|
||||
generation = ump_generation;
|
||||
/* Записывает archived значением ump_word(1, UMP_LOG_CAPACITY-1, 0); данные archived. */
|
||||
@@ -265,8 +267,8 @@ __declspec(dllexport) int run_tests(void)
|
||||
* Запись по старым технологическим адресам через сервис запрещена. */
|
||||
/* Записывает length значением ump_can_prepare(3, UMP_LOG_BASE, 16, reply, &error); длина. */
|
||||
length = ump_can_prepare(3, UMP_LOG_BASE, 16, reply, &error);
|
||||
/* Вызывает CHECK с аргументами (!error && length == 16 && reply[0] == 0x554D && reply[1] == 3) в текущей последовательности операций. */
|
||||
CHECK(!error && length == 16 && reply[0] == 0x554D && reply[1] == 3);
|
||||
/* Вызывает CHECK с аргументами (!error && length == 16 && reply[0] == 0x554D && reply[1] == 4) в текущей последовательности операций. */
|
||||
CHECK(!error && length == 16 && reply[0] == 0x554D && reply[1] == 4);
|
||||
/* Записывает length значением ump_can_prepare(3, UMP_LOG_LIVE, 124, reply, &error); длина. */
|
||||
length = ump_can_prepare(3, UMP_LOG_LIVE, 124, reply, &error);
|
||||
/* Вызывает CHECK с аргументами (!error && length == 124) в текущей последовательности операций. */
|
||||
@@ -275,14 +277,14 @@ __declspec(dllexport) int run_tests(void)
|
||||
CHECK(reply[2] <= UMP_LOG_LIVE_RECORDS);
|
||||
/* Цикл for (i=4+reply[2]*UMP_LOG_WORDS; i<124; i++) CHECK(reply[i] == 0);; задаёт начальное значение, условие продолжения и шаг перебора. */
|
||||
for (i=4+reply[2]*UMP_LOG_WORDS; i<124; i++) CHECK(reply[i] == 0);
|
||||
/* Записывает length значением ump_can_prepare(3, UMP_LOG_DATA, 84, reply, &error); длина. */
|
||||
length = ump_can_prepare(3, UMP_LOG_DATA, 84, reply, &error);
|
||||
/* Вызывает CHECK с аргументами (!error && length == 84) в текущей последовательности операций. */
|
||||
CHECK(!error && length == 84);
|
||||
/* Записывает length значением ump_can_prepare(3, UMP_LOG_DATA, 42, reply, &error); длина. */
|
||||
length = ump_can_prepare(3, UMP_LOG_DATA, 42, reply, &error);
|
||||
/* Вызывает CHECK с аргументами (!error && length == 42) в текущей последовательности операций. */
|
||||
CHECK(!error && length == 42);
|
||||
/* Записывает length значением ump_can_prepare(3, UMP_LOG_DATA, 24, reply, &error); длина. */
|
||||
length = ump_can_prepare(3, UMP_LOG_DATA, 24, reply, &error);
|
||||
/* Вызывает CHECK с аргументами (!error && length == 24) в текущей последовательности операций. */
|
||||
CHECK(!error && length == 24);
|
||||
/* Записывает length значением ump_can_prepare(3, UMP_LOG_DATA, 12, reply, &error); длина. */
|
||||
length = ump_can_prepare(3, UMP_LOG_DATA, 12, reply, &error);
|
||||
/* Вызывает CHECK с аргументами (!error && length == 12) в текущей последовательности операций. */
|
||||
CHECK(!error && length == 12);
|
||||
/* Вызывает ump_can_prepare с аргументами (3, UMP_LOG_LIVE, 126, reply, &error) в текущей последовательности операций. */
|
||||
ump_can_prepare(3, UMP_LOG_LIVE, 126, reply, &error);
|
||||
/* Вызывает CHECK с аргументами (error == 2) в текущей последовательности операций. */
|
||||
|
||||
Reference in New Issue
Block a user