Использование Qbs для работы с STM8/SDCC в QtСreator (обновлено)

разделы: среда разработки, STM8, дата: 29 июля 2022, обновлено 1 сентябряг.

Спустя долгое время, я решил узнать как обстоят дела с поддержкой STM8 в SDCC. Последней версией SDCC которой я пользовался был 3.6. За это время OpenOCD официально обзавелся поддержкой STM8. И т.к. в Linux я пользуюсь преимущественно IDE QtCreator, был соблазн перетащить туда проекты на STM8. Главная сложность возникла с системой управления сборки. QtCreator умеет работать только с qmake, qbs и cmake проектами. Qmake не поддерживает sdcc никоим образом. У CMake поддержка заявлена, но она чисто декларативная. Таким образом нам остается только Qbs.

Ранее для STM8 я пользовался STVD+Cosmic, но это требовало работы из виртуальной машины. STVD - отличная среда разработки, но в визуальном плане она устарела уже давно. Отсутствие темной темы и линтера конечно не принципиально, но без этого уже не комфортно работать. Кроме того Cosmic для проверки лицензии постоянно стучится в интернет. Я же предпочитаю отключать интернет в виртуалке.

Ок, но какие сложности нас ожидают?

  • Во-первых, придется порядком повозиться с этим с этим Qbs. Система плохо документированная и малоиспользуемая.
  • Во-вторых, отладка в QtCreator не такая комфортная как в STVD. Нет периферийных регистров, а ассемблерный код не сопровождается отладочной информацией. Что бы поставить, например, точку остановки на ассемблерное прерывание, сначала нужно узнать его адрес, и затем ставить break на физический адрес.
  • Ни и конечно приходится постоянно бороться с SDCC. Современный SDCC/STM8, в принципе, не так уж плох, но за ним приходиться постоянно следить, а проблемные участки кода переписывать в виде ассемблерных функций.

Итак, софт который нам понадобится для программирования микроконтроллеров STM8:

  1. stm8-binutils - Комплект утилит, который включает в себя: отладчик stm8-gdb, stm8-size, stm8-objdump и пр.
  2. OpenOCD - версии 0.11. Начиная с этой версии появилась поддержка SWIM протокола и чипов STM8
  3. QtCreator. Я использую версию 5.0.3 из SBo
  4. Qbs. Моя версия 1.16.0 так же из SBo. Она не самая свежая, но работает без вопросов.
  5. Для линтера в QtCreator потребуется плагин qt-creator-llvm и cppcheck.

Из аппаратного обеспечения нам достаточно будет платы c чипом STM8S103F3 и ST-Link V2 с поддержкой SWIM протокола.

Руководств и мануалов по использованию Qbs в baremetal-проектах почти нет. Есть несколько примеров для STM32, но так как там используется GCC, скрипт проекта будет отличаться от такового для SDCC.

Прежде чем начать что-то делать, настоятельно рекомендуется пройти по последним трем ссылкам, и изучить их содержимое.

Содержание:

I. Консольный Qbs проект для STM8+SDCC

  1. Знакомимся с Blink из примеров QBS
  2. Отладка прошивки
  3. Сборка прошивки в ELF-формат
  4. Раздельные профили компиляции "debug" и "release"
  5. Добавляем ассемблерный файл в проект

II. Работа с проектом в Qt Creator

  1. Настраиваем STM8 baremetal kit в QtCreator
  2. Качество кода SDCC

III. Бонус

  1. Qbs-скрипт для STM32F103C8-проекта на CMSIS (пошаговая инструкция)

IV. Добавленно позже

  1. Проблема с запуском OpenOCD для STM8

Читать дальше