繁体   English   中英

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

[英]Use class in differents task on ESP8266 - CPP

我实际上是在 esp8266 上编程。 我正在使用多任务处理,我想从任何任务访问一个类。 关于我正在使用 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();
}

这是我在 HackQuarium.h 文件中的类:

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

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

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

谢谢

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

文件.h

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

文件.cpp

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

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

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

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

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

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

如果我声明:

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

在设置功能中,VSCode 告诉我“未经授权的限定名称”。 如果我在任何函数 VSCode 之外声明它,请告诉我“不能在其类之外定义非静态数据成员”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM