如何修复大师冥想错误:核心 1 恐慌(禁止加载)错误



我正在尝试为ESP32芯片编写代码,它从DHT22传感器读取数据,将其打包到json文件中,然后将其发送到Flask服务器。一切都很好,直到我尝试POST,在那里我得到了以下错误:

Guru Meditation Error: Core  1 panic'ed (LoadProhibited). Exception was unhandled.
Core 1 register dump:
PC      : 0x400d3488  PS      : 0x00060030  A0      : 0x800d355c  A1      : 0x3ffb1bb0  
A2      : 0x00000000  A3      : 0x3ffb1bff  A4      : 0x00000001  A5      : 0x00000001  
A6      : 0x00000000  A7      : 0x00000000  A8      : 0x00000000  A9      : 0x00000000  
A10     : 0x00000000  A11     : 0x3ffcb8fc  A12     : 0x00000050  A13     : 0x00000001  
A14     : 0x00000000  A15     : 0x00000000  SAR     : 0x0000000a  EXCCAUSE: 0x0000001c  
EXCVADDR: 0x00000008  LBEG    : 0x4000c2e0  LEND    : 0x4000c2f6  LCOUNT  : 0xffffffff

我对这个问题进行了详尽的搜索,但没有结果,我不知道发生了什么。有人能深入了解如何解决这个问题吗?

这是我的Arduino代码:

#include <HTTPClient.h>
#include <WiFi.h>
#include <DHT.h>
#include <ArduinoJson.h>
#define DHTTYPE DHT22
const char* ssid = "ssid";
const char* password = "password";
uint8_t sensor = 16;
DHT dht(sensor, DHTTYPE);
void setup() {
Serial.begin(115200);
dht.begin();
WiFi.begin(ssid, password);
while(WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting...");
}
Serial.println("Connected!");
}
void loop() {
if(WiFi.status() == WL_CONNECTED) {
HTTPClient http;
http.begin("http://192.168.10.5:8090/");
http.addHeader("Content-Type", "text/plain");
Serial.println("Began http on Flask");
const int cap = JSON_OBJECT_SIZE(2);
StaticJsonDocument<cap> doc;
Serial.println("Created json document");
doc["temperature"] = dht.readTemperature();
doc["humidity"] = dht.readHumidity();
Serial.println("Read temperature and humidity correctly");
char output[256];
serializeJsonPretty(doc, output);
Serial.println(output);

//Code will give back error after trying to POST
int httpCode = http.POST(output);
Serial.println("Got httpCode");
if(httpCode > 0) {
Serial.println(httpCode);
} else Serial.println("Error in Connection");
http.end();
}
delay(10000);
}

这里有一些print语句,根据它进入代码的程度,可以打印出各种内容。它可以很好地打印json文档,但不会打印出"得到httpCode"。以下是我的Flask服务器代码:

from flask import Flask, request
app = Flask(__name__)
@app.route('/', methods = ['POST'])
def hello():
req = request.get_json()
print(req)
return "Thanks", 200
if __name__ == "__main__":
app.run(host = '0.0.0.0', port = 8090)

提前感谢您的帮助。

我在使用WebSockets时也遇到了这个错误。

事实证明,我用于接收消息的缓冲区(全局声明(是附加新消息,而不是覆盖其中预先存在的内容。因此,进行了非法内存写入尝试,设备惊慌失措,重新启动。

解决方案: 我只是在onWebSocketEvent((函数中本地声明了缓冲区,并且由于缓冲区在每次防止非法内存写入尝试的事件中都被重新声明,因此覆盖问题得到了解决。该设备再也没有惊慌失措。

我在回调过程中遇到了一个Guru错误,原因是micro内存不足。解决方案是去掉未使用的库,使用指针而不是创建局部变量。

我最近在制作ESP32库的原型时遇到了类似的错误(请参阅此处https://github.com/aeonSolutions/aeonlabs-ESP32-C-Base-Firmware-Libraries#readme)当我初始化测量类时。

Guru Meditation Error: Core  1 panic'ed (LoadProhibited). Exception was unhandled.
Core  1 register dump:
PC      : 0x4200a746  PS      : 0x00060b30  A0      : 0x820052d9  A1      : 0x3fcebb40  
A2      : 0x00000000  A3      : 0x3fcf30a8  A4      : 0x3fcf75c4  A5      : 0x3fcf6888  
A6      : 0x3fcf655c  A7      : 0x3c13ea43  A8      : 0x8200a746  A9      : 0x3fcebb20  
A10     : 0x00000006  A11     : 0x00000004  A12     : 0x00000078  A13     : 0x0000002c  
A14     : 0x0000002b  A15     : 0x0000e100  SAR     : 0x0000000c  EXCCAUSE: 0x0000001c  
EXCVADDR: 0x00000000  LBEG    : 0x400556d5  LEND    : 0x400556e5  LCOUNT  : 0xfffffffe  

Backtrace: 0x4200a743:0x3fcebb40 0x420052d6:0x3fcebc00 0x42030726:0x3fcebc90

在CCD_ 1中通常表示一种空指针类型的错误。检查代码中是否有未初始化的变量。

在我的这个特殊情况下,MEASUREMENTS_CLASS没有初始化,尽管调用成员函数/方法仍然有效,但带有变量赋值的第一行代码会导致代码崩溃,并出现上述错误。为了解决这个问题,我只需要从正确初始化类

#include "measurements.h"
MEASUREMENTS_CLASS* measurements;

#include "measurements.h"
MEASUREMENTS_CLASS* measurements = new MEASUREMENTS_CLASS();

最新更新