Перейти к содержанию
    

ошибка при компиляции С++

В реальности объект WiFi один в программе.

То есть можно использовать Singleton pattern, что немного упростит.

Но, мне кажется, у ТС ещё больше вопросов будет и форум может не выдержать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 minutes ago, x893 said:

То есть можно использовать Singleton pattern, что немного упростит.

Singleton, насколько мне известно, не получилось реализовать на C++ (в том смысле, что для разных реализаций всегда удавалось найти сценарии, где сигнлтон не выполнял свою функцию). Но он мне не нравится, и я за ним особо не следил. А в тех языках, где его можно реализовать, например, java, он и не нужен. Наверное, самый бестолковый шаблон проектирования.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 minutes ago, x893 said:

Но, мне кажется, у ТС ещё больше вопросов будет и форум может не выдержать

Очень смешно. Все веселимся от души) Я знаю что такое синглтон.

Всем спасибо за консультации, просто линкус и С++- не мое, я там не писатель. Вынужденно этим занимаюсь. На ++ не писал никогда.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@one_eight_seven, а вы для контроллеров на каком языке пишете?

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

 

Можно использовать подход "как у больших" с динамическим созданием всего-всего и динамическими же связями, но для мелкоконтроллеров это перебор, на мой взгляд.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А чем в плане мелкоконтроллеров синглтон отличается от глобального объекта? (Ну, если не загоняться идеологией :-)).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 minutes ago, AHTOXA said:

А чем в плане мелкоконтроллеров синглтон отличается от глобального объекта? (Ну, если не загоняться идеологией :-)).

Наличием встроенного механизма, запрещающего повтроное создание экземпляров данного класса.

51 minutes ago, esaulenka said:

Можно использовать подход "как у больших" с динамическим созданием всего-всего и динамическими же связями, но для мелкоконтроллеров это перебор, на мой взгляд.

Учитывая, что сигнлтон должен иметь срок жизни - всё время существования приложения, это будет сделано один раз.
Но если вы всегда одинаково строите, и каждую новую систему делаете сигнлтоном, и работаете над проектом один - проблем, конечно, не будет.
Проблемы начнутся, когда люди начнут реализовывать системы по-разному.

54 minutes ago, esaulenka said:

@one_eight_seven, а вы для контроллеров на каком языке пишете?

С, ASM для того, что компиляторы  не умеют.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, one_eight_seven сказал:

Наличием встроенного механизма, запрещающего повтроное создание экземпляров данного класса. 

Ну, в области мелкоконтроллеров это по большей части идеологическое преимущество. Даже если кто-то создаст два экземпляра объекта UART1, то это приведёт к неработоспособности прошивки и будет обнаружено сразу. А кое-какие накладные расходы синглтон всё же вносит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 4/6/2020 at 12:55 PM, AHTOXA said:

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

...с вполне реальным практическим аспектом. Например при наличии двух интерфейсов, UART и SPI, используемых "редко", альтернативно и асинхронно несколькими задачами. Возможно не для жесткого реалтайма, но во многих случаях работает (для надежности вкупе с "placement new").

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно и без одиночки создать один из двух объектов на куче (ну или в статически выделенной области памяти с placement new - не суть). То, что вы описали - это лишь побочный эффект конкретной реализации синглтона.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 minutes ago, AHTOXA said:

То, что вы описали - это лишь побочный эффект конкретной реализации синглтона.

Более того, непонятно, причём тут сигнлтон вообще.
Синглон - это то, что существует на протяжении всего runtime, и что существует в единственном экземпляре.
Причём тут UART и SPI, редкость и асинхронность - вообще непонятно. И что значит "альтернативно используются" - это так, как привыкли наши разработчики - непременно не по назначению? Так и тут непонятно, почему это нельзя сделать без сигнлтона.

Изменено пользователем one_eight_seven

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, one_eight_seven said:

Более того, непонятно, причём тут сигнлтон вообще.
Синглон - это то, что существует на протяжении всего , и что существует в единственном экземпляре.
Причём тут UART и SPI, редкость и асинхронность - вообще непонятно. И что значит "альтернативно используются" - это так, как привыкли наши разработчики - непременно не по назначению? Так и тут непонятно, почему это нельзя сделать без сигнлтона.

 

В единственном экземпляре - да, в течение всего runtime - никакими стандартами не требуется.  UART и SPI - как пример ситуации (логи направляются либо в терминал, либо на карточку). "Редко" - бОльшую часть времени не используются, поэтому, для экономии памяти, создаются по мере необжодимости. "Асинхронно" - необходимость в доступе может возникнуть в любой момент, в том числе у нескольких задач одновременно. "почему это нельзя сделать без сигнлтона" - можно, но синглтон здесь вполне в тему (в меру моего понимания этой сущности). "вообще непонятно" - надеюсь, теперь в меньшей степени...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

33 minutes ago, Axel said:

В единственном экземпляре - да, в течение всего runtime - никакими стандартами не требуется.  UART и SPI - как пример ситуации (логи направляются либо в терминал, либо на карточку). "Редко" - бОльшую часть времени не используются, поэтому, для экономии памяти, создаются по мере необжодимости. "Асинхронно" - необходимость в доступе может возникнуть в любой момент, в том числе у нескольких задач одновременно. "почему это нельзя сделать без сигнлтона" - можно, но синглтон здесь вполне в тему (в меру моего понимания этой сущности). "вообще непонятно" - надеюсь, теперь в меньшей степени...

Так тут синглтон вообще вреден. Да, он позволяет быстро показать как идея будет работать. Но в долговременной перспективе он всё портит. Тесты усложняет, масштабируемость убивает. Если вы всё-равно динамически его создаёте и, что важно, - удаляете, то есть решения лучше.
Если же вы его не удаляете, то никакой экономии памяти ввиду того, что "редко" нет.

Изменено пользователем one_eight_seven

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

59 minutes ago, one_eight_seven said:

Так тут синглтон вообще вреден. Да, он позволяет быстро показать как идея будет работать. Но в долговременной перспективе он всё портит. Тесты усложняет, масштабируемость убивает. Если вы всё-равно динамически его создаёте и, что важно, - удаляете, то есть решения лучше.
Если же вы его не удаляете, то никакой экономии памяти ввиду того, что "редко" нет.

 

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

PS:

Если объекты альтернативны, то для них, как правило, возможно определение общего интерфейса. И Instance именно этого интерфейса используется для обращения к синглтону. И кстати placement new для таких ситуаций в мелкоформатных embedded приложениях - один из гарантов спокойной жизни.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что вы называете интерфейсом?
В c++ этим словом, как правило, называют абстрактные базовые классы. Их инстанциировать не получится.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...