Làm thế nào mã nguồn Arduino có thể được kiểm tra tự động (tích hợp liên tục)?


16

Tôi muốn quản lý mã nguồn Arduino (dự án và thư viện) của mình dưới sự kiểm soát nguồn với kiểm tra liên tục. Làm cách nào tôi có thể tự động biên dịch mã bằng các công cụ tích hợp liên tục, để đảm bảo mỗi phiên bản biên dịch sạch? Trong trường hợp tốt nhất, người ta sẽ có thể định cấu hình các bản dựng cho nhiều bộ xử lý, tùy chọn chạy thử nghiệm đơn vị và kiểm tra kích thước nhị phân tối đa.


Khác với việc chuyển nó qua Ino và avr-size?
Ignacio Vazquez-Abrams

@ IgnacioVazquez-Abrams Tôi không bận tâm sử dụng công cụ nào, nhưng nó sẽ tự động chạy trên một số dịch vụ lưu trữ đám mây hoặc tích hợp liên tục.
Jakob

1
Biên dịch kích thước nhị phân không khó lắm, nhưng để thực hiện kiểm tra đơn vị, bạn sẽ phải cấu trúc mã theo cách có thể kiểm tra được đơn vị, đủ khó nếu bạn muốn giữ kích thước nhỏ. Ngoài ra, bạn sẽ cần chạy các thử nghiệm đó trên chip hoặc trong trình giả lập để có được thử nghiệm đáng tin cậy hơn hoặc ít hơn.
GolezTrol

Tôi tìm thấy github.com/kyab/travis-test-arduino nhưng thử nghiệm và hướng dẫn toàn diện / hướng dẫn của mình là câu trả lời sẽ tốt hơn.
Jakob

3
Vấn đề với điều này là nó đi ngược lại mục đích ban đầu là tích hợp liên tục: nó có nghĩa là thúc đẩy các thay đổi và sau đó để nó tự động xây dựng và triển khai trong vòng vài phút. Điều này cho phép khách hàng của bạn có được các tính năng mới nhất và sửa lỗi khi chúng xảy ra, thay vì hai tháng một lần. Đối với Arduino, nó chỉ là "đám mây đảm bảo rằng nó được xây dựng." Đối với các bài kiểm tra đơn vị, bạn có thể phải bỏ qua các thư viện Arduino để xây dựng các chức năng và gửi dữ liệu mẫu qua "chân".
Chim cánh cụt vô danh

Câu trả lời:


6

Phiên bản mới nhất của Arduino ide có giao diện dòng lệnh để xây dựng và tải lên mã. Nhưng rõ ràng bạn có thể làm điều đó bằng makefile và avrdude. Bây giờ, bạn đã biên dịch mã của bạn NHƯNG bạn cần thử nghiệm. Vì trình giả lập rất phức tạp, không đầy đủ, mở rộng và .. Chỉ là một mô phỏng và vì chip tương đối rẻ, việc xây dựng một phù thủy bảng sẽ tạo ra tương tác CTNH và kiểm tra kết quả theo cách nhanh nhất và dễ dàng nhất. Trên bảng "đặc biệt" đó, bạn có thể tải lên một cái gì đó giống như một phù thủy phiên dịch, hãy kiểm tra từ PC và thực hiện nó, một cái gì đó tương tự như Firmata cho arduino. Ít nhất đó là cách tôi sẽ xây dựng nó. Và theo như tôi biết thì không biết thực hiện điều này, ngay cả khi tôi khá chắc chắn nhiều ngành công nghiệp nên và có thể làm điều đó.


4

Là người tạo ra PlatformIO, tôi khuyên bạn nên xem xét nó. Đó là một trình xây dựng mã đa nền tảng và trình quản lý thư viện bị thiếu. Nó có thể xây dựng cùng một mã cho nhiều nền tảng và bảng phát triển nhúng phổ biến.

PlatformIO có thể được tích hợp với nhiều hệ thống Tích hợp liên tục (CI) phổ biến (hoặc của riêng bạn). Xem tài liệu với các ví dụ .

Hãy xem .travis.ymlcấu hình / mẫu cho 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

Thí dụ

Tích hợp cho USB_Host_Shield_2.0dự án. Tệp .travis.ymlcấu hình:

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
Nếu bạn được liên kết hoặc liên kết với PlatformIO, bạn nên tiết lộ điều này trong câu trả lời của mình, hoặc nó có thể bị gắn cờ và xóa là spam. Cảm ơn!
Nick Gammon

3

Một ví dụ về thiết lập tích hợp liên tục Jenkins cho dự án Arduino có thể được tìm thấy ở đây: Tích hợp liên tục cho các hệ thống nhúng

Ví dụ cho thấy cách xây dựng và tải hình ảnh lên Arduino và thực hiện các thử nghiệm web Selenium (hệ thống được thử nghiệm là máy chủ web dựa trên Arduino).


tốt đẹp bởi vì nó sử dụng một số phần mềm phù thủy hiện có là tính năng phong phú. nhưng nó dường như chỉ làm thử nghiệm web; bạn có thể vui lòng mở rộng câu trả lời? câu trả lời dựa trên liên kết là xấu.
Lesto 3/03/2015

3

Tôi đã viết bài kiểm tra này unittest khuôn khổ cho Arduino, kể từ khi tôi không thể tìm thấy phù hợp hiện có. Mặc dù tôi không viết nó cho CI, nhưng nó sẽ phù hợp với công việc của CI, vì nó không yêu cầu phần cứng nhưng có thể chạy trên PC.

Chạy các công việc CI mà không có phần cứng có mặt tốt và mặt xấu, mặt tốt đó là

  • Không nhấp nháy, không cần phần cứng -> có thể được chạy song song -> nhanh để kiểm tra ví dụ cho mọi cam kết
  • Không có vấn đề phần cứng nào ảnh hưởng đến các bài kiểm tra -> không cần phải lo lắng bài kiểm tra này đã thất bại vì thành phần phần cứng XYZ của tôi không ổn định

Về nhược điểm là:

  • Nó không kiểm tra mã mục tiêu thực tế, ví dụ 'int' của bạn là 32 bit trong PC và 16 bit trong AVR.

Phần mềm 'int' của bạn là 64 bit trong PC của bạn : bạn có thể có nghĩa là BẠC 32 bit, hoặc bạn đang sử dụng một số HĐH kỳ lạ.
Edgar Bonet

Bạn đúng tất nhiên, cảm ơn. Tôi đã chỉnh sửa câu trả lời của mình để khắc phục điều đó.
susundberg

lưu ý rằng bạn có thể thiết lập máy chủ CI tại nhà với một máy tính giá rẻ như quả mâm xôi được nối với bảng CT và do đó có một phần cơ sở hạ tầng CI chạy trên CTNH thực (trong khi có thể giữ CI đám mây mặc định cho tất cả đó là phần mềm )
Lesto

3

Tôi vừa mới kết hợp một bài viết có kích thước khá để trả lời cho câu hỏi liên quan này về khung kiểm tra đơn vị / CI của Arduino mà tôi đã viết đủ cuối cùng để bắt đầu nói chuyện công khai.

Các arduino_ciđá quý ruby hỗ trợ cả hai thử nghiệm địa phương và Travis CI tích hợp (ví dụ như xây dựng này công việc cho các thư viện Adafruit phông ).

Một số ví dụ về cách tích hợp:

Tôi có một vấn đề được tạo để báo cáo kích thước phác thảo nhưng không có công việc nào được thực hiện trên đó. Cũng có thể là tôi có thể song song các bản dựng một ngày nào đó, nhưng hiện tại tôi không chắc chắn chính xác cách tôi làm điều đó. Ngay bây giờ, bước xây dựng tốn nhiều thời gian nhất trên Travis CI là tải xuống Arduino IDE ... thử nghiệm song song sẽ không ảnh hưởng nhiều đến việc nếu mọi công việc cần thực hiện bước đó.


1

Tôi sẽ khuyên bạn nên sử dụng plugin nhật thực arduino có tên sloeber sloeber.io mà tôi là người dẫn đầu dự án.
Nó tích hợp với kiểm soát phiên bản và cho phép xây dựng trên nhiều nền tảng vì nó hỗ trợ nhiều cấu hình.
Mặc dù nó chưa phải là bằng chứng ngu ngốc, tôi đã ghi lại và chứng minh bằng cách sử dụng thử nghiệm đơn vị mã arduino trên máy tính cục bộ bằng cách sử dụng khung kiểm tra google.
Đây là một liên kết đến một blog có chứa một bài trình bày về cách bạn có thể làm điều đó. http://blog.baeyens.it/#post25

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.