/* Проверка firmware_identity на модели ПК. Русские пояснения сохранены в UTF-8. */ /* Test the actual 167 binding, not just a fake protocol backend. Build against * the generated header from the firmware build under test. No MCU registers. */ /* Подключает "firmware_identity.h": настройки и интерфейс firmware_identity. */ #include "firmware_identity.h" /* Подключает "firmware_info_static.h": настройки и интерфейс firmware_info_static. */ #include "firmware_info_static.h" /* Подключает "ump_tms28335.h": настройки и интерфейс ump_tms28335. */ #include "ump_tms28335.h" /* Подключает : настройки и интерфейс assert. */ #include /* Продолжает список аргументов, полей или выражение static unsigned logger_reads, logger_writes;; порядок элементов сохраняется. */ static unsigned logger_reads, logger_writes; /* Проверяет область чтения регистратора и возвращает слова состояния либо архивной записи. */ unsigned int ump_log_read(unsigned int address) /* Изменяет счётчик в выражении { (void)address; ++logger_reads; return 0x554dU; } на один для следующего шага. */ { (void)address; ++logger_reads; return 0x554dU; } /* Применяет допустимые команды управления регистратором, сохраняя ограничения адресов. */ int ump_log_write(unsigned int address, unsigned int value) /* Изменяет счётчик в выражении { (void)address; (void)value; ++logger_writes; return 1; } на один для следующего шага. */ { (void)address; (void)value; ++logger_writes; return 1; } /* Точка входа: настраивает периферию, загружает параметры и обслуживает команды в главном цикле. */ int main(void) /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { /* Объявляет words — слова. */ uint16_t words[UMP_MAX_WORDS]; /* Продолжает список аргументов, полей или выражение ump_octet wire[UMP_RTU_CAPACITY];; порядок элементов сохраняется. */ ump_octet wire[UMP_RTU_CAPACITY]; /* Продолжает список аргументов, полей или выражение unsigned error, i;; порядок элементов сохраняется. */ unsigned error, i; /* Вызывает assert с аргументами (ump_tms28335_prepare(3, UMP_FIRMWARE_INFO, 12, words, &error) == 12 && !error) в текущей последовательности операций. */ assert(ump_tms28335_prepare(3, UMP_FIRMWARE_INFO, 12, words, &error) == 12 && !error); /* Вызывает assert с аргументами (words[0] == 1 && words[1] == FIRMWARE_VERSION_MAJOR) в текущей последовательности операций. */ assert(words[0] == 1 && words[1] == FIRMWARE_VERSION_MAJOR); /* Вызывает assert с аргументами (words[2] == FIRMWARE_VERSION_MINOR && words[3] == FIRMWARE_VERSION_PATCH) в текущей последовательности операций. */ assert(words[2] == FIRMWARE_VERSION_MINOR && words[3] == FIRMWARE_VERSION_PATCH); /* Вызывает assert с аргументами (words[4] == FI_YEAR && words[5] == FI_PAIR(FI_MONTH, FI_DAY)) в текущей последовательности операций. */ assert(words[4] == FI_YEAR && words[5] == FI_PAIR(FI_MONTH, FI_DAY)); /* Вызывает assert с аргументами (words[8] == FI_PAIR(FI_ID_0, FI_ID_1)) в текущей последовательности операций. */ assert(words[8] == FI_PAIR(FI_ID_0, FI_ID_1)); /* Вызывает assert с аргументами (logger_reads == 0) в текущей последовательности операций. */ assert(logger_reads == 0); /* Вызывает assert с аргументами (ump_tms28335_rtu(1,3,UMP_FIRMWARE_INFO,12,wire,UMP_RTU_CAPACITY) == 29) в текущей последовательности операций. */ assert(ump_tms28335_rtu(1,3,UMP_FIRMWARE_INFO,12,wire,UMP_RTU_CAPACITY) == 29); /* Цикл for (i=0; i<12; ++i) assert(((wire[3+i*2]<<8) | wire[4+i*2]) == words[i]);; задаёт начальное значение, условие продолжения и шаг перебора. */ for (i=0; i<12; ++i) assert(((wire[3+i*2]<<8) | wire[4+i*2]) == words[i]); /* Вызывает assert с аргументами (ump_crc(wire,29) == 0) в текущей последовательности операций. */ assert(ump_crc(wire,29) == 0); /* Вызывает ump_tms28335_prepare с аргументами (6,UMP_FIRMWARE_INFO,123,words,&error) в текущей последовательности операций. */ ump_tms28335_prepare(6,UMP_FIRMWARE_INFO,123,words,&error); /* Вызывает assert с аргументами (error == 2 && logger_writes == 0) в текущей последовательности операций. */ assert(error == 2 && logger_writes == 0); /* Firmware reads must not steal the existing logger window. */ /* Вызывает assert с аргументами (ump_tms28335_prepare(3,UMP_BASE,16,words,&error) == 16 && !error) в текущей последовательности операций. */ assert(ump_tms28335_prepare(3,UMP_BASE,16,words,&error) == 16 && !error); /* Вызывает assert с аргументами (logger_reads == 16 && words[0] == 0x554dU) в текущей последовательности операций. */ assert(logger_reads == 16 && words[0] == 0x554dU); /* Завершает main и возвращает 0. */ return 0; /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }