在 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 的实例,因为所有成员都是静态的。
我实际上是在 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 的实例,因为所有成员都是静态的。