지속적인 테스트를 통해 소스 제어하에 Arduino 소스 코드 (프로젝트 및 라이브러리)를 관리하고 싶습니다. 연속 통합 도구로 코드를 자동으로 컴파일하여 각 버전이 깨끗하게 컴파일되도록하려면 어떻게해야합니까? 가장 좋은 경우 여러 프로세서에 대한 빌드를 구성하고 선택적으로 단위 테스트를 실행하고 최대 이진 크기를 확인할 수 있어야합니다.
지속적인 테스트를 통해 소스 제어하에 Arduino 소스 코드 (프로젝트 및 라이브러리)를 관리하고 싶습니다. 연속 통합 도구로 코드를 자동으로 컴파일하여 각 버전이 깨끗하게 컴파일되도록하려면 어떻게해야합니까? 가장 좋은 경우 여러 프로세서에 대한 빌드를 구성하고 선택적으로 단위 테스트를 실행하고 최대 이진 크기를 확인할 수 있어야합니다.
답변:
Arduino ide의 최신 버전에는 코드를 빌드하고 업로드하는 명령 줄 인터페이스가 있습니다. 그러나 makefile과 avrdude로 분명히 할 수 있습니다. 이제 코드를 컴파일했지만 테스트가 필요합니다. 시뮬레이터는 복잡하고 불완전하며 광범위합니다. 단지 시뮬레이션 일뿐입니다. 칩이 비교적 저렴하기 때문에 보드 마녀를 만들면 HW 상호 작용을 수행하고 결과를 가장 빠르고 쉽게 확인할 수 있습니다. 이 "특별한"보드에 통역사 마녀와 같은 것을 PC에서 테스트하여 arduino의 firmata와 유사한 것으로 업로드 할 수 있습니다. 적어도 그것이 내가 그것을 짓는 방법입니다. 그리고 내가 아는 한 많은 산업이 그렇게해야한다고 확신 하더라도이 구현을 알지 못합니다.
PlatformIO 의 제작자로서 나는 그것을 살펴볼 것을 권장합니다. 크로스 플랫폼 코드 빌더이며 누락 된 라이브러리 관리자입니다. 널리 사용되는 많은 임베디드 개발 플랫폼 및 보드에 대해 동일한 코드를 빌드 할 수 있습니다.
PlatformIO는 널리 사용되는 많은 CI (Continuous Integration) 시스템 (또는 자체 시스템 ) 과 통합 될 수 있습니다 . 예제가 포함 된 설명서를 참조하십시오 .
.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="."
Arduino 프로젝트에 Jenkins 연속 통합을 설정하는 한 가지 예는 다음과 같습니다. 임베디드 시스템의 연속 통합
이 예는 이미지를 빌드하여 Arduino에 업로드하고 Selenium 웹 테스트를 실행하는 방법을 보여줍니다 (테스트중인 시스템은 Arduino 기반 웹 서버 임).
나는이 테스트를 썼다 유닛 테스트에 내가 적절한 기존 찾을 수 있기 때문에, 아두 이노를위한 프레임 워크입니다. CI 용으로 쓰지 않았지만 하드웨어가 필요 없지만 PC에서 실행할 수 있기 때문에 CI 작업에 적합합니다.
하드웨어없이 CI 작업을 실행하면 좋은면과 나쁜면이 있습니다.
단점은 다음과 같습니다.
방금 작성한 Arduino CI / 단위 테스트 프레임 워크 에 대한 이 관련 질문 에 대한 답변으로 적절한 크기의 글을 작성 했습니다.
arduino_ci
루비 보석은 현지 테스트와 트래비스 CI 통합 (예 모두 지원 그리고 Adafruit FONA 라이브러리에 대한이 빌드 작업을 ).
통합 방법에 대한 몇 가지 예 :
나는이 스케치 크기를보고하기 위해 만든 문제를 하지만 작업은 이루어 없습니다. 언젠가 빌드를 병렬화 할 수도 있지만 현재로서는 내가 어떻게 할 것인지 정확히 모르겠습니다. 현재 Travis CI에서 가장 시간이 많이 걸리는 빌드 단계는 Arduino IDE를 다운로드하는 것입니다. 병렬 테스트는 모든 작업이 해당 단계를 수행 해야하는 경우 그다지 흠집을 내지 않습니다.
프로젝트 리더 인 sloeber sloeber.io 라는 arduino eclipse 플러그인을 사용하는 것이 좋습니다 .
버전 제어와 통합되며 여러 구성을 지원하므로 여러 플랫폼에서 빌드 할 수 있습니다.
아직 바보 증거는 아니지만 Google 테스트 프레임 워크를 사용하여 로컬 PC에서 arduino 코드의 단위 테스트를 사용하여 문서화하고 시연했습니다.
다음은 블로그 사용 방법에 대한 프레젠테이션이 포함 된 블로그 링크입니다. http://blog.baeyens.it/#post25
avr-size
?