تصحيح رمز Arduino (AVR). الجزء 1. التصحيح الظاهري

مقدمة


, Arduino (AVR) , . , . , ( ) , , .
, , , Arduino (AVR).

Makefile


قبل أن نصل إلى وصف التصحيح في الأجهزة (في الجزء الثاني) ، نحتاج إلى إجراء بعض التدريب. ربما يعرف الكثير من الناس أن بيئة Arduino تستدعي مترجم avr-gcc مع البيئة بأكملها ، ويقوم تلقائيًا بتكوين المعلمات الخاصة بالاتصال بها ويبدأ عملية البناء. لذا ، نحتاج إلى تكرار هذه العملية بشكل صريح. لن نقوم بذلك يدويًا ، على الرغم من أنه ستظل هناك حاجة لبعض الإيماءات. يعد ذلك ضروريًا للحصول على ملف كائن التصحيح بتنسيق ELF. تنظف بيئة Arduino بعدها ولا نملك إمكانية الوصول إلى خيارات المترجم أو نتائج التجميع.

ينقلنا هذا إلى مسألة استخدام الأدوات المساعدة لإنشاء مشروع avr-gcc تلقائيًا ، أو بالأحرى ، رسم تخطيطي مع مكتبات Arduino. هنا سيكون من المحزن ، لأنه هذه ليست مسألة بسيطة ، ولكن كما يقولون ، تم فعل كل شيء قبلنا. اتضح أن github لديه بالفعل كل ما تحتاجه لتجميع الرسومات مع مكتبات Arduino. يدعى المشروع اردوينو ماكيفيل . نظرًا لأنه ليس من الصعب التكهن بالوصف ، يحتوي هذا المشروع على ملف Makefile لبناء المشاريع تلقائيًا على Arduino. من بين الميزات المدرجة في الوصف ، سننتبه فقط لعدد قليل.

حزمة Arduino-Makefile عبارة عن مجموعة من ملفات التكوين والأمثلة والأوصاف. لا توجد مرافق يجب أن تستخدم كل هذا. لا توجد أيضًا بيئة تطوير ، أي يتم التجميع من خلال سطر الأوامر. هذا يعني أنه يمكنك ربط أي IDE مناسب لك ، والذي يدعم التجميع من خلال Makefile. عادة ما أستخدم Visual Studio.

إذا نظرت إلى المحتويات بعناية ، ستلاحظ وجود ملف عالمي عالمي واحد من ملفات Makefile (Arduino.mk) ، والذي تم تضمينه في ملفات تجميع محلية محددة. تحتاج إلى تحديد الإعدادات الخاصة (الحد الأدنى) فقط لغرض معين من التجميع ، وسيتم تنفيذ الباقي في الوضع التلقائي (تعيين المتغيرات ، والبحث عن التبعيات ، وما إلى ذلك). هذا مريح للغاية ، كما هو موضح أدناه.

, (*.ino, *.pde, *.c *.cpp). , AVR Studio 4. : cpp- sources, headers. (ino), sources . . , AVR Studio (.c .cpp).


اكتشفنا أنه يمكننا جمع الرسومات. الآن دعونا نرى كيف سيتم تنظيم عملية التجميع والتصحيح. لقد وعدت بإظهار طريقتين. لكل منهم إيجابياته وسلبياته. لنراجعها بإيجاز.

طريقة 1 . قم بإنشاء ملف تصحيح ، قم بتحميله إلى Proteus ، قم بتصحيحه. المزايا: - سهولة التصحيح نسبيًا (مع اتصال جهاز مراقبة المنفذ التسلسلي ، ما عليك سوى أن تعذب نفسك) ؛ - الوصول إلى العالم الخارجي من خلال منفذ تسلسلي ؛ - بناء الرسوم البيانية (تتوفر أدوات قياس افتراضية) ؛ - القدرة على محاكاة الدائرة في الوقت الحقيقي ؛








- في نوافذ منفصلة ، تسجل mk ، مناطق الذاكرة ، المتغيرات العالمية وشفرة المصدر متاحة ، بالطبع ، بما في ذلك إصدار المجمع.

العيوب:
- Proteus المدفوعة ؛
- مجموعة محدودة من الأجهزة الطرفية ؛
- لا يمكن أن تأخذ النماذج المعقدة في الاعتبار جميع ميزات المكونات الأصلية.

طريقة 2 . نقوم بإنشاء ملف تصحيح ، وتحميله في AVR Studio 4 ، وتصحيحه باستخدام المكون الإضافي Proteus VSM Viewer الخاص بـ AVR Studio 4.



, 1. , AVR Studio , , . , .

3. , AVR Studio 4, , JTAG ICE mkII (HappyJTAG2).

 

:
— «» JTAG ICE mkII ( ATmega2560);
— HappyJTAG 2.45 Windows 7 x64, , - .

:
— HappyJTAG2 ;
— AVR Studio ;
— HappyJTAG2 ( AVR Studio 5 Atmel Studio);
— (COM4 4- , .. AVR Studio COM1-COM4 ). , .. HappyJTAG2 , , «».

كما ترون ، لقد عرضت ثلاث طرق ، ولكن في الوقت الحاضر ، أكسبني اثنان منهم عمليًا. سيتم وصف الطريقة الأولى في هذه المقالة. لسوء الحظ ، لم أستطع تكرار الطريقة الثانية. تحتاج إلى العثور على مجموعة "متوافقة" من Proteus و AVR Studio. في الصورة تستخدم أحدث استوديو AVR Studio 4.19.730 و Proteus 7.7 SP2. ذات مرة استخدمت هذه الطريقة ، ولكن في وجود مصحح للحديد ، فإن استخدامها لا معنى له. تركت الطريقة الثالثة للجزء الثاني. هناك ستحتاج إلى محول ووصف لاتصاله بألواح Arduino التي تدعم تصحيح JTAG.

وماذا نحتاج لهذا المطبخ كله؟ تحتاج أولاً إلى نسيان Arduino IDE البائس ، ولا يمكن استخدامه إلا لفحوصات التحكم عند تجميع الرسومات. بعد ذلك سنحتاج إلى:

-Arduino-Makefile - مجموعة من ملفات التهيئة للتجميع اليدوي للمشاريع على Arduino ؛
- بعض المحرر مع تمييز بناء الجملة C ++ والقدرة على تنفيذ الأوامر الخارجية ( Notepad ++ ، VS20xx ، Far ، ...) ؛
- Proteus 7.x - جهاز محاكاة معروف للدوائر المختلطة (الرقمية التناظرية) ؛
- البرنامج الطرفي ( PuTTY ، ZOC Pro) ، والذي سيكون تناظرياً للشاشة ؛
- برنامج ينشئ منافذ تسلسلية افتراضية بدون مودم (VSPD، ...) ؛
- Arduino IDE 1.6.x (نحتاج إلى مكتبات ومترجم avr-gcc) ؛
- WinAVR (نحتاج إلى binutils من مجموعته ، هذه مجموعة من أوامر unix لـ Windows) ؛
- avr gcc 4.9.2(المحول البرمجي أعذب إذا كنت لا تريد استخدام الذي يأتي مع Arduino IDE) ؛
- AVR Studio 4.19.730 - أحدث إصدار من بيئة التطوير من Atmel قبل التحول إلى Visual Studio (مطلوب فقط للجزء الثاني) ؛
- HappyJTAG 2.45 (مطلوب فقط للجزء الثاني).

سنفترض أنك تعرف كيف تسأل Google عن مكان الحصول على هذه المزرعة بأكملها. تحسبًا فقط ، سأقدم روابط مفيدة في نهاية المقالة. بعض التعليقات على مجموعة الأدوات.

كما تعلم ، يتم دفع Proteus ، لكن هذا ليس الشيء الأكثر حزنًا. لسوء الحظ ، فإن مكتباته ليست قريبة من العالم الحقيقي كما نود. على سبيل المثال ، لا يمكنك تصميم درع Ethernet W5100 فيه (على الأقل في الإصدار 7.x). لذلك ، أتباع اردوينو الأعزاء ، اتبع الطريق الصحيح. تصحيح الأخطاء فقط وفي الأجهزة فقط سيخلصك من الأسئلة المطروحة بشكل غير صحيح. سنستخدم Proteus كأداة تدريب ، وفي الميدان - JTAG فقط.

تصحيح اردوينو اسكتشات (AVR) في Proteus 7.x


يكفي الكلمات الشائعة ، الآن تفاصيل. هناك العديد من الخيارات لبدء عملية التجميع ، لا يمكنك كتابتها جميعًا ، لذلك سأركز على واحد فقط وأحاول وصفه بوضوح. رؤية المخطط العام ، يمكنك تطبيقه على مجموعة أدوات التطوير الخاصة بك. للراحة ، سأقوم بتفصيل وصف العملية بأكملها في خطوات ، يمكن تخطي بعضها. آمل أن يفهم حتى أكثر مستخدمي Arduino عديمي الخبرة ما هو هذا الأمر.

الخطوة 1 . تنزيل Arduino. , 1.6.x. . , Arduino . , ( C# C++ , , C++/CLI, ). , , . , , Arduino , Serial.print() . .

, , , . , Arduino (C:\Arduino). makefile, «Program Files». , «Program Files» Windows — junction point . , , .

, , : C:\Program Files\Arduino.

2. وتفريغ Arduino-Makefile. قم بفك محتويات المجلد Arduino-Makefile-master في C: \ Arduino-Makefile. أود أن أشير على الفور إلى أنه يوجد في الداخل ملف README.md ، وهو أفضل للنظر إلى جيثب ، حيث يتم وصف الكثير من الأشياء. يجب عليك أيضًا ملاحظة ملف arduino-mk-vars.md ، الذي يحتوي على وصف للمتغيرات المستخدمة في ملف Makefile الخاص بالمستخدم (المشروع).

لكي تعمل الأداة المساعدة ، تحتاج إلى مجموعة أدوات gnu bin ، التي كانت جزءًا من WinAVR . Windows, . WinAVR utils, . , WinAVR ( avr-gcc, ).

, , c:\avr-gcc utils . PATH ( ) C:\avr-gcc\utils\bin:

set PATH=C:\avr-gcc\utils\bin;%PATH%

. , .. , .

3. أنت تعرف بنفسك من أين تحصل على / تشتري Proteus [7.2 - 7.8]. لماذا بالضبط هذه السلسلة ومثل هذه الفترة من الإصدارات؟ لأنني جربتها وعلى ما يبدو في مشاريع بسيطة ، فهي جيدة جدًا. لا يمكن للإصدارات أعلاه 7.8 تحميل ملف الكائن لأحد مشروعي في IAR ، ولم أحاول أدناه. الثمانية هي عربات التي تجرها الدواب فقط في الوقت الحالي ، ربما بعد ذلك سيكتب شخص ما شيئًا عنها. سنأخذ هنا Proteus 7.8 SP2 على وجه التحديد.

الخطوة 4 . باستخدام المقالة ، قم بإنشاء نقطة اتصال على المجلد مع بيئة Arduino المثبتة ، أي يجب أن يشير C: \ Arduino إلى C: \ Program Files \ Arduino. هذا ضروري حتى لا تكون أكثر حكمة بدعم المساحات في makefiles. وبالتالي ، دون نسخ المجلد باستخدام Arduino ، حصلنا على نسخة منه في المكان الصحيح. يمكن لمن يستخدم Far استخدام تركيبة Alt + F6 في المجلد.

Arduino. : C:\Arduino-Makefile\examples. (Notepd++, ...), . Arduino . Arduino Mega 2560 ATmega2560 ( , ).

Arduino, Example1 :

void setup()
{
DDRD |= ( 1 << DDD2 );
}

void loop()
{
PIND |= ( 1 << PIND2 );
}

, . Arduino 1.6.7 (ld.exe) , (, , ).

5. C:\Arduino-Makefile\examples\WebServer\Makefile : C:\Arduino-Makefile\examples\Example1. :

Makefile
# Arduino Make file. Refer to https://github.com/sudar/Arduino-Makefile

# Suppress printing of Arduino-Makefile configuration.
#ARDUINO_QUIET = 1

# Directory where the Arduino IDE and/or core files are stored. Usually can be auto-detected as `AUTO_ARDUINO_DIR`.
ARDUINO_DIR = ../../../Arduino

# Directory where tools such as `avrdude`, `avr-g++`, `avr-gcc`, etc. are stored in the `bin/` subdirectory.
AVR_TOOLS_DIR = ../../../Arduino/hardware/tools/avr

# Directory where the `*.mk` files are stored.
# Usually can be auto-detected as parent of `Arduino.mk`.
ARDMK_DIR = ../../../Arduino-Makefile

# Device type as listed in `boards.txt` or `make show_boards`.
BOARD_TAG = mega

# Microcontroller model.
# Usually can be auto-detected as `build.mcu` from `boards.txt`
MCU = atmega2560

#CPU speed in Hz
#Usually can be auto-detected as `build.f_cpu` from `boards.txt`, except in
#some 1.5+ cores like attiny where there is a clock submenu.
#F_CPU = 16000000L

# What name you would like for generated target files.
# Defaults to the name of your current working directory, but with underscores (_) instead of spaces.
#TARGET = project

# Baudrate of the serial monitor.
# Defaults to `9600` if it can't find it in the sketch `Serial.begin()`
MONITOR_BAUDRATE = 9600

DEBUG = 1

DEBUG_FLAGS = -O1 -gdwarf-2 -gstrict-dwarf

include ../../Arduino.mk

, Arduino.h ( , , ARDUINO_LIBS):

#include "Arduino.h"

void setup()
{
DDRD |= ( 1 << DDD2 );
}

void loop()
{
PIND |= ( 1 << PIND2 );
}

Makefile. , Example1, make ( Far', ), , , Arduino IDE . , - , , .

Makefile ARDUINO_QUIET = 1, Makefile. , . Makefile .

-------------------------
Arduino.mk Configuration:
- [AUTODETECTED] CURRENT_OS = WINDOWS
- [USER] ARDUINO_DIR = ../../../Arduino
Usage: egrep [OPTION]... PATTERN [FILE]...
Try `egrep --help' for more information.
- [USER] ARDMK_DIR = ../../../Arduino-Makefile
- [AUTODETECTED] ARDUINO_VERSION = 167
- [DEFAULT] ARCHITECTURE = avr
- [DEFAULT] ARDMK_VENDOR = arduino
- [DEFAULT] ARDUINO_SKETCHBOOK =
- [USER] AVR_TOOLS_DIR = ../../../Arduino/hardware/tools/avr
- [COMPUTED] ARDUINO_LIB_PATH = ../../../Arduino/libraries (from ARDUINO_DIR)
- [COMPUTED] ARDUINO_PLATFORM_LIB_PATH = ../../../Arduino/hardware/arduino/avr/libraries (from ARDUINO_DIR)
- [COMPUTED] ARDUINO_VAR_PATH = ../../../Arduino/hardware/arduino/avr/variants (from ARDUINO_DIR)
- [COMPUTED] BOARDS_TXT = ../../../Arduino/hardware/arduino/avr/boards.txt (from ARDUINO_DIR)
- [DEFAULT] USER_LIB_PATH = /libraries (in user sketchbook)
- [DEFAULT] PRE_BUILD_HOOK = pre-build-hook.sh
- [USER] BOARD_TAG = mega
- [COMPUTED] CORE = arduino (from build.core)
- [COMPUTED] VARIANT = mega (from build.variant)
- [COMPUTED] OBJDIR = build-mega (from BOARD_TAG)
- [COMPUTED] ARDUINO_CORE_PATH = ../../../Arduino/hardware/arduino/avr/cores/arduino (from ARDUINO_DIR, BOARD_TAG and boards.txt)
- [USER] MONITOR_BAUDRATE = 9600
- [DEFAULT] OPTIMIZATION_LEVEL = s
- [DEFAULT] MCU_FLAG_NAME = mmcu
- [DEFAULT] CFLAGS_STD =
- [DEFAULT] CXXFLAGS_STD =
- [AUTODETECTED] DEVICE_PATH =
- [DEFAULT] FORCE_MONITOR_PORT =
- [AUTODETECTED] Size utility: AVR-aware for enhanced output
- [COMPUTED] BOOTLOADER_PARENT = ../../../Arduino/hardware/arduino/avr/bootloaders (from ARDUINO_DIR)
- [COMPUTED] ARDMK_VERSION = 1.5
- [COMPUTED] CC_VERSION = 4.8.1 (avr-gcc)
-------------------------
mkdir -p build-mega


, , build-mega, Example1.elf — , . « » Proteus … .

6. Proteus. (dsn-) . — ATmega2560 , . . COMPIM , .



Debug\Start/Restart Debugging. , .



, , . Example1.ino, . , , - . Proteus.

7. . , . , , . , - ( COM4). COMPIM Proteus, (PuTTY). , , -.

8. avr gcc 4.9.2, AVR_TOOLS_DIR. avr-size, . , WinAVR ( Arduino).

, avr-size ( Arduino.mk):

avr_size = $(SIZE) $(SIZEFLAGS) --format=avr $(1)


:

1. Arduino IDE 1.6.x.
2. Arduino-Makefile.
3. WinAVR.
4. avr gcc 4.9.2.
5. Hard links . Windows.
6. PuTTY.
7. Notepad++.

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


All Articles