ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
23 июля
1186831
Argon (12.03.2022 12:47, просмотров: 6255)
Нужна помощь от спецов по C++. В общем, в проекте на основе scmRTOS имеется 7 процессов, размер стека у каждого - с запасом (от 300 до 600). Все нормально работало до тех пор, пока я не внедрил в проект пустой объект-синглтон. 

Вот его объявление:

template<class T>
class SingleTon {
public:
    static T* instance()
    {
        return holder().instance;
    }
protected:
    template<class I>
    struct Holder
    {
        Holder() : instance(new I())
        {
        }

        I* instance;
    };

    static Holder<T> &holder()
    {
        static Holder<T> holder;
        return holder;
    }
};

class Doozer : public SingleTon<Doozer> {

public:

Doozer() = default;

uint8_t can_busOff_counter;

uint8_t can_busy_counter;

uint8_t modules_number;


bool parseCAN() {

return false;

}


};


Так вот, как только в любом из процессов я втыкаю его вызов:

Doozer::instance()->parseCAN();


так все, scmRTOS не выходит за пределы самого высокоприоритетного процесса (в к-ром только OS::sleep(1000) в цикле).


В упор не могу понять, что это за странное поведение и как этот синглтон может влиять.

Компилятор - GCC, оптимизации отключены, размер heap не должен влиять, все динамические выделения памяти убрал.

Даже не представляю, какие еще вводные данные предоставить )