Как можно автоматически проверить исходный код Arduino (непрерывная интеграция)?

16

Я хотел бы управлять своим исходным кодом Arduino (проектами и библиотеками) под контролем исходного кода с помощью непрерывного тестирования. Как я могу автоматически скомпилировать код с помощью инструментов непрерывной интеграции, чтобы обеспечить правильную компиляцию каждой версии? В лучшем случае нужно уметь настраивать сборки для нескольких процессоров, опционально запускать модульные тесты и проверять максимальный размер двоичного файла.

Jakob
источник
Кроме передачи через Ино и avr-size?
Игнасио Васкес-Абрамс
@ IgnacioVazquez-Abrams Я не против, какие инструменты использовать, но он должен запускаться автоматически на каком-то облачном хостинге или сервисе непрерывной интеграции.
Якоб
1
Компилировать двоичный размер не так сложно, но для выполнения модульных тестов вам придется структурировать свой код таким образом, чтобы он был модульно-тестируемым, что достаточно сложно, если вы хотите сохранить небольшой размер. Кроме того, вам нужно будет выполнить эти тесты на чипе или в эмуляторе, чтобы получить более или менее надежный тест.
GolezTrol
Я нашел github.com/kyab/travis-test-arduino, но его экспериментальный и всеобъемлющий ответ / учебное пособие в качестве ответа было бы лучше.
Якоб
3
Проблема заключается в том, что она идет вразрез с первоначальной целью непрерывной интеграции: она предназначена для внесения изменений, а затем для автоматической сборки и развертывания в течение нескольких минут. Это позволяет вашим клиентам получать последние функции и исправления по мере их появления, а не каждые два месяца. Для Arduino это просто «облако, проверяющее, что оно создает». Для модульных тестов вам, возможно, придется обходить библиотеки Arduino для построения функций и отправлять примеры данных через «контакты».
Анонимный Пингвин

Ответы:

6

Новейшая версия Arduino ide имеет интерфейс командной строки для создания и загрузки кода. Но вы можете сделать это с помощью make-файла и avrdude. Теперь вы скомпилировали свой код, НО вам нужно протестировать. Так как симулятор сложен, неполон, экспансивен и ... Просто симуляция, и поскольку чипы относительно дешевы, создание доски для ведьм сделает взаимодействие HW И проверит результаты самым быстрым и простым способом. На эту «специальную» доску вы можете загрузить что-то вроде переводчика, который берет тест с ПК и выполнить его, что-то похожее на фирму для Arduino. По крайней мере, так я бы его построил. И, насколько я знаю, реализации этого не известно, даже если я вполне уверен, что многие отрасли должны и, вероятно, делают это.

Lesto
источник
4

Как создатель PlatformIO я бы порекомендовал вам изучить его. Это кроссплатформенный компоновщик кода и отсутствующий менеджер библиотек. Он может создавать один и тот же код для многих популярных платформ и плат встраиваемых систем.

PlatformIO может быть интегрирован со многими популярными системами непрерывной интеграции (CI) (или с вашими собственными). Смотрите документацию с примерами .

Давайте рассмотрим .travis.ymlконфиг / шаблон для Travis CI:

language: python
python:
    - "2.7"

env:
    - PLATFORMIO_CI_SRC=path/to/source/file.c
    - PLATFORMIO_CI_SRC=path/to/source/file.ino
    - PLATFORMIO_CI_SRC=path/to/source/directory

install:
    - python -c "$(curl -fsSL https://raw.githubusercontent.com/platformio/platformio/master/scripts/get-platformio.py)"

script:
    - platformio ci --board=TYPE_1 --board=TYPE_2 --board=TYPE_N

пример

Интеграция для USB_Host_Shield_2.0проекта. .travis.ymlФайл конфигурации:

language: python
python:
    - "2.7"

env:
    - PLATFORMIO_CI_SRC=examples/acm/acm_terminal
    - PLATFORMIO_CI_SRC=examples/Bluetooth/WiiIRCamera PLATFORMIO_BUILD_FLAGS="-DWIICAMERA"
    - PLATFORMIO_CI_SRC=examples/ftdi/USBFTDILoopback
    - PLATFORMIO_CI_SRC=examples/Xbox/XBOXUSB
    # - ...

install:
    - python -c "$(curl -fsSL https://raw.githubusercontent.com/platformio/platformio/master/scripts/get-platformio.py)"

    # Libraries from PlatformIO Library Registry
    # http://platformio.org/#!/lib/show/416/TinyGPS
    # http://platformio.org/#!/lib/show/417/SPI4Teensy3
    - platformio lib install 416 417

script:
    - platformio ci --board=uno --board=teensy31 --board=due --lib="."
ikravets
источник
3
Если вы аффилированы или связаны с PlatformIO, вы должны сообщить об этом в своем ответе, иначе он может быть помечен и удален как спам. Благодарность!
Ник Гэммон
3

Один из примеров настройки непрерывной интеграции Jenkins для проекта Arduino можно найти здесь: Непрерывная интеграция для встраиваемых систем.

В примере показано, как создать и загрузить изображение в Arduino и выполнить веб-тесты Selenium (тестируемая система - веб-сервер на базе Arduino).

jperala
источник
хорошо, потому что он использует некоторые существующие программы, которые богаты функциональностью. но, кажется, делать только веб-тестирование; Можете ли вы расширить ответ? также ссылочный ответ плохой.
Лесто
3

Я написал этот тестовый блок юнит- тестов для Arduino, так как я не мог найти правильного существующего. Хотя я не писал его для CI, это было бы хорошо для работы CI, так как он не требует аппаратного обеспечения, но может быть запущен на ПК.

Выполнение заданий CI без аппаратного обеспечения имеет как хорошие, так и плохие стороны, причем хорошие

  • Нет перепрошивки, не требуется аппаратное обеспечение -> можно запустить параллельно -> быстро проверить, например, для каждого коммита
  • Никаких проблем с оборудованием, влияющих на тесты -> не нужно беспокоиться, если этот тест просто провалился, потому что мой XYZ-аппаратный компонент нестабилен

С другой стороны есть:

  • Он не проверяет фактический целевой код, например, ваш int имеет 32 бита на вашем ПК и 16 бит на AVR.
susundberg
источник
« Ваш« int »на вашем компьютере 64 бит »: вы, вероятно, имеете в виду «32 бит», или вы используете какую-то экзотическую ОС.
Эдгар Бонет
Вы правы, конечно, спасибо. Я отредактировал свой ответ, чтобы исправить это.
Сусундберг
обратите внимание, что вы можете настроить домашний CI-сервер с дешевым ПК, например, малиной, подключенным к плате HW, и, таким образом, иметь часть инфраструктуры CI, работающей на реальном HW (при этом, возможно, сохраняя облачный CI по умолчанию для всего программного обеспечения). )
Лесто
3

Я только что собрал рецензию приличного размера в качестве ответа на этот связанный вопрос о платформе CI / модульного тестирования Arduino, которую я написал , и, наконец, достаточно зрелой, чтобы начать публичное обсуждение.

arduino_ciРубиновый камень поддерживает локальное тестирование и интеграцию Travis CI (например , эту работу сборки для библиотеки Adafruit Fona ).

Некоторые примеры того, как это объединяет:

У меня есть проблема, созданная для сообщения о размере эскиза, но никакой работы над этим не было сделано. Также возможно, что когда-нибудь я смогу распараллелить сборки, но на данный момент я не совсем уверен, как бы я это сделал. В настоящее время наиболее трудоемким этапом сборки на Travis CI является загрузка Arduino IDE ... параллельное тестирование не окажет большого влияния на это, если каждая задача должна выполнить этот шаг.

Ян
источник
1

Я бы посоветовал использовать плагин arduino eclipse с именем sloeber sloeber.io, руководителем которого я являюсь.
Он интегрируется с контролем версий и позволяет строить на нескольких платформах, поскольку поддерживает несколько конфигураций.
Хотя это еще не идиотское доказательство, я задокументировал и продемонстрировал, используя модульное тестирование кода Arduino на локальном ПК с использованием среды тестирования Google.
Вот ссылка на блог, содержащий презентацию о том, как вы можете это сделать. http://blog.baeyens.it/#post25

jantje
источник