在 ESP8266 的不同任务中使用 class - CPP

Use class in differents task on ESP8266 - CPP

我实际上是在 esp8266 上编程。 我正在使用多任务处理,我想从任何任务中访问 class。 关于我正在使用 PlatFormIO 的建筑,所以我不管理建筑。

这是我的 main.cpp 文件:

#include "HackQuarium.h"

class LedShowTask : public Task {
public:
    void loop() {
        // some stuff
    }
} ledShowTask;


class WeatherTask : public Task {
public:
    void loop() {
        // some stuff
    }
} weatherTask;

class LightTask : public Task {
public:
    void loop() {
        // some stuff
    }
} lightTask;

void setup() {
    Serial.begin(115200);
    Scheduler.start(&ledShowTask);
    Scheduler.start(&weatherTask);
    Scheduler.start(&lightTask);
    Serial.println(F("SETUP"));
    Scheduler.begin();
}

这是我的 class,它在 HackQuarium.h 文件中:

class AllStaticData {
    public:
        static t_API_current_weather    currentWeather;
        static t_HackQuarium_data       hackQuariumData;
};

我想我需要为我的 class 创建一个“全局”实例以从我的所有任务中访问它,但我不知道如何去做。

如果我在我的 setup() 函数中创建一个实例,我看不到如何在我的任务中传递它:/

谢谢你

在我看来,您声明了静态属性,但没有定义它们。应该是:

File.h

class AllStaticData {
    public:
        t_API_current_weather   currentWeather;
        t_HackQuarium_data      hackQuariumData;
};

File.cpp

t_API_current_weather AllStaticData::currentWeather;
t_HackQuarium_data AllStaticData::hackQuariumData;

您还可以在定义这两个时调用所需的构造函数:

//using some example variable
std::string X_class::value("Hello");

编辑: 你的 class 应该有一个 .h 文件和一个 .cpp 文件;在 .cpp 中包含 .h 并在任何函数外定义静态变量

但是: 您希望从某些并行任务访问静态数据成员,因此您不必创建 class 的实例,只需使用 class 的名称访问成员即可。是的,您需要同步访问以避免一些任务读取而另一个任务写入。

您的问题不在于传递 class 的实例,因为所有成员都是静态的。