تحظى منصة Arduino بشعبية كبيرة ، بغض النظر عما إذا كانت موبخة أو مشيدة. تمكن منشئوها من خفض عتبة الدخول إلى مستوى بضع نقرات الماوس + بضعة أسطر من التعليمات البرمجية و voila - هنا لديك مصباح LED وامض. وبشكل عام ، من أجل النماذج الأولية السريعة للحرف اليدوية على AVR ، فإن الشيء Arduino مريح للغاية. الشيء الوحيد الذي فشلوا فيه هو IDE ، والذي يصعب على IDE الاتصال به. من بين وظائف IDE ، فإنه يوفر شيئًا واحدًا فقط - أتمتة إنشاء وتجميع المشروع.
بالنسبة لمستخدمي Windows ، هناك بديل: MS Visual Studio Community +
vMicro plugin الذي يسمح لك بكتابة الرسومات ، ولكن مع جميع الأشياء الجيدة التي يوفرها IDE. يتأرجح المكون الإضافي بدون مشاكل في الاستوديو نفسه من خلال قائمة "الأدوات" ويعمل كما تشاء في الإصدار التجريبي. النسخة المدفوعة من الناحية النظرية تدعم التصحيح خطوة بخطوة ، لكنهم ، بصفتهم مالك النسخة المرخصة من vMicro ، لم يكونوا معجبين للغاية.
بالنسبة لمستخدمي Linux ، كل شيء كما هو الحال دائمًا: نريد IDE جيدًا - حدد "الضحية" وحاول ربط الوظائف اللازمة له. هناك حلول قائمة على
الكسوف ، لكني لا أحب كسوف الشمس ، الذي
كتبته بالفعل عن
مرة واحدة . أطرحه كشر لا مفر منه ، عندما لا يكون هناك شيء مناسب على الإطلاق. من بين جميع IDEs المجانية ، أحترم كثيرًا برنامج
Qt Creator القوي والرائع ، حيث عملت أنا وفريقي منذ أكثر من عام. لذلك ، سأتحدث عن كيفية تحويلها إلى بيئة تطوير لاردوينو.
1. إعداد التربة
يتوفر Qt Creator في مستودعات أي توزيع Linux أكثر أو أقل يحترم نفسه. على سبيل المثال في archa احصل عليه مثل هذا
$ sudo pacman -S qtcreator
بالإضافة إلى ذلك ، سنحتاج إلى حزم بشأن Arduino نفسها.
$ sudo pacman -S arduino arduino-avr-core
في اليوم الذي نسينا فيه Arduino أخيرًا ، سنحتاج إلى مترجم آخر ، ومجمع ، ورابط ومكتبة C قياسية لـ AVR ، لذلك نضعهم
$ sudo pacman -S avr-gcc avr-binutils avr-libc
سنقوم باختبار المصحح والمحاكي في هذه المقالة ، لذلك سنقوم بتثبيت هذه الحزم
$ sudo pacman -S avr-gdb simavr
2. إنشاء مشروع في Qt Creator
قم بتشغيل Qt Creator وإنشاء مشروع جديد بدون Qt في C ++

اختر موقعًا للمشروع وأطلق عليه اسمًا

كنظام بناء ، خذ qmake منتظم

نترك مجموعة العمل بشكل افتراضي ، ونصلحها لاحقًا

تحت التحكم في الإصدار ، أضف المشروع حسب الرغبة

نحصل على مشروع C ++ القياسي

هناك ملفان فقط في المشروع: main.cpp و led-blink.pro. يتم حذف الأول ، ويتم مسح الثاني من كل شيء مكتوب هناك ، والحصول على مشروع فارغ تمامًا

الآن مع الأقلام ، نبدأ في كتابة النص في ملف * .pro ، لتشكيل هيكل المشروع لاردوينو
# # Arduino Core ARDUINO_DIR=/usr/share/arduino/hardware/archlinux-arduino/avr/ # (Arduino Uno, Nano, Mini) ARDUINO_MCU=atmega328p # ARDUINO_FCPU = 16000000L
نستبعد كل ما يتعلق بـ Qt من المشروع ونختار قالب المشروع
# , Qt ! QT -= gui core CONFIG -= qt # - , ELF TEMPLATE = app
قمنا بتعيين الدليل للثنائي المجمع واسمه
DESTDIR = ../bin TARGET = led-blink
بعد ذلك ، قم بتوصيل أدلة بحث الرأس
# INCLUDEPATH += $$ARDUINO_DIR/cores/arduino INCLUDEPATH += $$ARDUINO_DIR/variants/standard INCLUDEPATH += $$ARDUINO_DIR/libraries INCLUDEPATH += /usr/avr/include
حدد المترجم C ومفاتيحه
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
ومترجم C ++ ومفاتيحه
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
تعيين الرابط ومفاتيحه
QMAKE_LINK = /usr/bin/avr-gcc QMAKE_LFLAGS = -w -Os -Wl,--gc-sections -mmcu=$$ARDUINO_MCU QMAKE_LIBS = -lm
نقوم بتهيئة المعالجة اللاحقة لملف ELF ، من أجل لفه في Intel HEX للبرامج الثابتة اللاحقة على اللوحة
QMAKE_POST_LINK += /usr/bin/avr-objcopy -O ihex -j .text -j .data -S ${TARGET} ${TARGET}.hex
حدد ملفات الرأس التي يتم تضمينها في المشروع.
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)
حسنًا ، متى سنبدأ في الرسم؟ لنبدأ الآن ، ولكن ما قمنا به أيها السادة النبلاء ، هو الحد الأدنى الضروري لعمل كود الرسم.
أضف الآن مصدر الرسم التخطيطي إلى المشروع. انقر بزر الماوس الأيمن على المشروع في الشجرة وحدد "إضافة جديد ..." إضافة ملف المصدر C ++

لتنظيم المصادر داخل المشروع ، في النافذة التالية

انقر على "تصفح" وقم بإنشاء مجلد src لملفات * .cpp

الآن قم بتسمية الملف

انقر فوق النافذة التالية "إنهاء". نحصل على مثل هذه الصورة

سيضيف IDE هذا الملف إلى البرنامج النصي لبناء led-blink.pro
HEADERS += $$files($$ARDUINO_DIR/cores/arduino/*.h) HEADERS += $$files($$ARDUINO_DIR/variants/standard/*.h)
ولكن من أجل عدم عمل قوائم مصادر طويلة ، عادة ما أحب ذلك
# 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)
سنفعل الآن ما لن يوفره Arduino IDE مطلقًا: إضافة ملف رأس إلى الرسم التخطيطي ، والقيام بنفس الخطوات المذكورة أعلاه

في هذا الملف ، أضف الرؤوس اللازمة للمشروع.
#ifndef LED_BLINK_H #define LED_BLINK_H #include <Arduino.h> #endif // LED_BLINK_H
تكوين المسارات للرؤوس والمصادر
# INCLUDEPATH += ./include HEADERS += $$files(./include/*.h) files(./src
والآن نكتب رسمًا أخيرًا
#include "led-blink.h"
الآن ننقر بزر الماوس الأيمن على شجرة المشروع ونختار "تجميع"

نذهب إلى مجلد المشروع. لدينا الآن سلة / الدليل ، الذي يحتوي على منتجات عمل المترجم

كل شيء على ما يرام ، هناك ELF ، وهو أمر مفيد عند التصحيح وسداسي البرامج الثابتة في وحدة التحكم. الآن دعنا نكتب وميضًا آخر مع مؤشر LED على دبوس 13
#include "led-blink.h" #define LED_STAND_PIN 13 unsigned long time = 0; unsigned long DELAY = 500000; bool on = false;
نجمع المشروع ، نذهب إلى بن /. نحن نتمسك في لوحة USB الخاصة بك. في حالتي هو Uno ، على نظامي يقوم بإعداد منفذ باسم / dev / ttyACM0 للبرمجة. تنفيذ الأمر
$ avrdude -c arduino -p m328p -P /dev/ttyACM0 -b 115200 -U flash:w:led-blink.hex:i
هنا
- -P / dev / ttyACM0 - منفذ مبرمج
- -p m328p - نموذج تحكم
- -c arduino - نوع المبرمج: مدمج في لوحة Uno
- -ب 115200 - سرعة الميناء
- -U flash: w: led-blink.hex: i - تشير إلى منطقة البرنامج الثابت ونوع العملية (الكتابة) وملف البرنامج الثابت
عادم مشابه لهذا
avrdude: AVR device initialized and ready to accept instructions Reading |
يخبرنا أن العملية سارت على ما يرام. سيومض مصباح LED بتردد 2 هرتز.
من حيث المبدأ ، يمكنك تكوين البرامج الثابتة في IDE. للقيام بذلك ، قم بإعداد إعدادات التشغيل مثل

وباختيار بدء المشروع (بالضغط على Ctrl + R) ، سنقوم بتنفيذ البرنامج الثابت وإطلاقه تمامًا كما يفعل Arduino IDE.
الاستنتاجات
عملية الإعداد الموصوفة هي عملية مستهلكة للوقت. ولكن في المقابل ، نحصل على القوة الكاملة لواحدة من أبرز IDE الموجودة على أنظمة تعتمد على نواة Linux (وينطبق Windows أيضًا). Autodescription ، إعادة البيع ، التنقل المريح في الكود - يمكن الآن استخدام كل هذا بنجاح.
هذا المثال مصنوع ، كما يقولون ، "في الجبين". في الواقع ، يقوم Arduino IDE بتجميع Arduino Core في مكتبة ثابتة منفصلة. روابط وروابط إلى الملف القابل للتنفيذ. ونتيجة لذلك ، يكون حجم البرامج الثابتة التي تم جمعها في البيئة القياسية أصغر من الطريقة الموضحة في المقالة. لا يزال يتعين علي معرفة هذه الفروق الدقيقة. وفي نفس الوقت في المقالة التالية حول هذا الموضوع سنتحدث عن:
- هيكل المشروع ، اكتشف أين توجد الوظيفة الرئيسية () وأظهر لماذا التكرار المفرط على Arduino سيئًا
- التصحيح خطوة بخطوة باستخدام المحاكيات
- سنتعامل مع خيارات المترجم المستخدمة في التجميع
بشكل عام ، سنحاول توضيح العديد من القضايا المفيدة لفهم العمليات الجارية ، والتي بدونها سيكون من الصعب في المستقبل التحول من Arduino إلى شيء أكثر تقدمًا.