Вот уже 3-й год как я нарадоваться не могу на Qt. В нем нахожу только достоинства. Он позволяет почти все. А что не позволяет, но очень надо — можно добавить и пользоваться. Так получилось и в этот раз.

image

Предыстория

Почему-то у меня к Arduino было отношение как к игрушке. До тех пор, пока не набрел на Arduino Due. Зацепила строчка в описании к модулю, что он построен на контроллере ATSAM3X8E (ядро Cortex M3). Дело в том, что с данным контроллером (вернее, с его младшей версией) я знаком не понаслышке.

Второе — и это заставило его уже купить — это цена. У меня есть опыт разработки железа на похожем контроллере (разрабатывал автомобильный трекер), и этот опыт настойчиво зашептал, что цена за модуль с доставкой в 15$ при стоимости только контроллера на Диджикее в 12$ — это очень выгодно. Бонусом шел интегрированный источник питания c диапазоном входного напряжения от 18В до 7В, 2 USB (Programming и Native).

Постановка задачи

Модуль пришел достаточно быстро. Дальше начались танцы.

Дело в том, что в бытность свою инженером-конструктором основной IDE для меня был IAR, а системой — Windows. Сейчас же основная работа связана с написанием приложений под Linux. То есть, Qt и Ubuntu соответственно. Пойдя по пути наименьшего сопротивления, установил IDE от Arduino. Запустил и сразу понял, что это не для меня. Общее впечатление — блокнот.

Решил разработку как-то вести в Qt Creator'e. Исследовав интернет на тему «может это есть и можно применить у себя», понял: очень много информации касательно Arduino написано для AVR-based модулей. По Arduino Due информации кот наплакал. А нужной и совсем нет. Это одна из причин, по которым я пишу эту статью. Разочаровавшись, стал копать в сторону связки Qt — Cortex-M3/M4. Взяв на вооружение статьи «Программируем микроконтроллеры в QtCreator» и «Программируем микроконтроллеры stm32 при помощи QtCreator». Стал творить. Скажу сразу — статьи задали только направление.

Как и любой программист — я немного ленив. Поэтому решил сделать шаблон для Qt, чтобы всегда под рукой был.

Решение

Подготовка

Для начала установим Qt Creator и Arduino IDE. Как ставить — информации море. Останавливаться не буду.

В Arduino IDE устанавливаем поддержку модулей Arduino Due. В дальнейшем я буду вести повествование для Linux. Sapienti sat, как говорится. Почему-то она (поддержка) устанавливается в скрытую папку [home_path]/.arduino15. Исправляем этот недочет — копируем (или переносим — кому как нравится) папку [home_path]/.arduino15/packages/arduino/hardware/sam/1.6.4 в папку [arduino_path]/hardware/sam,
папку [home_path]/.arduino15/packages/arduino/tools в папку [arduino_path]/hardware/tools
. В папке [arduino_path]/hardware/arduino/sam/cores/arduino удаляем (переименовываем) файл main.cpp. Если необходимо, скачайте порт FreeRTOS и положите в папку [arduino_path]/libraries. Далее, стягиваем с гитхаба шаблоны и копируем в папку [qt_path]/Tools/QtCreator/share/qtcreator/templates/wizards. На этом подготовка закончена.

Использование

Присоединяем Arduino Due через Programming Port (через Native Port надо будет вручную стирать и сбрасывать чип). Запускаем QtCreator. Жмем «Новый проект» и наблюдаем слева новый пункт меню «Arduino ARM» (см. верхний скрин). Выбираем необходимый пункт и жмем «Выбрать...»:

image

Далее:

image

Здесь прописываем пути:

image

Получаем проект:

image

Открываем qbs-файл и проверяем пути. В принципе, если все было сделано так, как говорилось на предыдущих этапах — все должно быть в порядке. Но лучше перепроверить:



Далее идем в «Проекты» вкладка «Запуск» текущего комплекта:



В этапе «Установка» очищаем текущий метод и жмем «Установка, добавить этап». Выбираем «Особый» и пишем в строке «Команда» stty. В строке «Параметры» -F your_port speed 1200 cs8 -cstopb -parenb, где вместо your_port подставляем свой порт.

Переходим к этапу «Запуск». В строке «Команда» выбираем программу bossac. В строке «Параметры» -U false -e -w -v -b your_progect_name.bin -R, где вместо your_progect_name подставляем имя проекта.

На этом подготовка к использованию завершена. Можно жать на «Запустить»:




И наслаждаться мигающим светодиодом.

Комментарии (6)


  1. mapron
    20.06.2015 07:39
    +1

    Потрясающе! =) Просто и удобно. Еще один аргумент для перехода на замечательный qbs.

    Хотя я не понял, почему вызов arm-eabi GCC сделан не через кастомный тулчейн? Я под другой embedded так и делал.


    1. midmva Автор
      20.06.2015 08:35

      Цель была максимально упростить и ускорить старт. Т.е. за 15 минут или за 5 (если Qt уже установлен) получить результат.
      В принципе, данный шаблон, после минимальных переделок, можно адаптировать под любой контроллер. Добавить поле ввода пути к установленному тулчейну и вперед!
      Я решил оставить тулчейн от Arduino потому, что уже установленная мною версия кастомного тулчейна ничем не отличается. А тут уже бритва Оккама срезала все лишнее))).


      1. mapron
        20.06.2015 09:48

        Да я что-то в таком роде и предполагал. Просто спросил, потому что я свои Rule для компилятора не добавлял, а использовал стандартный import/cpp module. Немного похачив стандартные настройки. Просто в чем там отличие от стандартных опций GCC?
        Имена компилятора и ar можно переопределять.

        p.s. мне еще вот эти конструкции не очень понравились «prefix: includePaths[8]». В плане модификации оригинального includePaths… я бы просто прямо в группе их и задавал. Но это дело вкуса.


        1. midmva Автор
          20.06.2015 10:10

          Здесь проблема вот в чем. При использовании переопределенного компилятора нету возможности вызывать (я этого не нашел, по крайней мере) разные компиляторы для разных типов файлов (для 'c' — gcc и для 'cpp' — g++). Отсюда и теги 's' (чтобы внутренний компилятор не вызывался).
          А по поводу includePath…
          Пришлось на это пойти для использования всей мощи QtCreator. Без установленной зависимости от cpp не было автодополнения, не было переходов по ctrl+click. Qt превращался в блокнот. Чтобы это включить, надо в срр добавить используемые ресурсы. Для меня удобнее было это делать одной строчкой: cpp.includePaths: includePaths. Согласен — немного вырвиглазно выглядит. Наверное, переделаю под Вашу идею — добавлять буду в группе. Спасибо за идею.


  1. midmva Автор
    20.06.2015 08:40

    По поводу QBS. Первая версия шаблона была на Makefile. Но она не давала той наглядности, что появилась с QBS.


  1. xman
    20.06.2015 12:09

    Если интересна поддержка других плат (более 150+), включая Arduino Due — советую посмотреть на PlatformIO. Не нужно ставить никакие Arduino IDE, тулчейны и тд. Работает на всех популярных ОС (Win, Linux, Mac), включая Linux ARMv6/7.

    PlatformIO имеет встроенный экспорт проекта под популярные IDE, включая Qt Creator. В Вашем случае это будет выглядит так:

    platformio init --ide qtcreator --board due
    


    Дальше достаточно просто импортировать созданный проект и «Menu: Build > Build All».