8-900-374-94-44
[email protected]
Slide Image
Меню

Портирование arduino ide в coocox – почему не компилируются скетчи (и как этого избежать) / Habr

Содержание

почему не компилируются скетчи (и как этого избежать) / Habr

Поскольку я интенсивно занимаюсь разработкой в Arduino IDE, то этот вопрос меня неподдельно волновал. Почему скетч, написанный в одной версии среды разработки отказывается компилироваться в соседних версиях? Этим же вопросом меня заваливали пользователи системы Arduino Mega Server. Почему АМС компилируется в 1.6.5 и отказывается компилироваться в 1.6.4, 1.6.7 и 1.6.8?

И вот недавно, в процессе портирования Arduino Mega Server на новый контроллер Genuino 101, мне удалось разгадать эту великую загадку. И в этой статье я поделюсь с вами этим сакральным знанием и ваши скетчи после этого всегда будут успешно компилироваться. Итак…

Логика вещей


По логике вещей, код, который успешно компилируется в какой-либо версии среды разработки, например, 1.6.5, обязан компилироваться в соседних версиях IDE, ведь эти версии отличаются только в третьем знаке и представляют собой почти одно и то же, с небольшими модификациями. Но этого не происходит. Почему?

Внутренняя кухня


Чтобы это понять, нужно разобраться с тем, как формируются версии сред разработки Arduino IDE и как пользователи работают с этими средами разработки.

Начнём с пользователей. Большинство из них компилирует примитивные проекты, образно говоря, в 20 строк и с этими проектами никаких проблем не возникает. Эти проекты успешно компилируются в любой версии IDE потому, что используют только стандартные вызовы библиотечных функций и никак не модифицируют сами библиотеки.

Но сколько-нибудь развитый проект на Ардуино уже не умещается в «20 строк» и неизбежно пользуется менее распространёнными функциями из библиотек (которые более подвержены модификациям из версии в версию) и неизбежно приходят к необходимости модификации самих библиотек под свои специфические нужды проекта.

А один раз модифицировав системную библиотеку, вы становитесь её заложником и вынуждены «тащить» её за собой из версии в версию.

Теперь давайте разберёмся с тем, как формируются версии Arduino IDE. А формируются они по произволу (я подозреваю, что в конечном счёте, одного конкретного программиста, какого-нибудь Марио) выпускающей команды. И то, какая версия конкретной библиотеки будет включена в дистрибутив и в каком виде (с какими модификациями), остаётся на совести этого «Марио».

А теперь внимание, это очень важно! Выпускающая команда преследует только одну цель — чтобы дистрибутив одной версии был взаимно согласован и непротиворечив внутри себя. Их задача добиться того, чтобы все стандартные примеры работали корректно. И это всё! Задача совместимости между версиями вообще не ставится.

И поскольку 99% процентов пользователей компилирует проекты в «20 строк» этот подход прекрасно «прокатывает» на практике. А то, что сколько-нибудь серьёзные проекты не компилируются, это проблемы этих проектов. Слава Богу, теперь понятен механизм возникновения проблемы и теперь стало понятно, как с этим бороться.

Конкретный пример


Вспомним портирование АМС на Genuino 101 (работает начиная с версии 1.6.7 и выше). Тут команда Ардуино припасла для нас очередной прикол (молодцы ребята, не дают нам расслабляться).

Попытка откомпилировать проект для нового контроллера приводила к появлению множества ошибок компилятора. Анализ сообщений показал, что компилятору категорически не нравится наша Ethernet библиотека. Чем же она так не угодила компилятору?

Начинаем разбираться.

Наша библиотека: version=1.0.4 (не нравится компилятору)
Библиотека из IDE 1.6.7: version=1.0.4 (нравится компилятору)

Однако.

Наша библиотека: 31 файл (не нравится компилятору)
Библиотека из IDE 1.6.7:

31 файл (нравится компилятору)

Однако.

Наша библиотека: 123 КБ (не нравится компилятору)
Библиотека из IDE 1.6.7: 123 КБ (нравится компилятору)

Однако.

Другими словами, Марио «засунул» в IDE 1.6.7 Ethernet библиотеку с одним и тем же номером версии, что и в IDE 1.6.5, одним и тем же количеством файлов и с одним и тем же размером, но с РАЗНЫМ СОДЕРЖИМЫМ и забыл нас об этом предупредить. А это самое «разное содержимое» как паук держится своими лапками за IDE и другие библиотеки более низкого уровня (тоже модифицированные в 1.6.7).

Браво, Марио! С таким подходом ничего не будет компилироваться, кроме стандартных примеров и скетчей в 20 строк.

Практическое решение (головоломок от Ардуино)


Теперь стал кристально ясен механизм того, почему не компилируются проекты в разных версиях Arduino IDE и, соответственно, так же кристально стал ясен путь решения этой проблемы. В данном конкретном случае решение состоит из трёх частей.
  • Часть первая. Нахождение работающей библиотеки. Помните, задача у выпускающей команды создать непротиворечивую версию IDE? Значит где-то должна быть работающая версия нужной нам библиотеки.
  • Часть вторая. Перенесение работающей Ethernet библиотеки от шалуна Марио на её место в проекте Arduino Mega Server. Здесь нет ничего сложного — просто копируем её на место нашей неработающей в IDE 1.6.7 Ethernet библиотеки.
  • Часть третья. Модификация под проект Arduino Mega Server перенесённой и заведомо работающей в IDE 1.6.7 Ethernet библиотеки.

То же самое нужно проделать со всеми некомпилирующимися библиотеками проекта (то есть найти работающую версию библиотеки из IDE и перенести её на её место в проекте и модифицировать, если это необходимо). Но в данном случае нам повезло, все остальные библиотеки заработали нормально (потому, что Марио не успел их по-тихому модифицировать, хотя мог и обязательно сделает это в новых версиях IDE, но мы уже знаем как с этим бороться).

Заключение


Вот и весь секрет успешной работы в Arduino IDE со сложными проектами. Теперь вы можете чувствовать себя во всеоружии и для вас не составит труда заставить работать ваш проект в любой версии Arduino IDE.

habr.com

Добавляем поддержку не родных м/к в среду Arduino IDE

Добавляем поддержку не родных м/к в среду Arduino IDE

Иногда можно использовать в своих проектах умного дома более простые или слабые микроконтроллеры,где ресурсов может быть достаточно для простых операций -Такие микроконтроллеры дешевле.Кроме программирования таких микроконтроллеров в более сложной среде разработки в WinAVR или CodeVisionAVR можно использовать среду Arduino IDE,добавив их поддержку.Иногда могут пригодится микроконтроллеры с бОльшим количеством портов,например Atmega16 и Atmega32 — их так же можно программировать в Arduino.

 

Обратите внимание,что обычно микроконтроллер с завода настроен на внутренний генератор и чаще всего прошивка загрузчика переключает микроконтроллер на внеший кварц — так что Вы должны позабодиться о подключении кварца к выводам микроконтроллера(выводы XTAL) по стандартной схеме.Исключение — серия attiny и некоторые другие м/к..

Серия микроконтроллеров ATtiny

Поддерживаемые микроконтроллеры:

 attiny13,attiny2313, attiny45, attiny44,attiny85, attiny84, attiny25, attiny24, attiny4313

Цоколевка микроконтроллеров

Для программирования ATtiny 13/25/45/85 подключим его к нашему программатору согласно даташиту:

 

Примечание: У ATtiny13  нет шины i2c и имеет всего 1кб под программу.У ATtiny 25/45/85 имеется последовательный порт на выводах PB4 -RX ,PB3 — TX ,но м/к не поддерживают загрузку через его,только обмен данными.

У ATtiny 2313 и 4313 другая цоколевка,но подключается так же:

Настройка Arduino IDE для микроконтроллеров ATtiny

Для этого необходимо дописать нужные микроконтроллеры в файл boards.txt  и распаковать  архив arduino-tiny в папку  папка_arduino/hardware/arduino/ 

Последнюю версию arduino-tiny можно найти тут.

Например ,чтобы добавить в список поддерживаемых контроллеров ATtiny85 необходимо добавить следущий текст в boards.txt:

###########################################################################
attiny85.name=Optiboot ATtiny85 @ 8 MHz (internal osc)
attiny85.upload.protocol=arduino
attiny85.upload.speed=9600
#bootloader takes up last 10 pages, so there is a limit on the max size.
attiny85.upload.maximum_size=7616
attiny85.bootloader.low_fuses=0xE2
attiny85.bootloader.high_fuses=0xD7
attiny85.bootloader.extended_fuses=0xFE
attiny85.bootloader.path=optiboot
attiny85.bootloader.file=optiboot_attiny85.hex

attiny85.build.mcu=attiny85
attiny85.build.f_cpu=8000000L
attiny85.build.core=tiny
attiny85.build.variant=tinyX5
 # вариант c частотой внутренного генератора 8 мгц.
###########################################################################

Остальные примеры поддерживаемых микроконтроллеров можно посмотреть в файле Prospective Boards.txt архива arduino-tiny .

Для ATtiny13 необходимо другое ядро ,для этого распакуем архив в папку hardware\arduino\cores\core13\

 и добавляем в список boards.txt:

#############################################

attiny13.name=ATtiny13 (internal 9.6 MHz clock)
attiny13.bootloader.low_fuses=0x7a
attiny13.bootloader.high_fuses=0xff
attiny13.upload.maximum_size=1024
attiny13.build.mcu=attiny13
attiny13.build.f_cpu=9600000L
attiny13.build.core=core13
attiny13.build.variant=tiny8

###############################################

Сейчас мы можем программировать добавленные микроконтроллеры через плату Arduno или USBasp.

Другие микроконтроллеры ATmega

ATmega8 без загрузчика

Чтобы добавить м/к ATmega8 без загрузчика добавляем в boards.txt следущий текст:

###########################################################################
atmega8A.name=ATmega8A
atmega8A.bootloader.low_fuses=0xFF
atmega8A.bootloader.high_fuses=0xCF
atmega8A.bootloader.unlock_bits=0x3F
atmega8A.bootloader.lock_bits=0x0F
atmega8A.upload.maximum_size=8192
atmega8A.build.mcu=atmega8
atmega8A.build.f_cpu=16000000L
atmega8A.build.core=arduino:arduino
atmega8A.build.variant=standard

# вариант без загрузчика и частотой м/к 16 мгц.
###########################################################################

 ATmega8 имеется в списке поддерживаемых как Arduino NG or older

с загрузчиком,который отнимает 1 кб ,при таком загрузчике микроконтроллер можно прошивать стандартно,установив его например в Arduino UNO.Сконфигурировать свой загрузчик на другую частоту вы можете в Конструкторе Bootloader`а.

ATmega32 ,ATmega16,ATmega1284,ATmega644,ATmega324

Для добавления данных микроконтроллеров необходимо распаковать из архива avr-netino папку hardware\avrnetio и поместить её в папку Arduiono_ide\hardware\ .Другие папки с примерами и библиотеками можно так же распаковать в соотвествующие папки при необходимости.

Расмотрим пример на  микроконтроллере ATmega32:

Микроконтроллер ATmega32 имеет 40 ножек из них 32 — это порты ввода вывода.

Расшифруем основные из них:

D — это цифровые выводы в нумерации arduino.

AI — аналоговые входы.

PWM — выводы с возможностью ШИМ.

 

Если Вы правельно скопировали папку avrnetio ,то после запуска Arduino IDE Вы увидите добавленные микроконтроллеры в общем списке.Вы можете исправить или удалить некоторые ненужные микроконтроллеры в файле hardware\avrnetio\board.txt 

Если сейчас подключить микроконтроллер к  Arduno или USBasp ,то можно уже заливать скетчи из среды Arduino IDE .

Обратите внимание,что новый м/к запрограммирован работать от внутреннего генератора и при прошивке загрузчика (через меню сервис-> записать загрузчик) поменяются фьюзы на режим от внешнего кварца.Загрузчик прошивать не обязательно,если Вы не хотите Заливать скетчи через последовательный порт.Перед прошивкой загрузчика можно поправить фьюзы в файле board.txt в строках bootloader.low_fuses и bootloader.high_fuses используя калькулятор фьзов.

Хотя avr-netino и поставляется с загрузчиками,но загрузка через последовательный порт на ATmega32 у меня не заработала.Для загрузки через его необходимо подсунуть «правельный» загрузчик в папку /hardware/avrnetio/bootloaders/optiboot/ из архива boots.zip ,заменив в файле board.txt имя файла загрузчика в строке bootloader.file соотвествующего микроконтроллера.Сконфигурировать свой загрузчик на другую частоту вы можете в Конструкторе Bootloader`а

homes-smart.ru

CooCox CoIDE

Высокоинтегрированная программная среда, предназначенная для разработки кода микроконтроллеров архитектуры ARM.

CooCox CoIDE является одним из самых простых и быстрых в плане установки, освоения и настройки решений, позволяющим даже начинающим пользователям добиваться в нем существенных результатов. Успешный старт первых проектов обеспечивает мастер, помогающий пройти через все основные этапы разработки путем ответов на простые вопросы. Качественно сделанная среда CooCox CoIDE позволяет загружать исходный код программы, редактировать его, проводить компиляцию (сторонними средствами), прошивать контроллер и проводить отладку.

Программа основана на базе Eclipse и имеет все ее достоинства. Редактор кода включает в себя подсветку синтаксиса и всплывающие подсказки. Присутствуют функции глобальной замены переменной и предложения вариантов окончания кода. Среда поддерживает микроконтроллеры серии ST, а также ряд других семейств: Atmel, Holtek, Freescale, Nuvoton, NXP, Energy Micro, Texas Instruments и некоторые другие. Список чипов постоянно увеличивается с каждой версией программы. Встроенный дебаггер ST-Link поддерживает все основные режимы отладки.

При создании нового проекта предлагается выбор используемой микросхемы и библиотек. Возможен просмотр кратких характеристик каждого чипа. CoIDE автоматически создает всю структуру проекта, а также подключает все остальные необходимые для работы библиотеки. Каждая из них содержит несколько готовых примеров, которые можно использовать в проекте. Присутствует функция пополнения библиотек собственными примерами. При подключении новых библиотек к проекту учитываются все зависимости между ними.

Первым из недостатков CooCox CoIDE стоит отметить отсутствие компилятора GCC, который нужно скачать и установить отдельно. А после этого в настройках CoIDE необходимо указать правильный путь к нему. Для серии ARM существует несколько вариантов компиляторов с различными наборами вспомогательных средств. По умолчанию CooCox CoIDE разрабатывалась для взаимодействия с ARM GCC.

Пути к файлам проекта жестко прописываются в программе. Простое перемещение папки с проектом приведет к тому, что проект не соберётся. Поэтому пути необходимо редактировать вручную в файлах. Скорее всего, профессиональным разработчикам программа покажется слишком простой, в ней также отсутствует возможность тонких настроек.

Данная среда разработки совершенно бесплатна и имеет открытый код. Для получения доступа к скачиванию необходимо пройти простую процедуру регистрации. Также программу можно закачать через предварительно установленный менеджер CoCenter, который в дальнейшем будет оповещать обо всех обновлениях и дает возможность установки дополнительных утилит разработчика. Среди них стоит отметить собственную встраиваемую операционную систему для работы с микроконтроллерами CooCox CoOS, софт для программирования Flash-памяти CooCox CoFlash, а также инструмент, упрощающий конфигурирование портов контроллеров CooCox CoSmart. Устанавливать CoIDE рекомендуется в каталог без русских букв, без пробелов, а лучше всего в предлагаемый по умолчанию вариант.

Данную программу создала команда из двадцати разработчиков под названием CooCox, входящих с 2011 года в состав международной компании Embest Technology. Штаб-квартира команды расположена в городе Шэньчжэне (Китай). Группа возникла в 2009 году на базе Уханьского Технологического Университета.

Программа CooCox CoIDE создана на английском языке и не имеет русификатора.

Рабочая платформа рассматриваемой среды разработки – операционные системы Windows XP (необходим SP3), Vista (SP2), 7. Для установки CoIDE в Windows XP желательна версия Professional, так как в Home Edition не работает режим отладки. Способы решения этой проблемы описаны на форуме CooCox. Кроме этого, возможна работа с программой в среде Linux с помощью Wine. Однако функции отладки и записи в микроконтроллер будут недоступны.

Официальный сайт CooCox CoIDE: http://www.coocox.org

Скачать CooCox CoIDE

STM32: простой и быстрый старт с CooCox CoIDE

Обсуждение программы на форуме

cxem.net

Настраиваем тему Arduino IDE | РОБОТОША

# GUI — STATUS

status.notice.fgcolor = #002325

status.notice.bgcolor = #17A1A5

status.error.fgcolor = #FFFFFF

status.error.bgcolor = #E34C00

status.edit.fgcolor = #000000

status.edit.bgcolor = #F1B500

status.font = SansSerif,plain,12

 

# GUI — TABS

# settings for the tabs at the top

# (tab images are stored in the lib/theme folder)

header.bgcolor = #17A1A5

header.text.selected.color = #005B5B

header.text.unselected.color = #007e82

header.text.font = SansSerif,plain,12

 

# GUI — CONSOLE

console.font = Monospaced,plain,11

console.font.macosx = Monaco,plain,10

console.color = #000000

console.output.color = #eeeeee

console.error.color = #E34C00

 

# GUI — BUTTONS

buttons.bgcolor = #006468

buttons.status.font = SansSerif,plain,12

buttons.status.color = #ffffff

 

# GUI — LINESTATUS  

linestatus.color = #ffffff

linestatus.bgcolor = #006468

 

# EDITOR — DETAILS

 

# foreground and background colors

# editor.fgcolor = #000000

# editor.bgcolor = #ffffff

editor.fgcolor = #dddddd

editor.bgcolor = #000000

 

# highlight for the current line

# editor.linehighlight.color=#e2e2e2

editor.linehighlight.color=#333333

# highlight for the current line

editor.linehighlight=true

 

# caret blinking and caret color

# editor.caret.color = #333300

editor.caret.color = #ffffff

 

# color to be used for background when ‘external editor’ enabled

editor.external.bgcolor = #c8d2dc

 

# selection color

# editor.selection.color = #ffcc00

editor.selection.color = #bbbb00

 

# area that’s not in use by the text (replaced with tildes)

editor.invalid.style = #7e7e7e,bold

 

# little pooties at the end of lines that show where they finish

editor.eolmarkers = false

editor.eolmarkers.color = #999999

 

# bracket/brace highlighting

editor.brackethighlight = true

editor.brackethighlight.color = #006699

 

 

# TEXT — KEYWORDS

 

# e.g abstract, final, private

editor.keyword1.style = #cc6600,plain

 

# e.g. beginShape, point, line

editor.keyword2.style = #cc6600,plain

 

# e.g. byte, char, short, color

editor.keyword3.style = #cc6600,bold

 

 

# TEXT — LITERALS

 

# constants: e.g. null, true, this, RGB, TWO_PI

# editor.literal1.style = #006699,plain

editor.literal1.style = #00ff00,plain

 

# p5 built in variables: e.g. mouseX, width, pixels

# editor.literal2.style = #006699,plain

editor.literal2.style = #00ff00,plain

 

# http://arduino.cc/

editor.url.style = #0000ff,underlined

 

# e.g. + — = /

editor.operator.style = #000000,plain

 

# ?? maybe this is for words followed by a colon

# like in case statements or goto

editor.label.style = #7e7e7e,bold

 

 

# TEXT — COMMENTS

editor.comment1.style = #7e7e7e,plain

editor.comment2.style = #7e7e7e,plain

 

 

# LINE STATUS — editor line number status bar at the bottom of the screen

linestatus.font       = SansSerif,plain,10

linestatus.height  = 20

robotosha.ru

Установка и настройка Arduino IDE под Windows [Амперка / Вики]

Рассмотрим начало работы с Arduino в операционной системе Windows на примере Arduino Uno. Для других плат разница минимальна — эти особенности перечислены на страницах описания конкретных плат.

1. Установка Arduino IDE

Установите на компьютер интегрированную среду разработки Arduino — Arduino IDE.

Шаг 1

Выберите версию среды в зависимости от операционной системы.

Шаг 2

Нажмите на кнопку «JUST DOWNLOAD» для бесплатной загрузки Arduino IDE.

2. Запуск Arduino IDE

Запустите среду программирования Arduino IDE.

Arduino IDE не запускается?

Вероятней всего, на компьютере некорректно установлена JRE — Java Runtime Environment. Для решения проблемы переустановите Arduino IDE.

3. Подключение платы к компьютеру

  1. Соедините Arduino с компьютером по USB-кабелю. На плате загорится светодиод «ON» и начнёт мигать светодиод «L». Это значит, что на плату подано питание и микроконтроллер начал выполнять прошитую на заводе программу «Blink».

  2. Для настройки Arduino IDE на работу с конкретной платой Arduino — узнайте какой номер COM-порта присвоил компьютер данной платформе. Зайдите в «Диспетчер устройств» Windows и раскройте вкладку «Порты (COM и LPT)».

Операционная система распознала плату Arduino как COM-порт и назначила номер 2. Если вы подключите к компьютеру другую плату Arduino, операционная система назначит ей другой номер. Если у вас несколько плат Arduino, очень важно не запутаться в номерах COM-портов.

Что-то пошло не так?

После подключения Arduino к компьютеру, в диспетчере устройств не появляются новые устройства? Это может быть следствием следующих причин:

  • Неисправный USB-кабель или порт

  • Блокировка со стороны операционной системы

  • Неисправная плата Arduino

4. Настройка Arduino IDE

Для настойки среды Arduino IDE с конкретной платформой Arduino — необходимо выбрать название модели Arduino и номер присвоенного плате COM-порта.

  1. Для установки модели платы Arduino зайдите в меню: и выберете плату «Arduino Uno».
  2. Для выбора номера COM-порта перейдите в меню: и выберете нужный порт.

В рассмотренном примере мы выбрали плату Arduino Uno. В вашем случае выбирайте конкретно вашу модель Arduino.

Поздравляем, среда Arduino IDE настроена для прошивки платы Arduino.

Что-то пошло не так?

  • Arduino IDE тормозит при навигации по меню? Отключите в диспетчере устройств все внешние устройства типа «Bluetooth Serial». Например, виртуальное устройство для соединения с мобильным телефоном по Bluetooth может вызвать такое поведение.

5. Загрузка первого скетча

Среда настроена, плата подключена. Пора прошивать платформу.

Arduino IDE содержит большой список готовых примеров в которых можно быстро подсмотреть решение какой-либо задачи. Выберем самый распространенный пример — «Blink».

Немного модифицируем код, чтобы увидеть разницу с заводским миганием светодиода.

Заменим строчку:

  delay(1000);  

на:

  delay(100);  

Полная версия кода:

void setup()
{
  // настраиваем пин 13 в режим выхода
  pinMode(13, OUTPUT);
}
 
void loop()
{
  // подаём на пин 13 «высокий сигнал»
  digitalWrite(13, HIGH);
 
  // ждём 100 миллисекунд
  delay(100);
 
  // подаём на пин 13 «низкий сигнал»
  digitalWrite(13, LOW);
 
  // ждём 100 миллисекунд
  delay(100);
}

Теперь светодиод «L» должен загораться и гаснуть каждые 100 миллисекунд — в 10 раз быстрее исходной версии. Загрузите скетч в Arduino и проверьте. После загрузки светодиод начнёт мигать быстрее. Всё получилось.

Теперь смело переходите к экспериментам на Arduino.

Что-то пошло не так?

В результате загрузки появляется ошибка вида: avrdude: stk500_get sync(): not in sync: resp = 0x00? Значит Arduino настроена некорректно. Вернитесь к предыдущим пунктам и убедитесь в том, что устройство было корректно распознано операционной системой, а в Arduino IDE установлены правильные настройки COM-порта и модели платы.

wiki.amperka.ru

почему не компилируются скетчи (и как этого избежать)

Поскольку я интенсивно занимаюсь разработкой в Arduino IDE, то этот вопрос меня неподдельно волновал. Почему скетч, написанный в одной версии среды разработки отказывается компилироваться в соседних версиях? Этим же вопросом меня заваливали пользователи системы Arduino Mega Server. Почему АМС компилируется в 1.6.5 и отказывается компилироваться в 1.6.4, 1.6.7 и 1.6.8?

И вот недавно, в процессе портирования Arduino Mega Server на новый контроллер Genuino 101, мне удалось разгадать эту великую загадку. И в этой статье я поделюсь с вами этим сакральным знанием и ваши скетчи после этого всегда будут успешно компилироваться. Итак…

Логика вещей

По логике вещей, код, который успешно компилируется в какой-либо версии среды разработки, например, 1.6.5, обязан компилироваться в соседних версиях IDE, ведь эти версии отличаются только в третьем знаке и представляют собой почти одно и то же, с небольшими модификациями. Но этого не происходит. Почему?

Внутренняя кухня

Чтобы это понять, нужно разобраться с тем, как формируются версии сред разработки Arduino IDE и как пользователи работают с этими средами разработки.

Начнём с пользователей. Большинство из них компилирует примитивные проекты, образно говоря, в 20 строк и с этими проектами никаких проблем не возникает. Эти проекты успешно компилируются в любой версии IDE потому, что используют только стандартные вызовы библиотечных функций и никак не модифицируют сами библиотеки.

Но сколько-нибудь развитый проект на Ардуино уже не умещается в «20 строк» и неизбежно пользуется менее распространёнными функциями из библиотек (которые более подвержены модификациям из версии в версию) и неизбежно приходят к необходимости модификации самих библиотек под свои специфические нужды проекта.

А один раз модифицировав системную библиотеку, вы становитесь её заложником и вынуждены «тащить» её за собой из версии в версию.

Теперь давайте разберёмся с тем, как формируются версии Arduino IDE. А формируются они по произволу (я подозреваю, что в конечном счёте, одного конкретного программиста, какого-нибудь Марио) выпускающей команды. И то, какая версия конкретной библиотеки будет включена в дистрибутив и в каком виде (с какими модификациями), остаётся на совести этого «Марио».

А теперь внимание, это очень важно! Выпускающая команда преследует только одну цель — чтобы дистрибутив одной версии был взаимно согласован и непротиворечив внутри себя. Их задача добиться того, чтобы все стандартные примеры работали корректно. И это всё! Задача совместимости между версиями вообще не ставится.

И поскольку 99% процентов пользователей компилирует проекты в «20 строк» этот подход прекрасно «прокатывает» на практике. А то, что сколько-нибудь серьёзные проекты не компилируются, это проблемы этих проектов. Слава Богу, теперь понятен механизм возникновения проблемы и теперь стало понятно, как с этим бороться.

Конкретный пример

Вспомним портирование АМС на Genuino 101 (работает начиная с версии 1.6.7 и выше). Тут команда Ардуино припасла для нас очередной прикол (молодцы ребята, не дают нам расслабляться).

Попытка откомпилировать проект для нового контроллера приводила к появлению множества ошибок компилятора. Анализ сообщений показал, что компилятору категорически не нравится наша Ethernet библиотека. Чем же она так не угодила компилятору?

Начинаем разбираться.

Наша библиотека: version=1.0.4 (не нравится компилятору)
Библиотека из IDE 1.6.7: version=1.0.4 (нравится компилятору)

Однако.

Наша библиотека: 31 файл (не нравится компилятору)
Библиотека из IDE 1.6.7: 31 файл (нравится компилятору)

Однако.

Наша библиотека: 123 КБ (не нравится компилятору)
Библиотека из IDE 1.6.7: 123 КБ (нравится компилятору)

Однако.

Другими словами, Марио «засунул» в IDE 1.6.7 Ethernet библиотеку с одним и тем же номером версии, что и в IDE 1.6.5, одним и тем же количеством файлов и с одним и тем же размером, но с РАЗНЫМ СОДЕРЖИМЫМ и забыл нас об этом предупредить. А это самое «разное содержимое» как паук держится своими лапками за IDE и другие библиотеки более низкого уровня (тоже модифицированные в 1.6.7).

Браво, Марио! С таким подходом ничего не будет компилироваться, кроме стандартных примеров и скетчей в 20 строк.

Практическое решение (головоломок от Ардуино)

Теперь стал кристально ясен механизм того, почему не компилируются проекты в разных версиях Arduino IDE и, соответственно, так же кристально стал ясен путь решения этой проблемы. В данном конкретном случае решение состоит из трёх частей.

  • Часть первая. Нахождение работающей библиотеки. Помните, задача у выпускающей команды создать непротиворечивую версию IDE? Значит где-то должна быть работающая версия нужной нам библиотеки.
  • Часть вторая. Перенесение работающей Ethernet библиотеки от шалуна Марио на её место в проекте Arduino Mega Server. Здесь нет ничего сложного — просто копируем её на место нашей неработающей в IDE 1.6.7 Ethernet библиотеки.
  • Часть третья. Модификация под проект Arduino Mega Server перенесённой и заведомо работающей в IDE 1.6.7 Ethernet библиотеки.

То же самое нужно проделать со всеми некомпилирующимися библиотеками проекта (то есть найти работающую версию библиотеки из IDE и перенести её на её место в проекте и модифицировать, если это необходимо). Но в данном случае нам повезло, все остальные библиотеки заработали нормально (потому, что Марио не успел их по-тихому модифицировать, хотя мог и обязательно сделает это в новых версиях IDE, но мы уже знаем как с этим бороться).

Заключение

Вот и весь секрет успешной работы в Arduino IDE со сложными проектами. Теперь вы можете чувствовать себя во всеоружии и для вас не составит труда заставить работать ваш проект в любой версии Arduino IDE.

Автор: smart_alex

Источник

www.pvsm.ru

Установка и настройка Arduino в ОС Windows [Амперка / Вики]

Вы стали счастливым обладателем платы Arduino. Что же делать дальше? А дальше нужно подружить Arduino с компьютером. Мы рассмотрим начало работы с Arduino Uno в операционной системе Windows.

1. Установка Arduino IDE

Для начала нужно установить на компьютер интегрированную среду разработки Arduino — Arduino IDE.

Установка Arduino IDE с помощью инсталлятора избавит вас от большинства потенциальных проблем с драйверами и программным окружением.

2. Запуск Arduino IDE

После того как вы загрузили и установили Arduino IDE, давайте запустим её!

Перед нами окно Arduino IDE. Обратите внимание — мы ещё не подключали нашу плату Arduino Uno к компьютеру, а в правом нижнем углу уже красуется надпись «Arduino Uno on COM1». Таким образом Arduino IDE сообщает нам, что в данный момент она настроена на работу с целевой платой Arduino Uno. А когда придёт время, Arduino IDE будет искать Arduino Uno на порту COM1.

Позже мы поменяем эти настройки.

Что-то пошло не так?

  • Arduino IDE не запускается? Вероятно на компьютере некорректно установлена JRE (Java Runtime Environment). Обратитесь к пункту (1) для переустановки Arduino IDE: инсталлятор сделает всю работу по развёртыванию JRE.

3. Подключение Arduino к компьютеру

После установки Arduino IDE пришло время подключить Arduino Uno к компьютеру.

Соедините Arduino Uno с компьютером через USB-кабель. Вы увидите, как на плате загорится светодиод «ON», и начнёт мигать светодиод «L». Это означает, что на плату подано питание, и микроконтроллер Arduino Uno начал выполнять прошитую на заводе программу «Blink» (мигание светодиодом).

Чтобы настроить Arduino IDE на работу с Arduino Uno, нам необходимо узнать, какой номер COM-порта присвоил компьютер Arduino Uno. Для этого нужно зайти в «Диспетчер устройств» Windows и раскрыть вкладку «Порты (COM и LPT)». Мы должны увидеть следующую картину:

Это означает, что операционная система распознала нашу плату Arduino Uno как COM-порт, подобрала для неё правильный драйвер и назначила этому COM-порту номер 7. Если мы подключим к компьютеру другую плату Arduino, то операционная система назначит ей другой номер. Поэтому, если у вас несколько плат Arduino, очень важно не запутаться в номерах COM-портов.

Что-то пошло не так?

4. Настройка Arduino IDE на работу с Arduino Uno

Теперь нам необходимо сообщить Arduino IDE, что плата, с которой ей предстоит общаться, находится на COM-порту «COM7».

Для этого переходим в меню «Сервис» → «Последовательный порт» и выбираем порт «COM7». Теперь Arduino IDE знает — что-то находится на порту «COM7». И с этим «чем-то» ей вскоре предстоит общаться.

Чтобы у Arduino IDE не осталось никаких сомнений, необходимо прямо указать: «Мы будем использовать Arduino Uno!». Для этого переходим в меню «Сервис» → «Плата» и выбираем нашу «Arduino Uno».

Что-то пошло не так?

  • Список последовательных портов пуст? Значит Arduino Uno некорректно подключена. Вернитесь к пункту (3), чтобы отладить соединение.

  • Arduino IDE невероятно тормозит при навигации по меню? Отключите в диспетчере устройств все внешние устройства типа «Bluetooth Serial». Например, виртуальное устройство для соединения с мобильным телефоном по Bluetooth может вызвать такое поведение.

5. Загрузка первого скетча

Среда настроена, плата подключена. Теперь можно переходить к загрузке скетча.

Arduino IDE содержит очень много готовых примеров, в которых можно быстро подсмотреть решение какой-либо задачи. Есть в ней и простой пример «Blink». Давайте выберем его.

Немного модифицируем код, чтобы увидеть разницу с заводским миганием светодиода.

Вместо строчки:

  delay(1000);  

напишем:

  delay(100);  

Полная версия кода:

/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.
 
  This example code is in the public domain.
 */
 
// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;
 
// the setup routine runs once when you press reset:
void setup() {                
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);     
}
 
// the loop routine runs over and over again forever:
void loop() {
  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(100);               // wait for a second
  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
  delay(100);               // wait for a second
}

Теперь светодиод «L» должен загораться и гаснуть на десятую часть секунды. То есть в 10 раз быстрее, чем в заводской версии.

Загрузим наш скетч в Arduino Uno и проверим, так ли это? После загрузки светодиод начнёт мигать быстрее. Это значит, что всё получилось. Теперь можно смело переходить к «Экспериментам»

Что-то пошло не так?

  • В результате загрузки появляется ошибка вида avrdude: stk500_get sync(): not in sync: resp = 0x00? Это значит, что Arduino настроена некорректно. Вернитесь к предыдущим пунктам, чтобы убедиться в том, что устройство было распознано операционной системой и в Arduino IDE установлены правильные настройки для COM-порта и модели платы.

wiki.amperka.ru

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *