x893 51 5 апреля, 2020 Опубликовано 5 апреля, 2020 · Жалоба В реальности объект WiFi один в программе. То есть можно использовать Singleton pattern, что немного упростит. Но, мне кажется, у ТС ещё больше вопросов будет и форум может не выдержать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
one_eight_seven 6 5 апреля, 2020 Опубликовано 5 апреля, 2020 · Жалоба 2 minutes ago, x893 said: То есть можно использовать Singleton pattern, что немного упростит. Singleton, насколько мне известно, не получилось реализовать на C++ (в том смысле, что для разных реализаций всегда удавалось найти сценарии, где сигнлтон не выполнял свою функцию). Но он мне не нравится, и я за ним особо не следил. А в тех языках, где его можно реализовать, например, java, он и не нужен. Наверное, самый бестолковый шаблон проектирования. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Метценгерштейн 0 5 апреля, 2020 Опубликовано 5 апреля, 2020 · Жалоба 3 minutes ago, x893 said: Но, мне кажется, у ТС ещё больше вопросов будет и форум может не выдержать Очень смешно. Все веселимся от души) Я знаю что такое синглтон. Всем спасибо за консультации, просто линкус и С++- не мое, я там не писатель. Вынужденно этим занимаюсь. На ++ не писал никогда. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 51 5 апреля, 2020 Опубликовано 5 апреля, 2020 · Жалоба Ну это кому как Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 6 апреля, 2020 Опубликовано 6 апреля, 2020 · Жалоба @one_eight_seven, а вы для контроллеров на каком языке пишете? Я по большей части - на плюсах, и как-то так получается, что без синглтонов никуда. Можно использовать подход "как у больших" с динамическим созданием всего-всего и динамическими же связями, но для мелкоконтроллеров это перебор, на мой взгляд. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 15 6 апреля, 2020 Опубликовано 6 апреля, 2020 · Жалоба А чем в плане мелкоконтроллеров синглтон отличается от глобального объекта? (Ну, если не загоняться идеологией :-)). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
one_eight_seven 6 6 апреля, 2020 Опубликовано 6 апреля, 2020 · Жалоба 2 minutes ago, AHTOXA said: А чем в плане мелкоконтроллеров синглтон отличается от глобального объекта? (Ну, если не загоняться идеологией :-)). Наличием встроенного механизма, запрещающего повтроное создание экземпляров данного класса. 51 minutes ago, esaulenka said: Можно использовать подход "как у больших" с динамическим созданием всего-всего и динамическими же связями, но для мелкоконтроллеров это перебор, на мой взгляд. Учитывая, что сигнлтон должен иметь срок жизни - всё время существования приложения, это будет сделано один раз. Но если вы всегда одинаково строите, и каждую новую систему делаете сигнлтоном, и работаете над проектом один - проблем, конечно, не будет. Проблемы начнутся, когда люди начнут реализовывать системы по-разному. 54 minutes ago, esaulenka said: @one_eight_seven, а вы для контроллеров на каком языке пишете? С, ASM для того, что компиляторы не умеют. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 15 6 апреля, 2020 Опубликовано 6 апреля, 2020 · Жалоба 1 час назад, one_eight_seven сказал: Наличием встроенного механизма, запрещающего повтроное создание экземпляров данного класса. Ну, в области мелкоконтроллеров это по большей части идеологическое преимущество. Даже если кто-то создаст два экземпляра объекта UART1, то это приведёт к неработоспособности прошивки и будет обнаружено сразу. А кое-какие накладные расходы синглтон всё же вносит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Axel 1 10 апреля, 2020 Опубликовано 10 апреля, 2020 · Жалоба On 4/6/2020 at 12:55 PM, AHTOXA said: ... это по большей части идеологическое преимущество... ...с вполне реальным практическим аспектом. Например при наличии двух интерфейсов, UART и SPI, используемых "редко", альтернативно и асинхронно несколькими задачами. Возможно не для жесткого реалтайма, но во многих случаях работает (для надежности вкупе с "placement new"). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 15 10 апреля, 2020 Опубликовано 10 апреля, 2020 · Жалоба Можно и без одиночки создать один из двух объектов на куче (ну или в статически выделенной области памяти с placement new - не суть). То, что вы описали - это лишь побочный эффект конкретной реализации синглтона. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
one_eight_seven 6 10 апреля, 2020 Опубликовано 10 апреля, 2020 (изменено) · Жалоба 5 minutes ago, AHTOXA said: То, что вы описали - это лишь побочный эффект конкретной реализации синглтона. Более того, непонятно, причём тут сигнлтон вообще. Синглон - это то, что существует на протяжении всего runtime, и что существует в единственном экземпляре. Причём тут UART и SPI, редкость и асинхронность - вообще непонятно. И что значит "альтернативно используются" - это так, как привыкли наши разработчики - непременно не по назначению? Так и тут непонятно, почему это нельзя сделать без сигнлтона. Изменено 10 апреля, 2020 пользователем one_eight_seven Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Axel 1 10 апреля, 2020 Опубликовано 10 апреля, 2020 · Жалоба 2 hours ago, one_eight_seven said: Более того, непонятно, причём тут сигнлтон вообще. Синглон - это то, что существует на протяжении всего , и что существует в единственном экземпляре. Причём тут UART и SPI, редкость и асинхронность - вообще непонятно. И что значит "альтернативно используются" - это так, как привыкли наши разработчики - непременно не по назначению? Так и тут непонятно, почему это нельзя сделать без сигнлтона. В единственном экземпляре - да, в течение всего runtime - никакими стандартами не требуется. UART и SPI - как пример ситуации (логи направляются либо в терминал, либо на карточку). "Редко" - бОльшую часть времени не используются, поэтому, для экономии памяти, создаются по мере необжодимости. "Асинхронно" - необходимость в доступе может возникнуть в любой момент, в том числе у нескольких задач одновременно. "почему это нельзя сделать без сигнлтона" - можно, но синглтон здесь вполне в тему (в меру моего понимания этой сущности). "вообще непонятно" - надеюсь, теперь в меньшей степени... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
one_eight_seven 6 10 апреля, 2020 Опубликовано 10 апреля, 2020 (изменено) · Жалоба 33 minutes ago, Axel said: В единственном экземпляре - да, в течение всего runtime - никакими стандартами не требуется. UART и SPI - как пример ситуации (логи направляются либо в терминал, либо на карточку). "Редко" - бОльшую часть времени не используются, поэтому, для экономии памяти, создаются по мере необжодимости. "Асинхронно" - необходимость в доступе может возникнуть в любой момент, в том числе у нескольких задач одновременно. "почему это нельзя сделать без сигнлтона" - можно, но синглтон здесь вполне в тему (в меру моего понимания этой сущности). "вообще непонятно" - надеюсь, теперь в меньшей степени... Так тут синглтон вообще вреден. Да, он позволяет быстро показать как идея будет работать. Но в долговременной перспективе он всё портит. Тесты усложняет, масштабируемость убивает. Если вы всё-равно динамически его создаёте и, что важно, - удаляете, то есть решения лучше. Если же вы его не удаляете, то никакой экономии памяти ввиду того, что "редко" нет. Изменено 10 апреля, 2020 пользователем one_eight_seven Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Axel 1 10 апреля, 2020 Опубликовано 10 апреля, 2020 · Жалоба 59 minutes ago, one_eight_seven said: Так тут синглтон вообще вреден. Да, он позволяет быстро показать как идея будет работать. Но в долговременной перспективе он всё портит. Тесты усложняет, масштабируемость убивает. Если вы всё-равно динамически его создаёте и, что важно, - удаляете, то есть решения лучше. Если же вы его не удаляете, то никакой экономии памяти ввиду того, что "редко" нет. Прошу прощения за неполную формулировку - конечно же объекты удаляются. " в долговременной перспективе" никакого негатива не отмечено. "есть решения лучше" - приму совет с благодарностью. PS: Если объекты альтернативны, то для них, как правило, возможно определение общего интерфейса. И Instance именно этого интерфейса используется для обращения к синглтону. И кстати placement new для таких ситуаций в мелкоформатных embedded приложениях - один из гарантов спокойной жизни. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
one_eight_seven 6 10 апреля, 2020 Опубликовано 10 апреля, 2020 · Жалоба Что вы называете интерфейсом? В c++ этим словом, как правило, называют абстрактные базовые классы. Их инстанциировать не получится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться