Як можна перевірити вихідний код Arduino автоматично (безперервна інтеграція)?


17

Я хотів би керувати своїм вихідним кодом Arduino (проекти та бібліотеки) під контролем джерела з постійним тестуванням. Як я можу автоматично компілювати код за допомогою інструментів безперервної інтеграції, щоб переконатися, що кожна версія компілюється чисто? У кращому випадку слід мати можливість налаштувати збірки для декількох процесорів, необов'язково виконувати тести одиниць та перевіряти наявність максимального бінарного розміру.


За винятком того, як пропустити його через Іно і avr-size?
Ігнасіо Васкес-Абрамс

@ IgnacioVazquez-Abrams Я не заперечую, які інструменти використовувати, але він повинен працювати автоматично на якомусь хмарному хостингу або службі постійної інтеграції.
Якоб

1
Скомпілювати бінарний розмір не так вже й складно, але для того, щоб робити одиничні тести, вам доведеться структурувати свій код таким чином, щоб він міг перевірити одиницю, що досить важко, якщо ви хочете зберегти розмір малим. Крім того, вам потрібно буде запустити тест на мікросхемі або в емуляторі, щоб отримати більш-менш надійний тест.
GolezTrol

Я знайшов github.com/kyab/travis-test-arduino, але його експериментальний та вичерпний відповідь / підручник як відповідь було б краще.
Якоб

3
Проблема в цьому полягає в тому, що це суперечить початковій цілі постійної інтеграції: мається на увазі підштовхнути зміни, а потім автоматично створити та розгорнути протягом декількох хвилин. Це дозволяє вашим клієнтам отримувати найновіші функції та виправлення, коли вони відбуваються, а не кожні два місяці. Для Ардуїно це просто "хмара, яка гарантує, що вона створюється". Для одиничних тестів вам, можливо, доведеться обійти бібліотеки Arduino для побудови функцій та надсилання прикладних даних через "шпильки".
Анонімний пінгвін

Відповіді:


6

Найновіша версія Arduino ide має інтерфейс командного рядка для створення та завантаження коду. Але ви, очевидно, можете це зробити за допомогою makefile та avrdude. Тепер ви склали свій код, але вам потрібно тестування. Оскільки тренажер складний, неповний, експансивний і .. Просто моделювання, і тому що чіп порівняно дешевий, побудова дошки відьом зробить взаємодію HW та перевірить результати найшвидшим та найпростішим способом. На цій "спеціальній" дошці ви можете завантажити щось на зразок перекладача-перекладача, взяти тест з ПК і виконати його, щось подібне на firmata для arduino. Принаймні так я буду будувати це. І наскільки я знаю, цього не знаю, навіть якщо я впевнений, що багато галузей повинні і, ймовірно, це роблять.


4

Як творець PlatformIO, я б рекомендував вам розібратися в цьому. Це розробник коду між платформами та відсутній менеджер бібліотеки. Він може створити той самий код для багатьох популярних вбудованих платформ і плат.

PlatformIO можна інтегрувати з багатьма популярними системами безперервної інтеграції (CI) (або власною). Дивіться документацію з прикладами .

Давайте розглянемо .travis.ymlconfig / шаблон для 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="."

3
Якщо ви пов’язані або пов'язані з PlatformIO, ви повинні розкрити це у своїй відповіді, інакше це може бути позначено і видалено як спам. Спасибі!
Нік Гаммон

3

Один приклад налаштування постійної інтеграції Дженкінса для проекту Arduino можна знайти тут: Постійна інтеграція для вбудованих систем

На прикладі показано, як створювати та завантажувати зображення в Arduino та виконувати веб-тести Selenium (система тестується веб-сервером на базі Arduino).


приємно, оскільки воно використовує якесь наявне програмне забезпечення відьом багате на можливості. але, здається, робиться лише веб-тестування; ви можете, будь ласка, розширити відповідь? також відповідь на основі посилань є поганою.
Лесто

3

Я написав цей тест UnitTest рамки для Arduino, так як я не міг знайти правильний існуючий. Поки я не писав це для CI, це було б добре підходить для роботи з CI, оскільки воно не вимагає апаратного забезпечення, але його можна запускати на ПК.

Запуск CI без апаратних засобів має хороші та погані сторони, хороші сторони це враховують

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

Знизу є:

  • Це не тестування фактичного цільового коду, наприклад, ваш "int" - 32 біти на вашому ПК та 16 біт в AVR.

" Ваш" int "- 64 біт на вашому ПК ": ви, мабуть, маєте на увазі "32 біта", або ви використовуєте якусь екзотичну ОС.
Едгар Бонет

Ви маєте рацію, звичайно, дякую. Я відредагував свою відповідь, щоб виправити це.
susundberg

зауважте, ви можете налаштувати внутрішній сервер CI за допомогою дешевого ПК, наприклад, малину, підключену до плати HW, і, таким чином, мати частину інфраструктури CI, що працює на реальному HW (при цьому, можливо, зберігати хмарний CI хмари для всього, що є програмним забезпеченням )
Лесто

3

Я тільки що склав запис пристойного розміру як відповідь на це пов'язане питання про тестування системи Arduino CI / блок, про який я написав, що нарешті достатньо зрілий, щоб почати публічно говорити.

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

Деякі приклади інтеграції:

У мене виникла проблема для повідомлення розміру ескізу, але жодної роботи з цього питання не виконано. Можливо також, що я могла б паралелізувати складання колись, але на даний момент я не точно знаю, як би це зробити. Наразі самий трудомісткий крок збирання на Travis CI - це завантаження Arduino IDE ... паралельне тестування не дасть великої вм'ятини в тому випадку, якщо кожна робота повинна зробити цей крок.


1

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.