Перейти на компактные 12-словные записи v4 и сохранять 10 процентов банка после отключения. Добавить трёхсекундное ожидание роста ЗПТ и настраиваемый лимит пусков. Явно инициализировать состояние UART и гарантировать публикацию параметров EEPROM перед запуском Timer2. Сохранить воспроизводимые сборки, регрессионные проверки, документацию и обновлённые результаты сборки; исключить временные артефакты.
11 KiB
Назначение исходников Бальзам-167
Все редактируемые исходники C/H, ASM, CMD и Python используют UTF-8 без BOM. Русский текст найден рядом с каждой строкой исходников из Git-индекса, однако часть пояснений шаблонная и требует содержательной доработки. Существующие уведомления TI и сведения о поставляемых файлах сохранены. Таблица формального покрытия, ограничения проверки и результаты проверки качества находятся в COMMENT_AUDIT.md и ../tests/comments/run_test.py.
Порядок работы
main.c сначала настраивает системные такты, PIE, внешнюю RAM, адрес платы, CAN и оба SCI. Затем запускает EEPROM, очищает RAM журнала, явно инициализирует регистратор и автомат LOAD, настраивает Timer1 и разрешает прерывания. Параметры читаются из EEPROM; для LOAD Setup_DAC_time применяет длительность нарастания тока и проверяет сохранённый тайм-аут CAN. Главный цикл обслуживает команды, сохранение параметров, события регистратора и передачу служебного CAN.
Timer1 задаёт основную частоту READY_FREQ=1000 Гц. Для измерительной платы обработчик находится в measure.c, для пульта — в pulto.c. Автомат нагрузки выполняется в Timer1: он владеет START/STOP/разрешением и обновлением тока ЦАП. Главный цикл не включает нагрузку поверх состояния защиты. Timer2 продвигает автомат EEPROM; ожидание SPI не выполняется внутри длительной блокировки IRQ.
Внутренние модули
| Файл | Назначение и важные ограничения |
|---|---|
| main.c | Порядок запуска, общий цикл, команды загрузчика и Modbus; COM_1 115200 с FIFO. |
| ADC.c | Настройка каналов АЦП, обработка преобразований и обновление фильтров. |
| measure.c | Типы датчиков, температурные/токовые/мощностные расчёты, диагностика, периодический такт. |
| filter_bat2.c | Накопительный фильтр; история и сумма обновляются вместе с новым отсчётом. |
| DAC.c | Передача слов ЦАП и автомат нагрузки: свежесть CAN, напряжение, STOP и настраиваемый лимит пусков. |
| ecan.c | Штатные CAN-кадры и отдельный служебный обмен УМП/GAS; ISR принимает, главный цикл передаёт ответ. |
| RS485.c | SCI-A/SCI-B, разбор кадров и упаковка слов; FIFO используется только первым портом. |
| message.c | FC03/FC06, маршрутизация УМП/GAS, заводские и сохраняемые параметры. |
| gas167.c | Карта 167/v1; проверка всего диапазона до чтения; ограничение записи такое же, как у обычного Modbus. |
| log_to_mem.c | Два банка RAM регистратора, события START/STOP/CAN/RS, замороженный архив и чтение через УМП. |
| shared_ump.c | Подключение общего протокола и паспорта из соседнего репозитория; логика общей библиотеки здесь не дублируется. |
| spise2p.c | SPI EEPROM: команда, адрес, порции данных, границы страниц и ожидание окончания записи. |
| bios.c | Последовательный загрузчик, команды памяти и EXTEND; адрес EEPROM проверяется отдельно от RAM. |
| cntrl_adr.c | Установка собственного/универсального адреса устройства. |
| peripher.c | Аппаратные перемычки, тип платы, кнопки, выбор канала и служебные GPIO. |
| kanal.c | Последовательная передача битов индикации выбранного канала. |
| pulto.c | Периодический обработчик и обмен пульта. |
| crc16.c | Таблицы и алгоритмы CRC для используемых пакетов. |
| tools.c | Внешняя шина XINTF Zone7 и задержки в микросекундах. |
Заголовки проекта
package.h определяет аппаратные адреса и псевдонимы modbus. Стартовый ток находится в 0x50, конечный — в 0x51. Сохраняемый LOAD_CAN_TIMEOUT занимает 0x52: разрешено 1..60000 мс; заводское значение 2000 мс устанавливается Default_params. Setup_DAC_time исправляет недопустимое сохранённое значение на 600 мс. Load_runner дополнительно использует 600 мс для локальной страховки при недопустимом значении. LOAD_STATUS=0x7C доступен только для чтения. LOAD_MAX_ATTEMPTS=0x7D — сохраняемый лимит 1..65535 пусков, по умолчанию 5; ноль при записи отклоняется. Текущий счётчик остаётся в слове 5 блока FC03(0x1300, 8), а подготовка тактов ЦАП не обнуляет настроенный лимит.
eeprom_config.h выбирает физическую микросхему при сборке. spise2p.h задаёт ширину адреса, длину страницы и типы задания SPI. gas167.h описывает границы профиля и контракт снимка. log_to_mem.h задаёт формат точек и ёмкость банков. RS485.h описывает состояние портов, буферы, FIFO и тайм-ауты. measure.h хранит частоты, типы датчиков и битовые состояния диагностики. caliber.h содержит заводские калибровочные значения. GPIO_table.h и peripher.h задают аппаратные сигналы. Остальные заголовки объявляют интерфейсы одноимённых модулей.
Слово C28x и физические байты
На C28x int и char имеют ширину 16 бит. Адреса технологических регистров и GAS считаются словами. Размеры EEPROM, загрузочного SCI8 BIN и октеты RTU считаются 8-битными байтами. Поэтому преобразование адреса EEPROM в байты выполняется явно. Хостовые проверки используют uint16_t и модель аппаратных регистров, чтобы обычные 8-битные char/32-битные int ПК не меняли смысл пакетов.
F28335.cmd размещает код в RAM и экспортирует абсолютные символы границ EEPROM. EEPROM не является памятью, доступной ядру напрямую: ROM загружает образ по SPI в RAM. Увеличение EEPROM не расширяет .text или RAM регистратора. Секция .logg остаётся в Zone7A. Подробные пределы: EEPROM_LAYOUT.md.
Поставляемые TI файлы
DSP2833x_headers/include содержит структуры аппаратных регистров и их битовые поля. GlobalVariableDefs.c размещает структуры в именованных секциях; файлы Headers_BIOS.cmd/Headers_nonBIOS.cmd связывают их с аппаратными адресами. Рабочая сборка использует nonBIOS.
DSP2833x_common содержит начальную настройку тактов, таймеров, АЦП, PIE и XINTF, таблицы векторов и программные приоритеты ISR. В SWPrioritizedIsrLevels.h приоритет 0 исключает источник, меньшее ненулевое значение означает более высокий приоритет; MINT и MG вычисляют соответствующие маски. ADC_cal.asm и usDelay.asm обеспечивают фабричную калибровку/задержку C28x. Комментарии описывают исходный порядок инструкций; код поставляемых модулей не изменён.
Настройки и результаты сборки
.project регистрирует связанные исходники и заголовки, .cproject задаёт Debug, Release, флаги, пути и pre/post-build. .ccsproject описывает устройство и инструментарий, .settings/*.prefs — настройки Eclipse/CCS. Эти XML и properties содержат русские комментарии без изменения значений опций.
firmware_identity.json — входные product/target. Паспорт BIN и profile-comparison.json — структурированные данные; комментарии JSON недопустимы. Их поля описаны в FIRMWARE_IDENTITY.md и GAS_167_M95M02.md. .bin/.hex/.out/.map, EXE, LIB и XLS — данные или результаты сторонних инструментов; их нельзя снабжать комментариями как исходный C-код. .paf2/.sbl и корневые .pjt/.lkf относятся к старым данным IDE/сборки. postBuildStep_Debug.old и fixya.bat сохранены как старые служебные сценарии; действующие шаги CCS определены в .cproject и соседних шаблонах.