С++ и Arduino
- Войдите на сайт для отправки комментариев
Здравствуйте.
Сразу скажу, что в теме по Arduino я новичок, но для PC писал программы и на классическом С и на С++.
Поэтому вопрос больше не про программирование конкретной задачи, а общий.
Просмотрел достаточно много текстов программ для Arduino. Практически нигде не встречаются определения классов, а если встречаются, то их применение ограничивается использованием статических объектов этих классов.
Для диалекта С++ Arduino вообще не предусмотрена работа с динамически создаваемыми объектами классов (понятия конструктор и деструктор)?
PS: Всё, написанное на С может быть скомпилировано с небольшими доработками синтаксиса компилятором (транслятором) С++ , а компилятор С программу на C++ никогда не сможет откомпилировать.
Видите ли, ksv1959.
Никто не мешает пользоваться всеми возможностями ООП. но при программировании микроконтроллеров существует некоторая специфика:
1. Очень ограниченные ресурсы. Поэтому, например, таблица виртуальных методов - это уже накладно.
2. Зачастую, класс - это библиотека работы с конкретным прибором. Для возможных предков и потомков посто не существуют соответствующих приборов.
3. Некоторая специфика инициализации. Например, когда мы загружаем некоторую программу в память ПК, у нас уже и все драйвера установлены и все железо настроено. В случае же микроконтроллера, например, конструктор статического класса запускается ДО того, как настроено железо. Соответственно, многие полезные функции на этот момент могут просто не работать. Поэтому зачастую конструктор делают пустым (куда ж без него?), а всю инициализацию пеомещают в метод init() или begin().
4. Программы для МК не выгружаются из памяти, поэтому деструктор часто вообще не нужен. От слова "совсем". Но если хочется - почему нет?
Другими словами: можно - очень многое, но далеко не все из того, что можно, - целесообразно.
Для диалекта С++ Arduino
В природе не существует никакого "диалекта С++ Arduino". В Ардуино-IDE используется совершенно штатный, стандартный компилятор gcc.
Всё, что есть нестандартного, это то, что IDE
1. Вставляет в начало любого файла .ino строку #include <Arduino.h>
2. Собирает по всему файлу .ino все функции, создаёт их объявления и вставляет эти объявления в начало файла (чтобы в программе можно было использовать функции до их определения).
Готовый (после обработки IDE файл называется <также>.ino.cpp - Вы всегда можете на него посмотреть. Далее этот файл уже компилируется самым обычным компилятором C++ - без каких-бы то ни было фокусов.
Вот из этого и исходите,когда у Вас возникнут вопросы.
У Пуха есть полно классов.
Здравствуйте.
Какой вопрос, такой и ответ.
На чём приходилось писать и что вспомнится: Algol, Аналитик, Fortran, PL/I, Pascal, С (разные модификации под среду), Prolog (это язык логического прогаммирования),LISP, Modula, C++ (в основном Borland але Embarc...), JAVA ... ну и до кучи, всякие ассемблеры, начиная от DEC (Digital Equipment Corporation (DEC)...специализированные процессоры... IBM PC...
А Штирлиц неплох.
Ну так знай теперь, что Ардуино использует обычный GCC образца (стандарта) 2011 года по умолчанию. Единственное отличие - STL библиотеки для Дуни никто еще не написал, баловство это.
Здравствуйте.
Спросили, ответил.
C Arduino попросили с детьми позаниматься в рамках http://kvantorium.ru/, вот и готовлюсь. Железо видел только в Internet. Скоро будет какой то мегакомплект.
Здравствуйте.
Пусть Пух приходит, только без занудного и жадного Кролика.
Здравствуйте.
С пунктом
1. не согласен т.к. компилятор (нормальный) генерирует ссылки на методы. При этом затраты памяти не превышают 10% от линейного кода С.
2. абсолютно согласен.
3. - не знаю т.к. с железкой еще не работал, есть только перспектива.
4. все железки построены по принципам архитектур ВМ А.Тьюринга и фон-Неймана т.е. данные и исполняемый код находятся в одном пространстве (если бы это было не так, то написать компьютерный вирус было бы проблематично).Хотя тут есть проблема со сборкой "мусора" как в Java.
Здравствуйте.
Спасибо. Про STL понял.
Так Кролик на форуме не завелся. И да начитать учить детей надо с основ - автоматов. Без них программирование это бег за своим хвостом.
Здравствуйте.
Спорить про диалекты не буду. За всё остальное в ответе, спасибо.
И это очень немало, при 2-2.5КБ ОЗУ.
Вообще же, настораживает ваше высказывание: "C Arduino попросили с детьми позаниматься в рамках http://kvantorium.ru/, вот и готовлюсь. Железо видел только в Internet. Скоро будет какой то мегакомплект."
Рано вам обучать детей робототехнике (или автоматике), если у вас такие вопросы и непонятки. Плохой учитель - хуже отсутствия учителя. Буду рад, если ошиаюсь в этом про вас.
4. все железки построены по принципам архитектур ВМ А.Тьюринга и фон-Неймана т.е. данные и исполняемый код находятся в одном пространстве (если бы это было не так, то написать компьютерный вирус было бы проблематично).
Кстати, можете попытаться написать вирус под микроконтроллер. :) (хотя у ARMов, при разных шинах, адресное пространство общее, и адреса кода и данных не пересекаются. И, кроме того, возможно выполнение кода из RAM. Но это именно для ARMов, тогда как наиболее распространенные модели МК - это AVR)
4. все железки построены по принципам архитектур ВМ А.Тьюринга и фон-Неймана
Вы действительно не видите разницы между машиной Тьринга и архитектурой фон Неймана?
Но, даже если так. Данный микроконтроллер (как Вам уже сказали коллеги) не имеет к фон Нейману никакого отношения.
Здравствуйте.
Надеюсь, что не с теории абстрактных автоматов Миля и Мура надо начинать. :)
Конечно. Согласен. Но не я выбираю.
Отрицание - Кролик нужен форуму, иначе загнуться его (форума) СДНФ и СКНФ. :)
Вообще же, настораживает ваше высказывание: "C Arduino попросили с детьми позаниматься в рамках http://kvantorium.ru/, вот и готовлюсь. Железо видел только в Internet. Скоро будет какой то мегакомплект."
Рано вам обучать детей робототехнике (или автоматике), если у вас такие вопросы и непонятки. Плохой учитель - хуже отсутствия учителя. Буду рад, если ошиаюсь в этом про вас.
2ksv1959: кстати - да.
Скажу больше: Ардуино - это 50% схемотехники и 50% программирования. А если "железо" Вы видели только в И-нете, настоятельно рекомендую подумать прежде, чем давать свое согласие на занятия с детьми.
Здравствуйте.
1. Я не учитель по образованию. Всё больше в "сапогах" (>25). Приказали - сделал.
2. Рано - понятие относительное. Копать отсюда и до обеда, привычное дело.
3. Про Arduino узнал неделю назад.
4. Рад, что на форуме есть люди которые помогут советом... только не на Красной площади.
Ну, Вы в схемотехнике-то разбираетесь? Если да, то и здесь разберётесь. Если нет, то изучайте, практикуйтесь заранее, чтобы каждый чих в тупик не ставил.
Ремарку про "только не на Красной площади" не понял.Это акаой-то армейский фольклёр? Или из анекдота, которого я не знаю?
1. Я не учитель по образованию. Всё больше в "сапогах" (>25). Приказали - сделал.
вы знаете, это очень заметно...
вы знаете, это очень заметно...
+100500
Надеюсь, что не с теории абстрактных автоматов Миля и Мура надо начинать. :)
Так что если у детей есть курс информатики (с основами программирования), то первое, что к нему надо добавить, ориентируясь на Ардуино, это как раз автоматы.
Отрицание - Кролик нужен форуму, иначе загнуться его (форума) СДНФ и СКНФ. :)
Здравствуйте.
Я надеюсь квалификации инженера по радиоэлектронике хватит на 50% схемотехники и 50% программирования. А про подумать... так это моё тайное кредо, мечта всей жизни, но всё время что-то мешает... :)
Современные процессоры это очень сложное устройство, которое выделять на одну задачу очень жирно будет. Разделять задачи методом прерывания это потеря памяти , быстродействия и прочей хрени. Так делят задачи при помощи автоматного моделирования. Вот как раз программирование с помощью автоматов и позволяет экономно распределять ресурсы МК. Но если теоретическая часть теории автоматов всех более менее устраивает, то ее переложение на код , в часности на Ардуину , то тут море вариантов. У меня есть свое видение, у других форумчан свое. Да и Вам рекомендуется найти свой аспект программирования с помощью автоматов в среде Ардуино. Ведь вспомните первоначальный в теме вопрос. Динамические объекты классов. Но объекты чего они будут . Скорее всего автоматов так или иначе. Вот это обычно вы и проглядели.
Я надеюсь квалификации инженера по радиоэлектронике хватит на 50% схемотехники и 50% программирования.
Должно хватить. Удачи Вам!
Пух, ты не кури эту гадость, которую тебе в Секте Святых Бесконечных Автоматов дают. Вырвись уже из сумрака.
Ремарку про "только не на Красной площади" не понял.Это акаой-то армейский фольклёр? Или из анекдота, которого я не знаю?
Бородатый анекдот (не армейский) про армянское радио... Заканчивается так:"Советами замучают."
Свои сообщения надо смотреть вот ТУТ. Находите нужную дату и нажимаете insert, после чего Вас перекидывает в тему на ваше сообщение.
Ну, Вы в схемотехнике-то разбираетесь? Если да, то и здесь разберётесь. Если нет, то изучайте, практикуйтесь заранее, чтобы каждый чих в тупик не ставил.
Ремарку про "только не на Красной площади" не понял.Это акаой-то армейский фольклёр? Или из анекдота, которого я не знаю?
Это из анекдота ))) Вы Евгений Петрович видимо еще юны!
Это из анекдота ))) Вы Евгений Петрович видимо еще юны!
К сожалению, наоборот! Я уже забыл больше, чем некоторые знают :))))
Я тоже обеими руками за Кролика, который освещал бы основы булевой алгебры. Ибо, с моей точки зрения, начинающим программистам не хватает не то чтобы собственно булевой алгебры, но в первую очередь понимания, что такая дисциплина в принципе существует.
А статейку, в "песочницу", слабо?)))))
Это из анекдота ))) Вы Евгений Петрович видимо еще юны!
К сожалению, наоборот! Я уже забыл больше, чем некоторые знают :))))
)))
ноосферу знаниями пополняете?