Обсуждаем контроллеры компании Atmel.
Ответить

Re: Как поместить цикл в case оператора switch

Пн ноя 28, 2022 12:48:10

Ха, а вот если действительно хотите прикольную фичу, тогда используйте возможности конструктора класса в С++, поместив в него код инициализации этих ваших входов, выходов или еще чего. И тогда при создании экземпляра класса код инициализации выполнится автоматически. Если объект поместите в глобальную область видимости, то код инициализации будет выполнен еще до входа в main, в точке создания статических конструкторов. Так что вы даже и не увидите инита и уж точно не забудете его сделать :) Конечно, если не забудете написать конструктор класса.
Конструктор класса в этом смысле аналогичен case 0 в показанном примере.
Хотя идеология С++ довольно сильно переворачивает прежние привычки от Си.

Re: Как поместить цикл в case оператора switch

Пн ноя 28, 2022 13:49:36

Исходим из того, что имеем на руках сейчас.

Re: Как поместить цикл в case оператора switch

Пн ноя 28, 2022 14:31:51

Для адуринок конструктор класса и блок инициализации как бы "стандартные" элементы программы(именуемой СКОТчем)...
8)

Re: Как поместить цикл в case оператора switch

Пн ноя 28, 2022 18:31:21

Я совсем не знаток Ардуины, но то, что приходилось видеть мало похоже на то, за что я соппсна имею вам сказать :) Видел я в основном статические методы или же пресловутый setup() для нужд инита. Я же говорю именно о конструкторе класса, вот так:
Код:
class Keyboard{
public:
  Keyboad() {/* ТУТ инициализация */ }

при этом вложенные и/или наследованные классы так же будут вызывать свои конструкторы в обратном порядке (начиная с самого глубокого по иерархии) и инициализовывать всё вплоть до входных пинов от одного только создания объедка клавы.
Это как бы к вопросу "автоматической инициализации чтобы не забыть".
И если в С++ это реализовано достаточно автоматически, то перенос такого поведения на обычный Си неудобен и требует частой копипасты. Точно так же можно забыть написать инкремент переменной в switch после инита или промахнуться с циферкой в case,

Re: Как поместить цикл в case оператора switch

Вт ноя 29, 2022 11:56:13

Инициализация железа в конструкторах глобальных объектов плохая практика. Последовательность вызова таких конструкторов не определена, а для железа это важно. Это одна из возможностей плюсов, которой в эмбедде не надо пользоваться. Лучше сделать метод Init() и вызывать ровно в тот момент когда требуется.

Re: Как поместить цикл в case оператора switch

Вт ноя 29, 2022 12:11:20

У ардуино IDE вызов конструкторов билиотек обязателен в setup разделе скотча.
8)

Re: Как поместить цикл в case оператора switch

Вт ноя 29, 2022 12:30:49

Что-то у вас смешались в кучу...
- ардуино IDE. Это всего лишь инструмент разработки. Ей должно быть фиолетово на конструкторы классов.
- конструкторы библиотек. Это что за зверь? Как это связано с конструторами классов?
- setup раздел. Что это и когда выполняется? Как связан с конструкторами классов?

Re: Как поместить цикл в case оператора switch

Вт ноя 29, 2022 14:04:02

ардуино IDE лишь оболочка, но со своими правилами
конструктор, используемый для дальнейшего применения библиотеки (без него библиотека неработоспособна)
сами библиотеки в большинстве случаев содержат описания классов - как уж "по ученому" это обозвать... но есть факт.
"ученые КОТЫ" самой IDE и ее использованию пока что весьма мало внимания уделяли (в отличии от классических сред/компиляторов типа авр студио, GCC или мплаба) так что... даже правила самостоятельного написания прикладных библиотечек там приходится "изобретать" - тем более, что возможно применение и "смешанного варианта" из дополнительных файлов в самой папке проекта как в Си так и в С++ стиле, правда с обрамлением в дополнительные шаблоны(опять же особенности IDE)...
у так называемого скотча два раздела(функции) - один выполняемый однократно имеет название setup, другой - аналог Сишного main, именуется loop
Собственно смотрим устройство и работу с данной IDE. Там помимо явно видимого пользователем еще кучка скрытых добавок используется.
:roll:
Последний раз редактировалось BOB51 Вт ноя 29, 2022 14:19:29, всего редактировалось 1 раз.

Re: Как поместить цикл в case оператора switch

Вт ноя 29, 2022 14:16:12

В Arduino IDE пишите как в Amtel Studio. Компилируется, работает на 100%.
Это просто свободный IDE и компилятор, с возможностями того, из чего оно получено.
(Кое-где со своей особенности: конструкцией, именами функций и операндами).
Вложения
Untitled-1.jpg
(89.94 KiB) Скачиваний: 22

Re: Как поместить цикл в case оператора switch

Вт ноя 29, 2022 14:30:57

Мы здесь имеем ввиду понятие "конструктор класса в языке С++", который представляет собой функцию, записанную с тем же именем, что и класс, и вызываемый программным кодом автоматически в момент создания экземпляра класса. Если конструктор явно не прописан, то вызовется дефолтный скрытый конструктор. Конструктор класса чаще всего используется для инициализации переменных класса, ну и для некоторых других действий типа выделения памяти из кучи для нужд объекта. А иногда можно инициализовать и железо. Правда, как заметилVladislavS, это не всегда может давать правильный результат.

Re: Как поместить цикл в case оператора switch

Вт ноя 29, 2022 14:33:25

veso74
Это если проект только одним файлом ограничивается.
А вот если добавлять свои с выносом туда отдельной части и/или пытаться сделать тот же драйверок к "нестандартному" дисплейчику (или какой "умной микросхеме периферии") вот там и начинаются "мелочи", которые в имеющейся ширпотреб. литературе практически не разжевывались.
С учетом того, что практически все примеры для С++ в литературе даны под работу с ПК, а не с МК... довольно печальная ситуация получается. Оттуда и недооценка данной IDE и ее возможностей.
Пока что самостоятельно "учебны эксперименты" делать приходится для проверки всех возможных правил и особенностей работы с адуринками (те же "учебные игрушки" из viewtopic.php?p=4261084#p4261084 и viewtopic.php?p=4267316#p4267316 к примеру)...
:sleep:
Но это уже тематика моей КОТУИНКИ, а не данного раздела - будет интерес обсудить - топаем туда.
:beer:

Re: Как поместить цикл в case оператора switch

Вт ноя 29, 2022 14:41:33

Проекты с полу-чужим кодом всегда обречены на детальную переделку. Запросы: код лучше быть универсальным, не хотим сами его писать (нет на это времени), код должен занимать мало места в памяти, а расчет должен быть быстрым ... все противоречивые вещи.
Ответить