С++ и Arduino

ksv1959
ksv1959 аватар
Offline
Зарегистрирован: 30.11.2018

Здравствуйте.

Сразу скажу, что в теме по Arduino я новичок, но для PC писал программы и на классическом С и на С++.

Поэтому вопрос больше не про программирование конкретной задачи, а общий.

Просмотрел достаточно много текстов программ для Arduino. Практически нигде не встречаются определения классов, а если встречаются, то их применение ограничивается использованием статических объектов этих классов.

Для диалекта С++ Arduino вообще не предусмотрена работа с динамически создаваемыми объектами классов (понятия конструктор и деструктор)?

 PS: Всё, написанное на С может быть скомпилировано с небольшими  доработками синтаксиса компилятором (транслятором) С++ , а компилятор С   программу на C++ никогда не сможет откомпилировать.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

   Вопрос: а какие еще языки вы знаете?

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

Видите ли, ksv1959.

Никто не мешает пользоваться всеми возможностями ООП. но при программировании микроконтроллеров существует некоторая специфика:

1. Очень ограниченные ресурсы. Поэтому, например, таблица виртуальных методов - это уже накладно.

2. Зачастую, класс - это библиотека работы с конкретным прибором. Для возможных предков и потомков посто не существуют соответствующих приборов.

3. Некоторая специфика инициализации. Например, когда мы загружаем некоторую программу в память ПК, у нас уже и все драйвера установлены и все железо настроено. В случае же микроконтроллера, например, конструктор статического класса запускается ДО того, как настроено железо. Соответственно, многие полезные функции на этот момент могут просто не работать. Поэтому зачастую конструктор делают пустым (куда ж без него?), а всю инициализацию пеомещают в метод init() или begin().

4. Программы для МК не выгружаются из памяти, поэтому деструктор часто вообще не нужен. От слова "совсем". Но если хочется - почему нет?

 

Другими словами: можно - очень многое, но далеко не все из того, что можно, - целесообразно.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ksv1959 пишет:

Для диалекта С++ Arduino 

В природе не существует никакого "диалекта С++ Arduino". В Ардуино-IDE используется совершенно штатный, стандартный компилятор gcc. 

Всё, что есть нестандартного, это то, что IDE

1. Вставляет в начало любого файла .ino строку #include <Arduino.h>
2. Собирает по всему файлу .ino все функции, создаёт их объявления и вставляет эти объявления в начало файла (чтобы в программе можно было использовать функции до их определения).

Готовый (после обработки IDE файл называется <также>.ino.cpp - Вы всегда можете на него посмотреть. Далее этот файл уже компилируется самым обычным компилятором C++ - без каких-бы то ни было фокусов.

Вот из этого и исходите,когда у Вас возникнут вопросы.

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

У Пуха есть полно классов. 

ksv1959
ksv1959 аватар
Offline
Зарегистрирован: 30.11.2018

Здравствуйте.

Какой вопрос, такой и ответ.

На чём приходилось писать и что вспомнится:  Algol, Аналитик,  Fortran, PL/I, Pascal, С (разные модификации под среду), Prolog (это язык логического прогаммирования),LISP,   Modula, C++ (в основном Borland але Embarc...), JAVA ... ну и до кучи, всякие ассемблеры, начиная от DEC (Digital Equipment Corporation (DEC)...специализированные процессоры... IBM PC...

А Штирлиц неплох.

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

Ну так знай теперь, что Ардуино использует обычный GCC образца (стандарта) 2011 года по умолчанию. Единственное отличие - STL библиотеки для Дуни никто еще не написал, баловство это. 

ksv1959
ksv1959 аватар
Offline
Зарегистрирован: 30.11.2018

Здравствуйте.

Спросили, ответил.

C Arduino попросили с детьми позаниматься в рамках http://kvantorium.ru/, вот и готовлюсь. Железо видел только в Internet. Скоро будет какой то мегакомплект. 

ksv1959
ksv1959 аватар
Offline
Зарегистрирован: 30.11.2018

Здравствуйте.

Пусть Пух приходит, только без занудного и жадного Кролика.

ksv1959
ksv1959 аватар
Offline
Зарегистрирован: 30.11.2018

Здравствуйте.

С пунктом

1.  не согласен т.к. компилятор (нормальный) генерирует ссылки на методы. При этом  затраты памяти не превышают 10% от линейного кода С.

2.  абсолютно согласен.

3. - не знаю т.к. с железкой еще не работал, есть только перспектива.

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

ksv1959
ksv1959 аватар
Offline
Зарегистрирован: 30.11.2018

Здравствуйте.

Спасибо. Про STL понял.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Так Кролик на форуме не завелся. И да начитать учить детей надо с основ - автоматов. Без них программирование это бег за своим хвостом.

Olvin
Offline
Зарегистрирован: 01.08.2018

ksv1959 пишет:
4. все железки построены по принципам архитектур ВМ А.Тьюринга и фон-Неймана т.е. данные и исполняемый код находятся в одном пространстве (если бы это было не  так, то написать компьютерный вирус было бы проблематично).Хотя тут есть проблема со сборкой "мусора" как в Java. 

Откройте для себя гарвардскую архитектуру.

ksv1959
ksv1959 аватар
Offline
Зарегистрирован: 30.11.2018

Здравствуйте.

Спорить про диалекты не буду.  За всё остальное в ответе, спасибо.

Olvin
Offline
Зарегистрирован: 01.08.2018

ksv1959 пишет:
1.  не согласен т.к. компилятор (нормальный) генерирует ссылки на методы. При этом  затраты памяти не превышают 10% от линейного кода С.

И это очень немало, при 2-2.5КБ ОЗУ.

Вообще же, настораживает ваше высказывание: "C Arduino попросили с детьми позаниматься в рамках http://kvantorium.ru/, вот и готовлюсь. Железо видел только в Internet. Скоро будет какой то мегакомплект."

Рано вам обучать детей робототехнике (или автоматике), если у вас такие вопросы и непонятки. Плохой учитель - хуже отсутствия учителя. Буду рад, если ошиаюсь в этом про вас.

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

ksv1959 пишет:

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

Рассматриваемые микроконтроллеры - это не фон-Неймановская, а Гарвардская архитектура.

Кстати, можете попытаться написать вирус под микроконтроллер. :)  (хотя у ARMов, при разных шинах, адресное пространство общее, и адреса кода и данных не пересекаются. И, кроме того, возможно выполнение кода из RAM. Но это именно для ARMов, тогда как наиболее распространенные модели МК - это AVR)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ksv1959 пишет:

4. все железки построены по принципам архитектур ВМ А.Тьюринга и фон-Неймана 

Вы действительно не видите разницы между машиной Тьринга и архитектурой фон Неймана? 

Но, даже если так. Данный микроконтроллер (как Вам уже сказали коллеги) не имеет к фон Нейману никакого отношения.

ksv1959
ksv1959 аватар
Offline
Зарегистрирован: 30.11.2018

Здравствуйте.

Надеюсь, что не с теории  абстрактных автоматов Миля и Мура надо начинать. :)

Конечно. Согласен. Но не я выбираю.

Отрицание - Кролик нужен форуму, иначе загнуться его (форума) СДНФ и СКНФ. :)

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

Olvin пишет:

Вообще же, настораживает ваше высказывание: "C Arduino попросили с детьми позаниматься в рамках http://kvantorium.ru/, вот и готовлюсь. Железо видел только в Internet. Скоро будет какой то мегакомплект."

Рано вам обучать детей робототехнике (или автоматике), если у вас такие вопросы и непонятки. Плохой учитель - хуже отсутствия учителя. Буду рад, если ошиаюсь в этом про вас.

2ksv1959: кстати - да.

Скажу больше: Ардуино - это 50% схемотехники и 50% программирования. А если "железо" Вы видели только в И-нете, настоятельно рекомендую подумать прежде, чем давать свое согласие на занятия с детьми.

ksv1959
ksv1959 аватар
Offline
Зарегистрирован: 30.11.2018

Здравствуйте.

1. Я не учитель по образованию. Всё больше в "сапогах" (>25). Приказали - сделал.

2. Рано - понятие относительное. Копать отсюда и до обеда, привычное дело.

3. Про Arduino узнал неделю назад. 

4.  Рад, что на форуме есть люди которые помогут советом... только не на Красной площади.

 

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, Вы в схемотехнике-то разбираетесь? Если да, то и здесь разберётесь. Если нет, то изучайте, практикуйтесь заранее, чтобы каждый чих в тупик не ставил.

Ремарку про "только не на Красной площади" не понял.Это акаой-то армейский фольклёр? Или из анекдота, которого я не знаю?

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

ksv1959 пишет:

1. Я не учитель по образованию. Всё больше в "сапогах" (>25). Приказали - сделал.

вы знаете, это очень заметно...

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

b707 пишет:

вы знаете, это очень заметно...

+100500

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

ksv1959 пишет:

Надеюсь, что не с теории  абстрактных автоматов Миля и Мура надо начинать. :)

Напрасно иронизируете. В программировании для МК несколько иные приоритеты по сравнению с программирование для ПК. Кроме того, если в WinAPI или Delphi автоматная структура вводится помимо прикладного программиста, то в МК ее приходится делать ручками. Притом - с самого начала.

Так что если у детей есть курс информатики (с основами программирования), то первое, что к нему надо добавить, ориентируясь на Ардуино, это как раз автоматы.

Цитата:

Отрицание - Кролик нужен форуму, иначе загнуться его (форума) СДНФ и СКНФ. :)

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

ksv1959
ksv1959 аватар
Offline
Зарегистрирован: 30.11.2018

Здравствуйте.

Я надеюсь квалификации инженера по радиоэлектронике хватит на  50% схемотехники и 50% программирования. А про подумать... так это моё тайное кредо, мечта всей жизни, но всё время что-то мешает... :)

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Современные процессоры это очень сложное устройство, которое выделять на одну задачу очень жирно будет. Разделять задачи методом прерывания это потеря памяти , быстродействия и прочей хрени. Так делят задачи при помощи автоматного моделирования. Вот как раз программирование с помощью автоматов и позволяет экономно распределять ресурсы МК. Но если теоретическая часть теории автоматов всех более менее устраивает, то ее переложение на код , в часности на Ардуину , то тут море вариантов. У меня есть свое видение, у других форумчан свое. Да и Вам рекомендуется найти свой аспект программирования с помощью автоматов в среде Ардуино. Ведь вспомните первоначальный в теме вопрос. Динамические объекты классов. Но объекты чего они будут . Скорее всего автоматов так или иначе. Вот  это обычно вы и проглядели.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ksv1959 пишет:

Я надеюсь квалификации инженера по радиоэлектронике хватит на  50% схемотехники и 50% программирования. 

Должно хватить. Удачи Вам!

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

Пух, ты не кури эту гадость, которую тебе в Секте Святых Бесконечных Автоматов дают.  Вырвись уже из сумрака. 

ksv1959
ksv1959 аватар
Offline
Зарегистрирован: 30.11.2018

ЕвгенийП пишет:

Ремарку про "только не на Красной площади" не понял.Это акаой-то армейский фольклёр? Или из анекдота, которого я не знаю?

Бородатый анекдот (не армейский) про  армянское радио... Заканчивается так:"Советами замучают."

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Свои сообщения надо смотреть вот ТУТ. Находите нужную дату и нажимаете insert, после чего Вас перекидывает в тему на ваше сообщение.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

Ну, Вы в схемотехнике-то разбираетесь? Если да, то и здесь разберётесь. Если нет, то изучайте, практикуйтесь заранее, чтобы каждый чих в тупик не ставил.

Ремарку про "только не на Красной площади" не понял.Это акаой-то армейский фольклёр? Или из анекдота, которого я не знаю?

Это из анекдота ))) Вы Евгений Петрович видимо еще юны!

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ua6em пишет:

Это из анекдота ))) Вы Евгений Петрович видимо еще юны!

К сожалению, наоборот! Я уже забыл больше, чем некоторые знают :))))

bwn
Offline
Зарегистрирован: 25.08.2014

andriano пишет:

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

А статейку, в "песочницу", слабо?)))))

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

ua6em пишет:

Это из анекдота ))) Вы Евгений Петрович видимо еще юны!

К сожалению, наоборот! Я уже забыл больше, чем некоторые знают :))))

)))
ноосферу знаниями пополняете?