Про arduino IDE

Kazanova
Offline
Зарегистрирован: 29.01.2015

Вот этим колхоз всегда и отличался от интеллигенции :)))   Знаниями поделиться это ctr+c   ctrl+v, а целину поднять и надои - это совсем другое.  Была просьба о совете и помощи,  а началось унылое брюзжание. Не хочешь помогать - да пожалуйста, твое личное дело, проходи мимо. А поднимать бздежь о несовершенстве бытия и мерится пипирками программирования это личная инициатива оппозиции :) 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Конечно, же, всё как ты и описал.  Только самый первый ответ после твоего вопроса

http://arduino.ru/forum/obshchii/pro-arduino-ide#comment-539725

просто ты его не понял, по скудоумию.   Разрабоччик, млять. 

Kazanova
Offline
Зарегистрирован: 29.01.2015

атыбись.  Твои унылые попытки самоутвердиться уже никому не интересны. Ардуино и рассчитано на "скудоумных", так то. 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Kazanova пишет:

Ардуино и рассчитано на "скудоумных", так то. 

А С++ - нет. 

 

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

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

AlexArGC
AlexArGC аватар
Offline
Зарегистрирован: 18.11.2016

Тема поднята хорошая, жаль воды раздули на страницу. А парочка простых примеров помогла бы.

Я вот тоже только учусь синтаксису Си и тоже возникла такая же проблема с вкладками на Arduino IDE :-( (Он их в алфавитном порядке что ль собирает?) Это специфика каждого "нового компилятора", который начинаешь осваивать и конечно не просто любому новичку. Хочу прикрутить LCDMenuLib2 библиотеку к своему проектику. Пример также на вкладках создан. Если я главный файл из примера переименуюв .h? То остальные также переименовать в .h и вставить в главный файл из примера через #include?

Про extern можете пояснить, как правильно применять?

И для чего например вставляют запись типа:

#ifndef dynamicParams_h
#define dynamicParams_h

...

#endif      //dynamicParams_h

 

b707
Offline
Зарегистрирован: 26.05.2017

AlexArGC пишет:

И для чего например вставляют запись типа:

#ifndef dynamicParams_h
#define dynamicParams_h

...

#endif      //dynamicParams_h

 

уже не для чего :) - признано устаревшим. Вместо этого pragma once

b707
Offline
Зарегистрирован: 26.05.2017

AlexArGC пишет:

Хочу прикрутить LCDMenuLib2 библиотеку к своему проектику. Пример также на вкладках создан.

посмотрел. Примеры написаны в виде набора .ino файлов. Такой типичный голимый гайверо-стиль...

НЕ знаю, насколько там все грамотно внутри, но думаю, что раз вы задаете эти вопросы - вам не осилить переделку этого примера в .h и .cpp файлы. Попробуйте оставить все файлы примера как .ino, а свой код втавьте в тот файл. где у автора setup() и loop()

AlexArGC
AlexArGC аватар
Offline
Зарегистрирован: 18.11.2016

Приятно когда за тебя решают, но все же :-)... Я просто не понимаю в какой последовательности компилятор начинает ino собирать. Попробовал даже алфавитную очередность изменить, не помогло.

Ну если забыли про ino. Зона видимости переменных для .h и .cpp тоже не понятна... Просто если в ino есть и переменные и функции, их надо разделить на .h и.cpp файлы? Или можно все в .cpp оставить?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

AlexArGC пишет:

Зона видимости переменных для .h и .cpp тоже не понятна... 

Если программирование изучать по форумам разной степени дэбильности, то да.  А если взять почитать чонить умное, например K&R, то всё атаматически раскладёцца по полочкам. 

https://ravesli.com/urok-20-mnogofajlovye-programmy/

b707
Offline
Зарегистрирован: 26.05.2017

AlexArGC пишет:

Я просто не понимаю в какой последовательности компилятор начинает ino собирать. Попробовал даже алфавитную очередность изменить, не помогло.

я и сам не знаю... и никогда не интересовался за ненадобностью, поскольку не собираю проекты из кучи .ino файлов.

Цитата:
если в ino есть и переменные и функции, их надо разделить на .h и.cpp файлы? Или можно все в .cpp оставить?

Если руководствоваться правилами компоновки Си - из одних только .cpp файлов код не соберется, поскольку функции из одного .cpp не будут ничего знать про функции из других файлов. Но ардуино ИДЕ может и обойдется одними только .cpp - я предпочитаю в рулетку не играть, мне проще сразу писать парами .h и .cpp

AlexArGC
AlexArGC аватар
Offline
Зарегистрирован: 18.11.2016

DetSimen пишет:

AlexArGC пишет:

Зона видимости переменных для .h и .cpp тоже не понятна... 

Если программирование изучать по форумам разной степени дэбильности, то да.  А если взять почитать чонить умное, например K&R, то всё атаматически раскладёцца по полочкам. 

https://ravesli.com/urok-20-mnogofajlovye-programmy/

Зы... Спасибо за книжку  и ссылку! Я  давно не  писал больших проектов (для себя).

Ибо програрммировванние это моё хобби (с детства), а не проф.деятельность. Я уже все понял про ino, осталось разобраться с cpp и h. Как раз зона видимости и беспокоит меня :-( В примере есть глобальные переменные все ж...

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017
AlexArGC
AlexArGC аватар
Offline
Зарегистрирован: 18.11.2016

b707 пишет:

посмотрел. Примеры написаны в виде набора .ino файлов. Такой типичный голимый гайверо-стиль...

НЕ знаю, насколько там все грамотно внутри, но думаю, что раз вы задаете эти вопросы - вам не осилить переделку этого примера в .h и .cpp файлы. Попробуйте оставить все файлы примера как .ino, а свой код втавьте в тот файл. где у автора setup() и loop()

А если тезисно: Как последовательно (правильно) поступить чтобы интегрировать в свой код эту библиотеку? Дальше я в нужном направлении уже читать начну :-) А то даже с поиском сложности, ибо проблема формулировок.

b707 пишет:

Если руководствоваться правилами компоновки Си - из одних только .cpp файлов код не соберется, поскольку функции из одного .cpp не будут ничего знать про функции из других файлов. Но ардуино ИДЕ может и обойдется одними только .cpp - я предпочитаю в рулетку не играть, мне проще сразу писать парами .h и .cpp

А чтобы знали надо объявлять прототипы? Или это вообще не туда?

P.S. У меня в планах перейти на более продвинутую среду чем Arduino IDE (поглядываю на PlatformIO хотя...), но пока с интерфейсом разберешься кучу времени надо.

b707
Offline
Зарегистрирован: 26.05.2017

AlexArGC пишет:

А чтобы знали надо объявлять прототипы?

именно так.

Посмотрите ссылку. что дал ДедСимен выше - там подробно расписано, как описать свою функцию в паре файлов - .h и .cpp

rkit
Offline
Зарегистрирован: 23.11.2016

b707 пишет:

уже не для чего :) - признано устаревшим. Вместо этого pragma once

Кем это признано, интересно? Это не стандартизированное расширение языка.

Green
Offline
Зарегистрирован: 01.10.2015

b707 пишет:

Если руководствоваться правилами компоновки Си - из одних только .cpp файлов код не соберется, поскольку функции из одного .cpp не будут ничего знать про функции из других файлов. Но ардуино ИДЕ может и обойдется одними только .cpp - я предпочитаю в рулетку не играть, мне проще сразу писать парами .h и .cpp


В некоторых случаях предпочитаю что бы собиралось не только с Ардуино IDE, но и со Студии или через Make (наиболее удобно). Ну и файлов всегда много, не зависимо от сложности проекта. Пример простейшего проекта:
 

  main.h          основные параметры
  power2313.cpp   основная программа
  sys_timer.h     системный таймер
  led.h/cpp       индикатор
  rotary.h/cpp    энкодер
  ky.h/cpp        кнопка
  conio.h/cpp     отладочная консоль,
  uart.h/cpp       нижний уровень
  io.h, chip.h    ввод/вывод
  compiler.h      компилятор
  macro.h         макро
  binary.h        двоичные константы
  Makefile        сборка

 

AlexArGC
AlexArGC аватар
Offline
Зарегистрирован: 18.11.2016

Всем спасибо большое за ответы и комментарии. Нашёл очень хорошую краткую и понятную главу по области видимости. Помогли ключевые слова для запроса из ответов.

Книга, это конечно хорошо но там 70% информации которую я уже знаю по другим языкам программирования :-( Буду вечерами читать.

Делюсь: http://mycpp.ru/cpp/book/c08.html думаю ещё много кому может пригодится.

P.S. Интегрировать пример LCDMenuLib2 все же получилось :-) Библиотека очень понравилась, наглядная и работает отлично, даже с тяжёлой интеграцией Blynk. Остаётся добить NewEncoder, тоже оказалась очень стабильная библиотека для энкодера с хорошими примерами, времени не хватило.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

По аглицки читаешь?

AlexArGC пишет:

 Я просто не понимаю в какой последовательности компилятор начинает ino собирать. тавить?

Pre-Processing

The Arduino development software performs a few transformations to your sketch before passing it to the avr-gcc compiler:

  • All .ino and .pde files in the sketch folder (shown in the Arduino IDE as tabs with no extension) are concatenated together, starting with the file that matches the folder name followed by the others in alphabetical order. The .cpp filename extension is then added to the resulting file.
  • If not already present, #include <Arduino.h>is added to the sketch. This header file (found in the core folder for the currently selected board) includes all the definitions needed for the standard Arduino core.
  • Prototypes are generated for all function definitions in .ino/.pde files that don't already have prototypes. In some rare cases, prototype generation may fail for some functions. To work around this, you can provide your own prototypes for these functions.
  • #linedirectives are added to make warning or error messages reflect the original sketch layout.

No pre-processing is done to files in a sketch with any extension other than .ino or .pde. Additionally, .h files in the sketch are not automatically #included from the main sketch file. Further, if you want to call functions defined in a .c file from a .cpp file (like one generated from your sketch), you'll need to wrap its declarations in an extern "C" {}block that is defined only inside of C++ files.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

AlexArGC пишет:
Книга, это конечно хорошо но там 70% информации которую я уже знаю по другим языкам программирования

Иерархия обучения ЯП. Единственная полноценная. В другом порядке получаются однобокие калеки.

начинаем в 13-14 лет:C

Развиваемся тоже в детстве:C++

добавляем базовые знания:Java

Расширяем свои представления языками высокого уровня: Python-PHP-JS

---------------------------------

Это к тому, что сегодня  программистом нельзя быть без С, как в старые времена - без Фортрана ;)))

=====================

Сорри! Опять обидел Паскальщиков! ;)) Можно начать с Паскаля, но выстроить основу из С и С++ все равно необходимо. В Паскале нет адресной арифметики, тем самым обучающийся теряет очень много возможностей. Пусть и опасных.

 

b707
Offline
Зарегистрирован: 26.05.2017

wdrakula пишет:

добавляем базовые знания:Java

какие базовые знания добавляет Ява? Вопрос без подкола. Яву не знаю и не пойму, много ли потерял?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

wdrakula пишет:

В Паскале нет адресной арифметики

Есть

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

DetSimen пишет:

wdrakula пишет:

В Паскале нет адресной арифметики

Есть

;))) угу. Жаль, что ты не математик, понял бы иронию: вся арифметика Пеано строится на определении инкремента! Так что в этом смысле - конечно есть. Гы! Но только в этом :((

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

b707 пишет:

wdrakula пишет:

добавляем базовые знания:Java

какие базовые знания добавляет Ява? Вопрос без подкола. Яву не знаю и не пойму, много ли потерял?

Четкая концепция ООП. Строгая типизация. Очень богатый полиморфизм, но без перегрузки операторов. Самый главный навык - привыкание к ООП. С++ - в строгом понимании не ООЯП, а ЯП "с элементами" ООП.

На Яве невозможно писать "процедурно" - ничего не выйдет. Лучший способ научиться писать объекно - порабоать на Яве с хоббийными или сторонними проектами.

Я бы посоветовал написать модуль к ИДЕ  - ну например стрелочный индикатор, который бы вызывался как tools из ИДЕ и принимал данные с сериала, того, который выбран в свойствах платы. Реально, даже с нулевыми знаниями, это примерно на неделю задачка, если с С++ уже на "ты". ;)) Можно не стрелочный, а имитация семисегментного, нарисованного графикой. Да хоть просто поле вывода, для начала.

С ИДЕ можно собрать тулс с графикой Java Swing. Её будет достаточно для любой украшалки.

b707
Offline
Зарегистрирован: 26.05.2017

Влад, спасибо за ответ. Не знал, что что к ардуино ИДЕ можно писать дополнения на Яве. Почему-то такого почти никто не пишет

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

b707 пишет:

Влад, спасибо за ответ. Не знал, что что к ардуино ИДЕ можно писать дополнения на Яве. Почему-то такого почти никто не пишет

FFS tools как написаны? ;))))

Если никто не будет меня поправлять, спорить, обвинять в неточностях кода, то можно в отдельной теме сделать мастер класс, как такие вещи писать. Причем по кусочкам, шаг за шагом покажу. Необходимое условие - сперва собрать ИДЕ из исходников. Это покажет, что весь инструментарий есть. С этого можно и начать.

нужен ant и jdk 8 или 11. Если собирать не только для себя, то 8.

AlexArGC
AlexArGC аватар
Offline
Зарегистрирован: 18.11.2016

"Нифига" Вас понесло парни/девчёнки :-) Я конечно ЗА любой "мастер класс"! Мой путь и был примерно такой Basic (фортран и иже с ними), Turbo Basic+Pascal с ООП, Ассемблер на УКНЦ (16-разрядный КМ1801ВМ2) потом был Z80 (много) и х86 (немного), а дальше уже VBA, Delphi, PHP, SQL и потом большоооой перерыв. А c рождением Ардуины (в моей жизни) пришлось к Си примкнуть. Хотя уже во времена Turbo Pascal была возможность начать Си, но не успели бытовуха 90-ых закрутила. Современный путь программиста уже совсем другой, щас азы МК как раз на ардуинах и надо изучать. Современные ПК далеко вперед ушли на низовом программировании, там и ООП мощный, и архитектура в разы сложнне стала, и ресурсов завались.

P.S. Вот пощупал freeRTOS на ESP32, пока понравилось, но знаний маловато про много-ядерность и много-поточность конечно, чтобы применимость расширять...

P.P.S. Еще прям на LISP заглядываюсь и его клонов. Этот язык под ИИ чудесно подходит. Но пока применимости не нашел для него в быту.

AlexArGC
AlexArGC аватар
Offline
Зарегистрирован: 18.11.2016

wdrakula пишет:

По аглицки читаешь?

Щас гугл всех "научил" по аглицки читать. Иногда правда со смыслами у него проблема :-( Я это читал в инструкции к IDE, ссылку в теме выше давали уже, но ясности сий опус много не внес. Вот прям с первого пункта путаница.

объединяются вместе, начиная с файла, который соответствует имени папки, за которым следуют другие в алфавитном порядке.

Проверял - врут. Изменение алфавитного порядка INO не убирает ошибку "функция не определена".

kalapanga
Offline
Зарегистрирован: 23.10.2016

AlexArGC пишет:

Проверял - врут. Изменение алфавитного порядка INO не убирает ошибку "функция не определена".

Я разработчиков Arduino IDE не защищаю - они легко могут от версии к версии что-то менять. Но если бы Вы сократили свой код до минимума, лишь бы воспроизводилась эта Ваша ошибка, и показали его здесь, то разговор бы был гораздо предметнее. Глядишь, общими усилиями и разобрались бы, кто виноват, что "функция не определена"!

b707
Offline
Зарегистрирован: 26.05.2017

AlexArGC пишет:

Проверял - врут. Изменение алфавитного порядка INO не убирает ошибку "функция не определена".

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

Поэтому самый простой метод решить ошибку "функция не определена" - это вручную создать для функции прототип и вставить его в начало того файла .ino, что называется по имени папки

AlexArGC
AlexArGC аватар
Offline
Зарегистрирован: 18.11.2016

b707 пишет:

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

Поэтому самый простой метод решить ошибку "функция не определена" - это вручную создать для функции прототип и вставить его в начало того файла .ino, что называется по имени папки

Простите за вредную привычку Паскальщиков, не заморачиваться за последовательность определений :-) Будем учится! Это вы про этот пункт:

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

 

b707
Offline
Зарегистрирован: 26.05.2017

AlexArGC пишет:

Это вы про этот пункт:

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

 

ага, именно про него

b707
Offline
Зарегистрирован: 26.05.2017

wdrakula пишет:

Необходимое условие - сперва собрать ИДЕ из исходников.

в винде из исходников? или в линуксе?

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

b707 пишет:

wdrakula пишет:

Необходимое условие - сперва собрать ИДЕ из исходников.

в винде из исходников? или в линуксе?


Для Явы никакой разницы, мне ближе Линух.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

AlexArGC пишет:

Простите за вредную привычку Паскальщиков, не заморачиваться за последовательность определений :-)

Неправда Ваша.

В Паскале все, что используется, должно быть предварительно определено. Без вариантов.

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

andriano пишет:

AlexArGC пишет:

Простите за вредную привычку Паскальщиков, не заморачиваться за последовательность определений :-)

Неправда Ваша.

В Паскале все, что используется, должно быть предварительно определено. Без вариантов.


Или, если не определено, то последовательность ТОЖЕ имеет значение

Green
Offline
Зарегистрирован: 01.10.2015

AlexArGC пишет:

Проверял - врут. Изменение алфавитного порядка INO не убирает ошибку "функция не определена".


Обычно виноваты все, кроме вас.  Проблема вовсе не в алфавитном порядке. Смотреть нужно в .ino.cpp файле. 
Ну и +1 к #79.