Jump to content

    
Sign in to follow this  
Метценгерштейн

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

Recommended Posts

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

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

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

Share this post


Link to post
Share on other sites
2 minutes ago, x893 said:

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

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

Share this post


Link to post
Share on other sites
3 minutes ago, x893 said:

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

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

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

Share this post


Link to post
Share on other sites

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

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

 

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

Share this post


Link to post
Share on other sites
2 minutes ago, AHTOXA said:

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

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

51 minutes ago, esaulenka said:

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

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

54 minutes ago, esaulenka said:

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

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

Share this post


Link to post
Share on other sites
1 час назад, one_eight_seven сказал:

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

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

Share this post


Link to post
Share on other sites
On 4/6/2020 at 12:55 PM, AHTOXA said:

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
5 minutes ago, AHTOXA said:

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

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

Edited by one_eight_seven

Share this post


Link to post
Share on other sites
2 hours ago, one_eight_seven said:

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

 

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

Share this post


Link to post
Share on other sites
33 minutes ago, Axel said:

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

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

Edited by one_eight_seven

Share this post


Link to post
Share on other sites
59 minutes ago, one_eight_seven said:

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

 

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

PS:

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

Share this post


Link to post
Share on other sites

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

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this