ESP32-WROOM-32与ESP32-WROVER对比

14
我有多个ESP8266应用程序转换成32位。这些应用看起来在WROVER芯片上运行良好,但在WROOM-32芯片上加载和执行后会在一段时间后导致崩溃。我得到了以下错误信息:
Guru Meditation Error: Core 1 panic'ed (LoadProhibited)。异常未处理。
我的代码只是每秒闪烁一个LED(板载引脚2)并监视UDP数据包。除此之外,它们只是坐在执行循环中。我有许多这些芯片,如果我可以使它们可靠地运行,我想使用它们。
请问如何追踪问题?谢谢!

你使用的是哪个版本的ESP32模块?每个系列都有几个变体,它们之间存在微小的差异可能会很重要。虽然你似乎没有做超出任何“WROOM”模块能力范围的事情,但缩小问题范围可能是相关的。 - Mukunda Modell
包含您的代码,仅提供有限信息很难知道出了什么问题。其中一个可能性是你在ESP8266中使用的一些库可能不适用于ESP32。 - hcheung
我正在使用一个带有ESP-WROOM-32芯片的开发板。在platform.ini文件中,我有以下内容: [env:esp_wroom_02] platform = espressif32 board = esp_wroom_02 framework = arduino monitor_speed = 115200除了Visual Studio Code安装的库之外,我只使用了一个JSON库。 - Tom Lindley
代码会很长,在失败的时候,代码唯一要做的就是广播一个UDP数据包。它确实创建了一个JSON字符串来发送。发送数据包的代码如下: StaticJsonBuffer<1024> jsonBuffer; JsonObject& root = jsonBuffer.createObject(); BuildJson(root); root["Command"] = (int)RackIdent; char jsonIdent[1024]; root.printTo(jsonIdent); _network->BroadcastPacket(jsonIdent); - Tom Lindley
广播数据包函数中的代码如下: _udp.beginPacket(_broadcastAddress,_broadcastPort); _udp.write((uint8_t*)buffer,strlen(buffer)+1); _udp.endPacket(); - Tom Lindley
4个回答

15
WROOMWROVER芯片最大的区别在于WROVER模块上集成了一个8 MB“SPI PSRAM”芯片,与ESP32-D0WDQ6一起使用。各种ESP32模块的规格和功能在ESP32模块和开发板部分的ESP32硬件参考手册顶部的表格中描述。 不知道更多信息很难确定具体问题,但我怀疑它与内存管理有关。这也可能是由于ESP32双核架构的竞争条件导致的结果。

8

我想我可能有答案。我有一些休眠代码(至少我认为它是休眠的),用于在一些带显示屏的NodeMCU芯片上编写显示内容。结果发现初始化程序实际上已经被调用了。一旦我更正了这个问题,程序似乎就可以工作了。再次证明,我自己的愚蠢害了我。非常感谢你的帮助,让我找到了正确的方向。


8

WROVER集成了一个8 MB的“SPI PSRAM”,并使用2个GPIO来控制该PSRAM,因为它与闪存共享SPI总线。因此,WROOM模块具有两个额外的GPIO(16/17)。


1
问题在于您的代码在循环函数中阻塞了主任务。您需要创建一个优先级较低或在核心1中的新任务,以便循环函数中的主任务不会被阻塞。

请查看freertos文档以了解如何创建任务。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接