-
- Б-б-блин... Включил небольшую оптимизацию и как будто ожило. Как это может быть и что делать дальше? Радоваццо или продолжать искать причину глюка? - Argon(13.03.2022 23:15)
- А это точно синглтон ? Tyмблep(608 знак., 13.03.2022 21:32 - 21:45, ссылка)
- Отредактируй, чтобы было читабельно, иначе снесу - MBedder(13.03.2022 21:34)
- Пытаюсь. Не очень получается - Tyмблep(13.03.2022 21:36)
- Форматирование немного через одно место делается Argon(1 знак., 13.03.2022 21:39, ссылка)
- Пытаюсь. Не очень получается - Tyмблep(13.03.2022 21:36)
- По сути это то же, что и у меня. Проверка есть, см. вариант ниже Argon(117 знак., 13.03.2022 21:34, ссылка)
- Можно ли, по-отлаживаясь узнать Tyмблep(67 знак., 14.03.2022 12:38)
- Конечно, конструктор раньше вызывается. Причем только один раз (первый). - Argon(14.03.2022 12:44)
- Тогда это значит, что косяк где-то раньше. Tyмблep(358 знак., 13.03.2022 21:47)
- Можно ли, по-отлаживаясь узнать Tyмблep(67 знак., 14.03.2022 12:38)
- Отредактируй, чтобы было читабельно, иначе снесу - MBedder(13.03.2022 21:34)
- А если заменить код вот на такой, без наследования: evgeniy1294(286 знак., 12.03.2022 14:43)
- Попробую, когда (и если) проц оживет. Я подозреваю, что причиной
всему - сдыхание МК, но надеюсь, что это не так. Затереться до дыр
вроде еще не должен был. - Argon(12.03.2022 14:58)
- Проц ожил. Без наследования - все то же самое. Т.е. по какой-то
причине, переключение контекста scmRTOS прекращает работать.
Видимо, придется в недрах оси лазить, блин... - Argon(12.03.2022 16:24)
- А если отказаться от динамического выделения памяти? Просто
использовать статический объект в глобальном пространстве имён? - evgeniy1294(12.03.2022 18:38)
- Тогда работает, но это не то, чего хотелось бы. Что-то явно не то с
распределением памяти, а что - не могу понять. - Argon(12.03.2022 18:52)
- Вот, уже теплее. Нужно изучить принцип работы аллокатора - должна
быть реализация в стандартной библиотеке системы. Возможно, что-то
есть в документации на ОС. - evgeniy1294(12.03.2022 20:20)
- Если я верно понял о чем речь, то в ОС нет какого-то специального
аллокатора - все объекты/процессы размещаются статически на этапе
компиляции. Стало быть проблема - в стеке? Argon(580 знак., 13.03.2022 18:20)
- У вас ошибки при использовании static. Попробую пояснить. В функции
instance() используется переменная doozer, которая объявлена static
относительно функции, а не класса. Объявите её внутри класса,
допустим в секции class Doozer { public: static Doozer* doozer; ...
}; А потом где-нибудь в .CPP: Doozer::doozer = nullptr; - Costic(13.03.2022 18:58)
- Я ведь написал, что не видится эта перменная, если ее объявить вне
функции instance(). Почему так - не знаю. Argon(313 знак., 13.03.2022 19:07)
- А нельзя ли в лоб обратиться в instance() { if (Doozer::doozer)
Doozer::doozer = new Doozer();??? 1) default конструктор очень
нужен? он же как-то хитро с инициализацией связан. 2)
Doozer::doozer = nullptr; надо бы объявить. - Costic(13.03.2022 19:38)
- Неа, внутри instance() Doozer::doozer тоже не видится, если его
объявить вне instance(). Argon(377 знак., 13.03.2022 19:48)
- Doozer::doozer = nullptr без этого линкер не соберёт. Определить в
любом исходнике, как глобальную переменную, например рядом с
main(). Я проверил на gcc (mingw) - всё компилируется. - Costic(13.03.2022 20:12)
- Ну вот еще не хватало глобальную переменную заводить... Этот
указатель вообще не должен быть виден нигде кроме как внутри класса
Doozer. - Argon(13.03.2022 20:16)
- Статические переменные-члены класса так и работают. Видимость
глобальная, доступ через ::. - Costic(13.03.2022 20:40)
- я хотел сказать, что по идее она должна быть вообще в секции
private класса - Argon(13.03.2022 21:02)
- который раз замечаю - программеры Си бодаются с целевой задачей, и
все вопросы соответствующие. а программисты Си++ бодаются с самим
языком, и практически никогда - с целевой задачей. - Mahagam(13.03.2022 22:01)
- Золотые слова. - AndreasW(13.03.2022 22:10)
- пасиб за комплимент, я на C++ вообще, можно сказать, впервые пишу ) - Argon(13.03.2022 22:04)
- это не комплимент, а как бы наоборот :-) - SciFi(13.03.2022 22:09)
- назвать "программистом C++" - это мегакомплимент )) - Argon(13.03.2022 22:25)
- это не комплимент, а как бы наоборот :-) - SciFi(13.03.2022 22:09)
- который раз замечаю - программеры Си бодаются с целевой задачей, и
все вопросы соответствующие. а программисты Си++ бодаются с самим
языком, и практически никогда - с целевой задачей. - Mahagam(13.03.2022 22:01)
- я хотел сказать, что по идее она должна быть вообще в секции
private класса - Argon(13.03.2022 21:02)
- Статические переменные-члены класса так и работают. Видимость
глобальная, доступ через ::. - Costic(13.03.2022 20:40)
- Ну вот еще не хватало глобальную переменную заводить... Этот
указатель вообще не должен быть виден нигде кроме как внутри класса
Doozer. - Argon(13.03.2022 20:16)
- Doozer::doozer = nullptr без этого линкер не соберёт. Определить в
любом исходнике, как глобальную переменную, например рядом с
main(). Я проверил на gcc (mingw) - всё компилируется. - Costic(13.03.2022 20:12)
- Неа, внутри instance() Doozer::doozer тоже не видится, если его
объявить вне instance(). Argon(377 знак., 13.03.2022 19:48)
- А нельзя ли в лоб обратиться в instance() { if (Doozer::doozer)
Doozer::doozer = new Doozer();??? 1) default конструктор очень
нужен? он же как-то хитро с инициализацией связан. 2)
Doozer::doozer = nullptr; надо бы объявить. - Costic(13.03.2022 19:38)
- Я ведь написал, что не видится эта перменная, если ее объявить вне
функции instance(). Почему так - не знаю. Argon(313 знак., 13.03.2022 19:07)
- У вас ошибки при использовании static. Попробую пояснить. В функции
instance() используется переменная doozer, которая объявлена static
относительно функции, а не класса. Объявите её внутри класса,
допустим в секции class Doozer { public: static Doozer* doozer; ...
}; А потом где-нибудь в .CPP: Doozer::doozer = nullptr; - Costic(13.03.2022 18:58)
- Если я верно понял о чем речь, то в ОС нет какого-то специального
аллокатора - все объекты/процессы размещаются статически на этапе
компиляции. Стало быть проблема - в стеке? Argon(580 знак., 13.03.2022 18:20)
- Вот, уже теплее. Нужно изучить принцип работы аллокатора - должна
быть реализация в стандартной библиотеке системы. Возможно, что-то
есть в документации на ОС. - evgeniy1294(12.03.2022 20:20)
- Тогда работает, но это не то, чего хотелось бы. Что-то явно не то с
распределением памяти, а что - не могу понять. - Argon(12.03.2022 18:52)
- А если отказаться от динамического выделения памяти? Просто
использовать статический объект в глобальном пространстве имён? - evgeniy1294(12.03.2022 18:38)
- Проц ожил. Без наследования - все то же самое. Т.е. по какой-то
причине, переключение контекста scmRTOS прекращает работать.
Видимо, придется в недрах оси лазить, блин... - Argon(12.03.2022 16:24)
- Попробую, когда (и если) проц оживет. Я подозреваю, что причиной
всему - сдыхание МК, но надеюсь, что это не так. Затереться до дыр
вроде еще не должен был. - Argon(12.03.2022 14:58)
- Хм... Проц перестал видеться ст-линком. Может сдох постепенно? Такое бывает? - Argon(12.03.2022 14:01)
- Нестатические объекты в стеке создаются. Либо в куче (через New).
Данный объект создаётся в стеке. - Mebius(12.03.2022 12:53)
- Ну по сути это единственный объект, создаваемый в куче. Минимальный
размер кучи установлен 0x1000. Т.е. проблема где-то не в этом. - Argon(12.03.2022 12:56)
- Судя по этому: Mebius(71 знак., 12.03.2022 13:14)
- не-не, см. class Singleton. Там "Holder() : instance(new I())".
Т.е. объект создается через new, стало быть в куче. Argon(111 знак., 12.03.2022 13:38)
- Singleton - это правильный класс :)) --> MBedder(1 знак., 12.03.2022 13:46, картинка)
- Вот! - Kpoк(12.03.2022 13:54)
- Singleton - это правильный класс :)) --> MBedder(1 знак., 12.03.2022 13:46, картинка)
- не-не, см. class Singleton. Там "Holder() : instance(new I())".
Т.е. объект создается через new, стало быть в куче. Argon(111 знак., 12.03.2022 13:38)
- Судя по этому: Mebius(71 знак., 12.03.2022 13:14)
- Ну по сути это единственный объект, создаваемый в куче. Минимальный
размер кучи установлен 0x1000. Т.е. проблема где-то не в этом. - Argon(12.03.2022 12:56)