ESP8266 + aRest 运行 内存不足并重启
ESP8266 + aRest running out of memory and rebooting
我正在使用 aREST 和 ESP8266 我只是想创建一个个性化的方法来保存客户的请求,直到给出一个动作。但是,一个简单的 while(true) 会立即重启开发板。
知道为什么个性化功能中的此类块会重启我的 ESP8622 吗?还有其他方法可以完成吗?
int receiveCommand(String command){
int timeStart = millis();
while(true){
//My code goes here
//Waits for action during TIMEOUT seconds then breaks this loop and
//Returns something suitable to the client
if((millis() - timeStart) > TIMEOUT){
return 0;
}
}
return 1;
}
esp 是单线程微控制器。这意味着它一次只能做一件事。它必须 运行 您的程序以及所有 wifi/ip 堆栈。
在这里,您的 while 循环基本上一直在旋转,没有将控制权交还给微控制器以执行其他操作(例如 wifi 处理)。
esp 被设计为在主程序变得不负责任时重新启动。这基本上就是您正在创建的内容:esp 不再负责,因为它在无限循环。
esp 框架有一个事件方法来执行操作而不阻塞正常操作。你应该看看那个并调整你的程序以避免在你的代码中阻塞 esp。
我正在使用 aREST 和 ESP8266 我只是想创建一个个性化的方法来保存客户的请求,直到给出一个动作。但是,一个简单的 while(true) 会立即重启开发板。
知道为什么个性化功能中的此类块会重启我的 ESP8622 吗?还有其他方法可以完成吗?
int receiveCommand(String command){
int timeStart = millis();
while(true){
//My code goes here
//Waits for action during TIMEOUT seconds then breaks this loop and
//Returns something suitable to the client
if((millis() - timeStart) > TIMEOUT){
return 0;
}
}
return 1;
}
esp 是单线程微控制器。这意味着它一次只能做一件事。它必须 运行 您的程序以及所有 wifi/ip 堆栈。
在这里,您的 while 循环基本上一直在旋转,没有将控制权交还给微控制器以执行其他操作(例如 wifi 处理)。
esp 被设计为在主程序变得不负责任时重新启动。这基本上就是您正在创建的内容:esp 不再负责,因为它在无限循环。
esp 框架有一个事件方法来执行操作而不阻塞正常操作。你应该看看那个并调整你的程序以避免在你的代码中阻塞 esp。