Добавить защищённое обновление приложения через RS и CAN с сохранением загрузчика, проверкой CRC, восстановлением передачи и защитой EEPROM. Подключить общий процесс сборки C2000 и автоматический счётчик версии для согласованных RAM, Flash, CAN и паспортов бинарных образов. Уточнить запуск ЦАП, обработку измерений и параметров нагрузки, начальную индикацию и документацию регистров GAS. Дополнить модели аппаратуры и изолировать заголовки CAN в тестах. Проверка: 26 тестов выпуска, 4 теста восстановления CAN и восемь программных моделей CAN, Flash, EEPROM, ЦАП, параметров и TESTLAMP.
30 lines
4.8 KiB
C
30 lines
4.8 KiB
C
#include <stdlib.h> /* Позволяет ограничению модели завершить процесс при зависшем STOP. */
|
||
#define main existing_load_regressions /* Повторно использует проверенную модель GPIO, setup и tick действующих тестов нагрузки. */
|
||
#include "../load_control/load_control_test.c" /* Компилирует настоящий DAC.c с включённым новым путём CAN Boot. */
|
||
#undef main /* Собственный main проверяет переход из рабочего состояния в постоянный загрузчик. */
|
||
static unsigned int waiting_ticks; /* Ограничивает ожидание, чтобы ошибка остановки завершала тест, а не зависала. */
|
||
void ServiceDog(void) /* Моделирует работу Timer1 между проходами main, ожидающего завершённый STOP. */
|
||
{ /* Подменяет аппаратный scheduler, сохраняя настоящий алгоритм Load_runner. */
|
||
if (++waiting_ticks > 1500U) { puts("FAIL: CAN Boot STOP timeout"); exit(1); } /* Штатная остановка занимает около секунды; 1500 мс оставляет запас на границу периода ЦАП. */
|
||
CpuTimer1.InterruptCount++; /* Продвигает те же часы, которые читает production Load_boot_stop. */
|
||
Commands = 0x0380U; /* Продолжает подавать START, инициализацию и калибровку для проверки запрета повторного пуска. */
|
||
tick(1U, 1, 100U); /* Выполняет реальный миллисекундный автомат при свежем напряжении, которое обычно разрешает нагрузку. */
|
||
} /* Возвращается в цикл ожидания production функции. */
|
||
int main(void) /* Проверяет оба CAN-адреса нагрузок и вход из IDLE/работающего состояния. */
|
||
{ /* Содержит только модель времени и проверки наблюдаемых безопасных выходов. */
|
||
unsigned int mode, running, starts; /* Перебирает УМП5/6 и оба исходных состояния. */
|
||
for (mode = 5U; mode <= 6U; ++mode) { /* Обе штатные нагрузки обязаны одинаково останавливаться перед CAN Boot. */
|
||
for (running = 0U; running < 2U; ++running) { /* Начальный IDLE также должен получить полный STOP, даже если нагрузка ещё не запускалась. */
|
||
READY = 1; setup(mode); CpuTimer1.InterruptCount = 0UL; waiting_ticks = 0U; /* Сбрасывает production автомат и независимые часы очередного сценария. */
|
||
Commands = running ? 0x0080U : 0U; tick(20U, 1, 100U); /* При необходимости запускает нагрузку штатной командой до входа в загрузчик. */
|
||
starts = test_starts; /* Повторный START после открытия входа в boot запрещён. */
|
||
Load_boot_stop(); /* Вызывает настоящую блокирующую остановку, связанную с F28335Boot_Quiesce. */
|
||
CHECK(!READY && test_stop && !test_start && !test_permission && load_state == LOAD_IDLE); /* Требует снятый START, удержанный STOP и закрытый прикладной цикл. */
|
||
CHECK(load_zero_sent && !IMPowse && waiting_ticks >= 1000U && test_starts == starts); /* Проверяет завершение секундного импульса и отсутствие нового пуска от продолжающихся команд. */
|
||
CHECK(modbus[123] == DAC_min() && modbus[0x1C] == 40); /* Подтверждает реально отправленный код базовых 4 мА вместо калибровочного задания. */
|
||
} /* Завершает проверку двух исходных состояний. */
|
||
} /* Завершает обе штатные нагрузки. */
|
||
puts("PASS: CAN Boot uses full STOP and 4mA; live START/calibration cannot restart either load"); /* Сообщает проверенные свойства перехода, а не факт физической прошивки. */
|
||
return 0; /* Успех означает прохождение всех четырёх аппаратных сценариев модели. */
|
||
} /* Завершает поведенческую проверку остановки перед CAN Boot. */
|