Ха, а вот если действительно хотите прикольную фичу, тогда используйте возможности конструктора класса в С++, поместив в него код инициализации этих ваших входов, выходов или еще чего. И тогда при создании экземпляра класса код инициализации выполнится автоматически. Если объект поместите в глобальную область видимости, то код инициализации будет выполнен еще до входа в main, в точке создания статических конструкторов. Так что вы даже и не увидите инита и уж точно не забудете его сделать Конечно, если не забудете написать конструктор класса. Конструктор класса в этом смысле аналогичен case 0 в показанном примере. Хотя идеология С++ довольно сильно переворачивает прежние привычки от Си.
Я совсем не знаток Ардуины, но то, что приходилось видеть мало похоже на то, за что я соппсна имею вам сказать Видел я в основном статические методы или же пресловутый setup() для нужд инита. Я же говорю именно о конструкторе класса, вот так:
Код:
class Keyboard{ public: Keyboad() {/* ТУТ инициализация */ }
при этом вложенные и/или наследованные классы так же будут вызывать свои конструкторы в обратном порядке (начиная с самого глубокого по иерархии) и инициализовывать всё вплоть до входных пинов от одного только создания объедка клавы. Это как бы к вопросу "автоматической инициализации чтобы не забыть". И если в С++ это реализовано достаточно автоматически, то перенос такого поведения на обычный Си неудобен и требует частой копипасты. Точно так же можно забыть написать инкремент переменной в switch после инита или промахнуться с циферкой в case,
Инициализация железа в конструкторах глобальных объектов плохая практика. Последовательность вызова таких конструкторов не определена, а для железа это важно. Это одна из возможностей плюсов, которой в эмбедде не надо пользоваться. Лучше сделать метод Init() и вызывать ровно в тот момент когда требуется.
Что-то у вас смешались в кучу... - ардуино IDE. Это всего лишь инструмент разработки. Ей должно быть фиолетово на конструкторы классов. - конструкторы библиотек. Это что за зверь? Как это связано с конструторами классов? - setup раздел. Что это и когда выполняется? Как связан с конструкторами классов?
ардуино IDE лишь оболочка, но со своими правилами конструктор, используемый для дальнейшего применения библиотеки (без него библиотека неработоспособна) сами библиотеки в большинстве случаев содержат описания классов - как уж "по ученому" это обозвать... но есть факт. "ученые КОТЫ" самой IDE и ее использованию пока что весьма мало внимания уделяли (в отличии от классических сред/компиляторов типа авр студио, GCC или мплаба) так что... даже правила самостоятельного написания прикладных библиотечек там приходится "изобретать" - тем более, что возможно применение и "смешанного варианта" из дополнительных файлов в самой папке проекта как в Си так и в С++ стиле, правда с обрамлением в дополнительные шаблоны(опять же особенности IDE)... у так называемого скотча два раздела(функции) - один выполняемый однократно имеет название setup, другой - аналог Сишного main, именуется loop Собственно смотрим устройство и работу с данной IDE. Там помимо явно видимого пользователем еще кучка скрытых добавок используется.
Последний раз редактировалось BOB51 Вт ноя 29, 2022 14:19:29, всего редактировалось 1 раз.
В Arduino IDE пишите как в Amtel Studio. Компилируется, работает на 100%. Это просто свободный IDE и компилятор, с возможностями того, из чего оно получено. (Кое-где со своей особенности: конструкцией, именами функций и операндами).
Мы здесь имеем ввиду понятие "конструктор класса в языке С++", который представляет собой функцию, записанную с тем же именем, что и класс, и вызываемый программным кодом автоматически в момент создания экземпляра класса. Если конструктор явно не прописан, то вызовется дефолтный скрытый конструктор. Конструктор класса чаще всего используется для инициализации переменных класса, ну и для некоторых других действий типа выделения памяти из кучи для нужд объекта. А иногда можно инициализовать и железо. Правда, как заметилVladislavS, это не всегда может давать правильный результат.
veso74 Это если проект только одним файлом ограничивается. А вот если добавлять свои с выносом туда отдельной части и/или пытаться сделать тот же драйверок к "нестандартному" дисплейчику (или какой "умной микросхеме периферии") вот там и начинаются "мелочи", которые в имеющейся ширпотреб. литературе практически не разжевывались. С учетом того, что практически все примеры для С++ в литературе даны под работу с ПК, а не с МК... довольно печальная ситуация получается. Оттуда и недооценка данной IDE и ее возможностей. Пока что самостоятельно "учебны эксперименты" делать приходится для проверки всех возможных правил и особенностей работы с адуринками (те же "учебные игрушки" из viewtopic.php?p=4261084#p4261084 и viewtopic.php?p=4267316#p4267316 к примеру)... Но это уже тематика моей КОТУИНКИ, а не данного раздела - будет интерес обсудить - топаем туда.
Проекты с полу-чужим кодом всегда обречены на детальную переделку. Запросы: код лучше быть универсальным, не хотим сами его писать (нет на это времени), код должен занимать мало места в памяти, а расчет должен быть быстрым ... все противоречивые вещи.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 33
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения