Platform Arduino populer, terlepas dari apakah itu dimarahi atau dipuji. Pembuatnya berhasil menurunkan ambang masuk ke tingkat beberapa klik mouse + beberapa baris kode dan voila - di sini Anda memiliki LED yang berkedip. Dan secara umum, untuk pembuatan prototipe cepat pada AVR, hal Arduino sangat nyaman. Satu-satunya hal yang gagal adalah IDE, yang sulit dipanggil oleh IDE. Di antara fungsi-fungsi IDE, itu hanya menyediakan satu hal - otomatisasi penciptaan dan perakitan proyek.
Untuk pengguna Windows, ada alternatif: Plugin MS Visual Studio Community +
vMicro yang memungkinkan Anda menulis sketsa, tetapi dengan semua barang yang disediakan oleh IDE. Ayunan plug-in tanpa masalah di studio itu sendiri melalui menu "Tools" dan berfungsi sebanyak yang Anda suka dalam percobaan. Versi berbayar dalam teori mendukung debugging langkah-demi-langkah, tetapi mereka, sebagai pemilik salinan lisensi vMicro, tidak terlalu terkesan.
Untuk pengguna Linux, semuanya seperti biasa: kami ingin IDE yang bagus - pilih "korban" dan coba kencangkan fungsi yang diperlukan untuk itu. Ada solusi berdasarkan
Eclipse , tapi saya tidak suka eclipse, yang
sudah saya
tulis sekali . Saya tahan dengan dia sebagai kejahatan yang tak terhindarkan, ketika tidak ada yang cocok di tangan. Dari semua IDE gratis, saya paling menghormati
Qt Creator yang kuat dan luar biasa, di mana saya dan tim saya telah bekerja selama lebih dari setahun. Oleh karena itu, saya akan berbicara tentang cara mengubahnya menjadi lingkungan pengembangan untuk Arduino.
1. Persiapan tanah
Qt Creator tersedia dalam repositori dari distribusi Linux yang kurang lebih menghargai diri sendiri. Misalnya di archa dapatkan seperti ini
$ sudo pacman -S qtcreator
Selain itu, kita akan membutuhkan paket mengenai Arduino itu sendiri.
$ sudo pacman -S arduino arduino-avr-core
Pada hari ketika kita akhirnya melupakan Arduino, kita membutuhkan kompiler, assembler, linker, dan pustaka C standar untuk AVR, jadi kita menempatkan mereka
$ sudo pacman -S avr-gcc avr-binutils avr-libc
Kami akan menguji debugger dan emulator di artikel ini, jadi kami akan menginstal paket tersebut
$ sudo pacman -S avr-gdb simavr
2. Buat proyek di Qt Creator
Jalankan Qt Creator dan buat proyek baru tanpa Qt di C ++

Pilih lokasi untuk proyek dan berikan nama

Sebagai sistem build, ambil qmake biasa

Kami meninggalkan set kerja secara default, memperbaikinya nanti

Di bawah kontrol versi, tambahkan proyek yang diinginkan

Kami mendapatkan proyek C ++ standar

Hanya ada dua file dalam proyek: main.cpp dan led-blink.pro. Yang pertama dihapus, yang kedua dihapus dari semua yang tertulis di sana, mendapatkan proyek yang benar-benar kosong

Sekarang dengan pena, kita mulai menulis teks dalam file * .pro, membentuk struktur proyek untuk Arduino
# # Arduino Core ARDUINO_DIR=/usr/share/arduino/hardware/archlinux-arduino/avr/ # (Arduino Uno, Nano, Mini) ARDUINO_MCU=atmega328p # ARDUINO_FCPU = 16000000L
Kami mengecualikan semua yang terkait dengan Qt dari proyek dan memilih templat proyek
# , Qt ! QT -= gui core CONFIG -= qt # - , ELF TEMPLATE = app
Kami mengatur direktori untuk biner yang dirakit dan namanya
DESTDIR = ../bin TARGET = led-blink
Selanjutnya, hubungkan direktori pencarian header
# INCLUDEPATH += $$ARDUINO_DIR/cores/arduino INCLUDEPATH += $$ARDUINO_DIR/variants/standard INCLUDEPATH += $$ARDUINO_DIR/libraries INCLUDEPATH += /usr/avr/include
Tentukan kompiler C dan kunci-kuncinya
QMAKE_CC = /usr/bin/avr-gcc QMAKE_CFLAGS += -c -g -Os -w -ffunction-sections -fdata-sections QMAKE_CFLAGS += -MMD -mmcu=$$ARDUINO_MCU -DF_CPU=$$ARDUINO_FCPU QMAKE_CFLAGS += -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR
dan kompiler C ++ dan kunci-kuncinya
QMAKE_CXX = /usr/bin/avr-g++ QMAKE_CXXFLAGS += -c -g -Os -w -ffunction-sections -fdata-sections QMAKE_CXXFLAGS += -fno-exceptions -fno-threadsafe-statics QMAKE_CXXFLAGS += -MMD -mmcu=$$ARDUINO_MCU -DF_CPU=$$ARDUINO_FCPU QMAKE_CXXFLAGS += -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR
atur tautan dan kuncinya
QMAKE_LINK = /usr/bin/avr-gcc QMAKE_LFLAGS = -w -Os -Wl,--gc-sections -mmcu=$$ARDUINO_MCU QMAKE_LIBS = -lm
Kami mengkonfigurasi post-processing file ELF, untuk mengubahnya menjadi Intel HEX untuk firmware berikutnya di papan tulis
QMAKE_POST_LINK += /usr/bin/avr-objcopy -O ihex -j .text -j .data -S ${TARGET} ${TARGET}.hex
Tentukan file header mana yang termasuk dalam proyek.
HEADERS += $$files($$ARDUINO_DIR/cores/arduino/*.h) HEADERS += $$files($$ARDUINO_DIR/variants/standard/*.h)
Tentukan file sumber Arduino Core
SOURCES += $$files($$ARDUINO_DIR/cores/arduino/*.c) SOURCES += $$files($$ARDUINO_DIR/cores/arduino/*.cpp)
Jadi, yah, kapan kita akan mulai membuat sketsa? Mari kita mulai sekarang, tetapi apa yang telah kita lakukan, para bangsawan, adalah minimum yang diperlukan agar kode sketsa berfungsi.
Sekarang tambahkan sumber sketsa ke proyek. Klik kanan pada proyek di pohon dan pilih "Tambah Baru ..." Tambahkan file sumber C ++

Untuk mengatur sumber di dalam proyek, di jendela berikutnya

klik "Browse" dan buat folder src untuk file * .cpp

Sekarang beri nama file

Klik pada jendela berikutnya "Selesai". Kami mendapatkan gambar seperti itu

IDE akan menambahkan file ini ke skrip build led-blink.pro
HEADERS += $$files($$ARDUINO_DIR/cores/arduino/*.h) HEADERS += $$files($$ARDUINO_DIR/variants/standard/*.h)
tetapi agar tidak membuat daftar sumber yang panjang, saya biasanya suka ini
# Arduino Core HEADERS += $$files($$ARDUINO_DIR/cores/arduino/*.h) HEADERS += $$files($$ARDUINO_DIR/variants/standard/*.h) # Arduino Core SOURCES += $$files($$ARDUINO_DIR/cores/arduino/*.c) SOURCES += $$files($$ARDUINO_DIR/cores/arduino/*.cpp) # SOURCES += $$files(./src/*.cpp)
Sekarang kita akan melakukan apa yang tidak akan disediakan oleh IDE Arduino: tambahkan file header ke sketsa, lakukan langkah yang sama seperti di atas

Dalam file ini, tambahkan header proyek yang diperlukan
#ifndef LED_BLINK_H #define LED_BLINK_H #include <Arduino.h> #endif // LED_BLINK_H
konfigurasikan jalur ke header dan sumber
# INCLUDEPATH += ./include HEADERS += $$files(./include/*.h) files(./src
dan sekarang akhirnya menulis sketsa
#include "led-blink.h"
Sekarang kita klik kanan pada pohon proyek dan pilih "Assemble"

Kami pergi ke folder proyek. Kami sekarang memiliki direktori bin /, yang berisi produk kerja kompiler

Semuanya OK, ada ELF, yang berguna saat debugging dan hex untuk firmware di controller. Sekarang mari kita menulis tanda bahayanya lain dengan LED pada pin 13
#include "led-blink.h" #define LED_STAND_PIN 13 unsigned long time = 0; unsigned long DELAY = 500000; bool on = false;
Kami mengumpulkan proyek, pergi ke bin /. Kami menempel di papan usb Anda. Dalam kasus saya ini adalah Uno, pada sistem saya mengatur port dengan nama / dev / ttyACM0 untuk pemrograman. Jalankan perintah
$ avrdude -c arduino -p m328p -P /dev/ttyACM0 -b 115200 -U flash:w:led-blink.hex:i
Di sini
- -P / dev / ttyACM0 - port programmer
- -p m328p - model pengontrol
- -c arduino - jenis programmer: bawaan untuk papan Uno
- -b 115200 - kecepatan port
- -U flash: w: led-blink.hex: i - menunjukkan area firmware, jenis operasi (tulis) dan file firmware
Knalpot mirip dengan ini
avrdude: AVR device initialized and ready to accept instructions Reading |
memberitahu kita bahwa prosesnya berjalan dengan baik. LED akan berkedip pada frekuensi 2 Hz.
Pada prinsipnya, Anda dapat mengkonfigurasi firmware di IDE. Untuk melakukan ini, buat pengaturan peluncuran seperti itu

dan dengan memilih untuk memulai proyek (dengan menekan Ctrl + R) kami akan menjalankan firmware dan meluncurkan persis seperti yang dilakukan oleh Arduino IDE.
Kesimpulan
Proses pengaturan yang dijelaskan adalah prosedur yang agak memakan waktu. Namun sebagai imbalannya, kami mendapatkan kekuatan penuh dari salah satu IDE paling luar biasa yang ada pada sistem berbasis pada kernel Linux (dan Windows juga berlaku). Autodescription, refactoring, navigasi kode yang mudah - semua ini sekarang dapat berhasil digunakan.
Contoh ini dibuat, seperti yang mereka katakan, "di dahi." Faktanya, Arduino IDE mengkompilasi Arduino Core menjadi perpustakaan static core.a yang terpisah dan tautan ke executable. Akibatnya, firmware yang dikumpulkan di lingkungan standar berukuran lebih kecil daripada dalam metode yang dijelaskan dalam artikel. Saya masih harus mencari tahu nuansa ini. Dan pada saat yang sama dalam artikel berikut tentang hal ini kita akan berbicara tentang:
- struktur proyek, cari tahu di mana fungsi main () berada dan tunjukkan mengapa perulangan yang berlebihan pada Arduino buruk
- langkah demi langkah debugging menggunakan emulator
- kita akan berurusan dengan opsi kompiler yang digunakan dalam perakitan
Secara umum, kami akan mencoba mengklarifikasi banyak masalah yang berguna untuk memahami proses yang sedang berlangsung, yang tanpanya di masa depan akan sulit untuk beralih dari Arduino ke sesuatu yang lebih maju.