如何修复Guru Meditation错误:Core 1紧急LoadProhibited错误

问题描述

我正在尝试为ESP32芯片编写代码,该代码从DHT22传感器接收读数,将其打包为json文件,然后将其发送至Flask服务器。一切正常,直到我尝试开机自检,然后收到以下错误:

ListView.builder

我对此问题进行了详尽的搜索,但没有结果,我也不知道发生了什么。谁能提供解决此问题的见识?

这是我的Arduino代码:

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

这里有一些print语句,这些语句将打印出各种内容,具体取决于它进入代码的距离。它可以很好地打印出json文档,但不会打印出“ Got httpCode”。下面是我的Flask服务器代码:

#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);
}

预先感谢您的帮助。

解决方法

在使用 WebSockets 时,我也遇到此错误。

事实证明,我用于接收邮件的缓冲区(全局声明)是附加新邮件,而不是覆盖现有内容。因此,进行了非法的内存写入尝试,设备惊慌失措并重新启动。

解决方案: 我只是在 onWebSocketEvent()函数内部本地声明了缓冲区,并且解决了覆盖问题,因为在每个事件上都重新声明了缓冲区,从而防止了非法的内存写入尝试。该设备再也不会惊慌。

,

我在回调过程中遇到了Guru错误,原因是因为微型内存不足。解决方案是摆脱未使用的库,并使用指针而不是创建局部变量。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...