ESP32上RadioHead库异常:RHMesh.recvfromAck调用RHDatagram::available()时崩溃
问题:调用
manager.recvfromAck()时程序在RHDatagram::available()处崩溃 问题详情
调用manager.recvfromAck(recieveBuffer, &len, &from)时程序崩溃,崩溃点位于RHDatagram::available(),报错EXCVADDR: 0x0000000c。
串口输出
initBoard [ 17][I][esp32-hal-i2c.c:75] i2cInit(): Initialising I2C Master: sda=21 scl=22 freq=100000 Started OLED [ 19][W][Wire.cpp:301] begin(): Bus already started in Master Mode. [ 3423][W][sd_diskio.cpp:174] sdCommand(): no token received [ 3681][W][sd_diskio.cpp:174] sdCommand(): no token received [ 3781][W][sd_diskio.cpp:174] sdCommand(): no token received [ 3880][E][sd_diskio.cpp:199] sdCommand(): Card Failed! cmd: 0x00 [ 3880][W][sd_diskio.cpp:516] ff_sd_initialize(): GO_IDLE_STATE failed [ 3881][E][sd_diskio.cpp:802] sdcard_mount(): f_mount failed: (3) The physical drive cannot work [ 3890][W][sd_diskio.cpp:180] sdCommand(): crc error [ 3995][W][sd_diskio.cpp:174] sdCommand(): no token received [ 4095][W][sd_diskio.cpp:174] sdCommand(): no token received [ 4194][E][sd_diskio.cpp:199] sdCommand(): Card Failed! cmd: 0x00 setupSDCard FAIL Manager init done Max length: 245 Lora chip ready Wifi App Loop: Executing on core 0 Wifi App Running Main Loop: Executing on core 1 Setup Complete LoRa App Loop: Executing on core 1 LoRa App Running 0 Dest: 0 Next Hop: 0 State: 0 1 Dest: 0 Next Hop: 0 State: 0 2 Dest: 0 Next Hop: 0 State: 0 3 Dest: 0 Next Hop: 0 State: 0 4 Dest: 0 Next Hop: 0 State: 0 5 Dest: 0 Next Hop: 0 State: 0 6 Dest: 0 Next Hop: 0 State: 0 7 Dest: 0 Next Hop: 0 State: 0 8 Dest: 0 Next Hop: 0 State: 0 9 Dest: 0 Next Hop: 0 State: 0 RHReliableDatagram::recvfromAck - 1 Guru Meditation Error: Core 1 panic'ed (LoadProhibited). Exception was unhandled. Core 1 register dump: PC : 0x40101797 PS : 0x00060e30 A0 : 0x800d29f0 A1 : 0x3ffb2050 A2 : 0x3ffc8ad0 A3 : 0x00000023 A4 : 0x400d75f8 A5 : 0x3ffb20da A6 : 0x007bf418 A7 : 0x003fffff A8 : 0x00000000 A9 : 0x3ffb2030 A10 : 0x53414344 A11 : 0x3f400518 A12 : 0x400d75f8 A13 : 0x0000ff00 A14 : 0x00ff0000 A15 : 0xff000000 SAR : 0x0000001f EXCCAUSE: 0x0000001c EXCVADDR: 0x0000000c LBEG : 0x400878fd LEND : 0x4008790d LCOUNT : 0xffffffff Backtrace: 0x40101794:0x3ffb2050 0x400d29ed:0x3ffb2070 0x400d2d8d:0x3ffb20c0 0x400d265a:0x3ffb2110 0x400d216f:0x3ffb2160 0x400db311:0x3ffb2290 ELF file SHA256: 2a054f09f2933b33
异常解码器输出
PC: 0x40101797: RHDatagram::available() at /Users/louisalexander/Documents/Arduino/libraries/RadioHead/RHDatagram.cpp line 54 EXCVADDR: 0x0000000c Decoding stack results 0x40101794: RHDatagram::available() at /Users/louisalexander/Documents/Arduino/libraries/RadioHead/RHDatagram.cpp line 54 0x400d29ed: RHReliableDatagram::recvfromAck(unsigned char*, unsigned char*, unsigned char*, unsigned char*, unsigned char*, unsigned char*) at /Users/louisalexander/Documents/Arduino/libraries/RadioHead/RHReliableDatagram.cpp line 136 0x400d2d8d: RHRouter::recvfromAck(unsigned char*, unsigned char*, unsigned char*, unsigned char*, unsigned char*, unsigned char*, unsigned char*) at /Users/louisalexander/Documents/Arduino/libraries/RadioHead/RHRouter.cpp line 219 0x400d265a: RHMesh::recvfromAck(unsigned char*, unsigned char*, unsigned char*, unsigned char*, unsigned char*, unsigned char*, unsigned char*) at /Users/louisalexander/Documents/Arduino/libraries/RadioHead/RHMesh.cpp line 163 0x400d216f: loop() at /Users/louisalexander/Documents/GitHub/repos/Lora-with-RadioHead/main/main.ino line 215 0x400db311: loopTask(void*) at /Users/louisalexander/Library/Arduino15/packages/esp32/hardware/esp32/2.0.7/cores/esp32/main.cpp line 50
排查方向
LoadProhibited错误通常表示程序尝试访问非法内存地址,EXCVADDR: 0x0000000c说明代码在读取0xc地址的内容,大概率是空指针解引用导致。- 查看
RHDatagram.cpp第54行代码,检查是否访问了未初始化的指针成员(比如_driver指针)。 - 确认
manager对象的初始化流程:确保LoRa底层驱动已正确初始化并绑定到manager实例,避免驱动未就绪时调用recvfromAck。 - 多线程(核心0运行Wifi任务、核心1运行LoRa任务)可能引发资源竞争,检查是否对RadioHead API调用做了线程同步,避免同时操作LoRa模块。
- SD卡初始化失败日志虽不直接导致本次崩溃,但需确认是否存在资源冲突影响LoRa模块正常工作。
内容的提问来源于stack exchange,提问作者Louis Alexander
相关产品推荐
相关产品推荐

