У меня есть рабочий пример, однако я не уверен, что делаю это правильно. Я использую Arduino Lib для обработки циклического буфера в этом случае, и я хотел бы обернуть его в класс Singleton в моем проекте, так как я буду взаимодействовать с классом во многих местах проекта.
Вот мой MRE:
main.cpp:
void loop() {
Buffer *myBuffer = Buffer::getInstance();
Ticker bufUpdate;
bufUpdate.attach(1, [myBuffer](){ myBuffer->update(); });
while (true) {
yield();
}
}
buffer.h:
class Buffer {
private:
// Singleton Declarations
static Buffer *single;
Buffer() {}
// Other Declarations
int randVal();
void start();
CircularBuffer<float, 400> samples;
public:
// Singleton Declarations
static Buffer* getInstance();
~Buffer() {single = NULL;};
// Other Declarations
void update();
};
и buffer.cpp:
Buffer* Buffer::single = NULL;
Buffer* Buffer::getInstance() {
if (!single) {
single = new Buffer();
single->start();
}
return single;
}
int Buffer::randVal() {
return random(0, 254);
}
void Buffer::update() {
int value = single->randVal();
samples.push(value);
// Do other stuff here ...
}
Это работает, как ожидалось, но я не уверен, что это правильно. Мой опыт в этом проекте пока что мои «корни» могут выглядеть хорошо, но позже я понимаю, что у меня был недостаток, поэтому я ищу помощь.