Arduino di Linux: Mengkonfigurasi Pencipta Qt sebagai Lingkungan Pengembangan

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) #  Arduino Core SOURCES += $$files($$ARDUINO_DIR/cores/arduino/*.c) \ src/led-blink.cpp SOURCES += $$files($$ARDUINO_DIR/cores/arduino/*.cpp) 

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) #   SOURCES += $$files(./src/*.cpp) 

dan sekarang akhirnya menulis sketsa

 #include "led-blink.h" //------------------------------------------------------------------------------ // //------------------------------------------------------------------------------ void setup() { } //------------------------------------------------------------------------------ // //------------------------------------------------------------------------------ void loop() { } 

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; //------------------------------------------------------------------------------ // //------------------------------------------------------------------------------ void setup() { pinMode(LED_STAND_PIN, OUTPUT); } //------------------------------------------------------------------------------ // //------------------------------------------------------------------------------ void loop() { if ( micros() >= time + DELAY ) { time = micros(); on = !on; } uint8_t state = on ? HIGH : LOW; digitalWrite(LED_STAND_PIN, state); } 

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 | ################################################## | 100% 0.00s avrdude: Device signature = 0x1e950f (probably m328p) avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed To disable this feature, specify the -D option. avrdude: erasing chip avrdude: reading input file "led-blink.hex" avrdude: writing flash (2838 bytes): Writing | ################################################## | 100% 0.47s avrdude: 2838 bytes of flash written avrdude: verifying flash memory against led-blink.hex: avrdude: load data flash data from input file led-blink.hex: avrdude: input file led-blink.hex contains 2838 bytes avrdude: reading on-chip flash data: Reading | ################################################## | 100% 0.38s avrdude: verifying ... avrdude: 2838 bytes of flash verified avrdude: safemode: Fuses OK (E:00, H:00, L:00) avrdude done. Thank you. 

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.

Source: https://habr.com/ru/post/id408261/


All Articles