Подключи общий генератор версии и SCI8-конвертацию через templates. Сохрани метаданные и SHA-256 готового BIN, совместимость с Python 3.8 и прежний SETGUI preflight. Опиши настройку CCS и локальное копирование результатов.
7.2 KiB
Подключение precompile и postcompile из templates
Новый CCS-проект C2000: локальные версия и SCI8 BIN
Используйте обновлённую папку templates целиком. Режим --identity добавлен для нового проекта: Windows, Python 3.8+ в PATH и TI C2000 compiler с hex2000.exe. Git в PATH нужен для хеша коммита. Без Git либо без commit в проекте или templates используется NOGIT000; сборка и локальная конвертация разрешены. Это явно видно в manifest. SETGUI и доступ к серверу не требуются.
1. Создайте конфигурацию версии
В корне проекта CCS (рядом с .project) скопируйте ccs/firmware_identity.example.json под именем firmware_identity.json (UTF-8):
{
"product": "MY_CONTROLLER",
"target": "TMS320F28335",
"version": [0, 1, 0]
}
Задайте своё изделие, настоящий контроллер и нужную версию. Для TMS320F2812 замените target. Пример версии — 0.1.0; это не номер предыдущих прошивок. Этот JSON — единственное вручную редактируемое место версии в данной схеме.
2. Добавьте команды в CCS
Project Properties → Build → Steps, для нужной конфигурации. Пример предполагает templates в C:\Projects\templates. Замените только этот путь своим; макросы CCS оставьте как есть.
Pre-build steps → Command, одной строкой:
cmd /c call "C:\Projects\templates\tools\firmware-build\ccs\precompile.bat" --identity "${PROJECT_LOC}" "${PROJECT_LOC}\firmware_identity.json" "${BuildDirectory}\generated"
Post-build steps → Command, одной строкой:
cmd /c call "C:\Projects\templates\tools\firmware-build\ccs\postcompile.bat" --identity "${CG_TOOL_ROOT}" "${BuildDirectory}" "${BuildArtifactFileBaseName}" "${BuildDirectory}\generated\firmware_identity.json" "${BuildDirectory}\firmware"
Нужны оба шага. Precompile создаёт версию, UTC-время и Git-метаданные до компиляции. Postcompile преобразует OUT в SCI8 HEX/BIN, создаёт manifest и SHA-256 для точного BIN. Он не повторяет запрос Git после компиляции. В этом режиме firmware-release.cmd не нужен.
BuildArtifactFileBaseName должен быть именем без пути; OUT должен находиться в BuildDirectory. Если проект кладёт OUT в отдельный каталог, передайте фактический каталог вторым аргументом postcompile вместо BuildDirectory.
3. Выполните полную сборку
Apply and Close → Clean → Build Project. Настройте шаги отдельно для Debug/Release; их generated и firmware находятся внутри своих BuildDirectory.
Результаты:
Debug/
generated/
firmware_identity.h
firmware_identity.json
firmware/
MyFirmware.hex
MyFirmware_BUILDID.bin
MyFirmware_BUILDID.bin.manifest.json
MyFirmware_BUILDID.bin.sha256
Добавьте generated и firmware в игнорируемые Git-каталоги. Обычно вся папка Debug уже игнорируется. Полный Rebuild обязателен для выпуска. BAT сами по себе не подтверждают, что OUT собран именно с этим заголовком.
4. Копирование результата в каталог SETGUI
Чтобы после успешного postcompile скопировать BIN в K:\git_project\newProject\SETGUI\..periph_28335\firmware\, добавьте в конец существующей команды Post-build:
&& copy /Y "${BuildDirectory}\firmware\*.bin" "K:\git_project\newProject\SETGUI\..periph_28335\firmware\"
Для копирования BIN вместе с manifest и SHA-256 используйте полную команду ниже. Она соответствует templates в K:\git_project\newProject\newTEMPL\templates; при другом расположении замените путь к postcompile.bat.
cmd /c call "K:\git_project\newProject\newTEMPL\templates\tools\firmware-build\ccs\postcompile.bat" --identity "${CG_TOOL_ROOT}" "${BuildDirectory}" "${BuildArtifactFileBaseName}" "${BuildDirectory}\generated\firmware_identity.json" "${BuildDirectory}\firmware" && copy /Y "${BuildDirectory}\firmware\*.bin" "K:\git_project\newProject\SETGUI\..periph_28335\firmware\" && copy /Y "${BuildDirectory}\firmware\*.bin.manifest.json" "K:\git_project\newProject\SETGUI\..periph_28335\firmware\" && copy /Y "${BuildDirectory}\firmware\*.bin.sha256" "K:\git_project\newProject\SETGUI\..periph_28335\firmware\"
В поле CCS вся команда должна быть одной строкой. Папка назначения должна существовать. && запускает следующую операцию только при успешном завершении предыдущей. Маски копируют все соответствующие файлы из каталога firmware, включая результаты прошлых сборок; /Y разрешает замену одноимённых файлов. Это локальное копирование, без публикации на сервер.
Версия внутри устройства
Это подготовка метаданных сборки и файла. Чтобы версия присутствовала в программе и ответах устройства, подключите заголовок firmware_identity.h к модулю версии и обработчику запроса. Include path: ${BuildDirectory}/generated. Для C2000 с 16-битным char нужна адаптация байтового контракта; обычный 8-битный порт нельзя считать готовым. Смотрите PORTING.md.
Прежний режим и Keil
Для совместимости сохранены старые вызовы CCS без --identity и исходные Keil BAT:
call "templates\tools\firmware-build\keil\precompile.bat" "project-root" "generated\firmware_build_id.h"
call "templates\tools\firmware-build\keil\postcompile.bat" "firmware-release.cmd"
Этот precompile вызывает make_build_id.ps1, а postcompile — SETGUI preflight готового HEX/BIN. Для этого отдельного режима нужны firmware-release.cmd и настроенный SETGUI по инструкции публикатора. Его конфигурация выпуска не читается режимом --identity.