arduino-lorawan: Kernel panic on Arduino v2.0
The library worked fine on Arduino 1.0.6, but after upgrading to v2.0.0 the device reboots on the next loop cycle after calling Arduino_LoRaWAN::SendBuffer()
. I have a Lora
wrapper class which simply calls Arduino_LoRaWAN::loop()
- it is failing at this point.
environment:
- Version 0.9.1
- Ardunio v2.0.0 (I also tried the
mem-optimized
branch) - PlatformIO on Windows 10
- Heltec Wireless Stick v1.2
code
void Lora::NetBeginRegionInit() {
this->Super::NetBeginRegionInit();
}
void Lora::NetJoin() {
this->Super::NetJoin();
SetLinkCheckMode(true);
LMIC_setPingable(4);
}
void Lora::NetTxComplete() {
this->Super::NetTxComplete();
}
bool Lora::GetOtaaProvisioningInfo(OtaaProvisioningInfo *pInfo) {
if (pInfo != nullptr) {
memcpy_P(pInfo->AppKey, APPKEY, sizeof(pInfo->AppKey));
memcpy_P(pInfo->DevEUI, DEVEUI, sizeof(pInfo->DevEUI));
memcpy_P(pInfo->AppEUI, APPEUI, sizeof(pInfo->AppEUI));
}
return true;
}
void Lora::loop() {
if (!enabled) return;
Super::loop(); // <-- Failing here
}
- My application flow is:
// these are called in setup
begin(&pinMap);
os_setCallback(&basicStatePublishJob, processLMICCallback);
// ... then 'basicStatePublishJob' calls SendBuffer
SendBuffer(dataBuffer, dataBuffer_s, pDoneFn, (void *)this, /*confirmed*/ 0, /*port*/ 1);
core dump
Guru Meditation Error: Core 1 panic'ed (LoadStoreError). Exception was unhandled.
Core 1 register dump:
PC : 0x400f4ed7 PS : 0x00060030 A0 : 0x800f4f55 A1 : 0x3ffce000
A2 : 0x4002f56e A3 : 0x00000000 A4 : 0x00000000 A5 : 0x0013a16a
A6 : 0xfffffffc A7 : 0x00000003 A8 : 0x00000000 A9 : 0x3ffc7c18
A10 : 0x00000010 A11 : 0x00000016 A12 : 0x00000000 A13 : 0x00040df7
A14 : 0x63ffffff A15 : 0x00000003 SAR : 0x0000001b EXCCAUSE: 0x00000003
EXCVADDR: 0x4002f56e LBEG : 0x400f4e88 LEND : 0x400f4ee6 LCOUNT : 0x00000004
0x400f4ed4: Arduino_LoRaWAN::BuildSessionState(Arduino_LoRaWAN::SessionState_u&) const at F:\myproject/.pio/libdeps/heltec_wireless_stick/MCCI Arduino LoRaWAN Library/src/Arduino_LoRaWAN.h:369
(inlined by) ?? at F:\myproject/.pio/libdeps/heltec_wireless_stick/MCCI Arduino LoRaWAN Library/src/Arduino_LoRaWAN.h:359
(inlined by) Arduino_LoRaWAN::BuildSessionState(Arduino_LoRaWAN::SessionState_u&) const at F:\myproject/.pio/libdeps/heltec_wireless_stick/MCCI Arduino LoRaWAN Library/src/lib/arduino_lorawan_sessionstate.cpp:114
0x400f4f52: Arduino_LoRaWAN::SaveSessionState() at F:\myproject/.pio/libdeps/heltec_wireless_stick/MCCI Arduino LoRaWAN Library/src/lib/arduino_lorawan_sessionstate.cpp:190
0x400f4b0b: Arduino_LoRaWAN::StandardEventProcessor(unsigned int) at F:\myproject/.pio/libdeps/heltec_wireless_stick/MCCI Arduino LoRaWAN Library/src/Arduino_LoRaWAN.h:925
(inlined by) Arduino_LoRaWAN::StandardEventProcessor(unsigned int) at F:\myproject/.pio/libdeps/heltec_wireless_stick/MCCI Arduino LoRaWAN Library/src/lib/arduino_lorawan_begin.cpp:214
0x400f4be2: Arduino_LoRaWAN::DispatchEvent(unsigned int) at F:\myproject/.pio/libdeps/heltec_wireless_stick/MCCI Arduino LoRaWAN Library/src/lib/arduino_lorawan_begin.cpp:123
0x400f4c24: onEvent at F:\myproject/.pio/libdeps/heltec_wireless_stick/MCCI Arduino LoRaWAN Library/src/lib/arduino_lorawan_begin.cpp:109
0x400f07fd: reportEventNoUpdate at F:\myproject/.pio/libdeps/heltec_wireless_stick/MCCI LoRaWAN LMIC library/src/lmic/lmic.c:481
0x400f1d3d: reportEventAndUpdate at F:\myproject/.pio/libdeps/heltec_wireless_stick/MCCI LoRaWAN LMIC library/src/lmic/lmic.c:466
0x400f203a: startJoining at F:\myproject/.pio/libdeps/heltec_wireless_stick/MCCI LoRaWAN LMIC library/src/lmic/lmic.c:2142
0x400f308c: os_runloop_once at F:\myproject/.pio/libdeps/heltec_wireless_stick/MCCI LoRaWAN LMIC library/src/lmic/oslmic.c:157
0x400f4d6b: Arduino_LoRaWAN::loop() at F:\myproject/.pio/libdeps/heltec_wireless_stick/MCCI Arduino LoRaWAN Library/src/lib/arduino_lorawan_loop.cpp:42
0x400d5c03: Lora::loop() at F:\myproject/src/lora.cpp:156
0x400d680e: loop() at F:\myproject/src/main.cpp:196
0x400fb8c4: loopTask(void*) at C:/Users/Oliver/.platformio/packages/framework-arduinoespressif32/cores/esp32/main.cpp:46
Related source code
About this issue
- Original URL
- State: open
- Created 3 years ago
- Comments: 21 (18 by maintainers)
Commits related to this issue
- Workaround for compiler bug * see https://github.com/mcci-catena/arduino-lorawan/issues/181 — committed to olicooper/arduino-lorawan by olicooper 3 years ago
- Add return statement on Arduino_LoRaWAN::setFrequency Missing return statement on Arduino_LoRaWAN::setFrequency - causes compile errors. Could be related to an earlier issue I raised? https://github.... — committed to olicooper/arduino-lorawan by olicooper 2 years ago
got it.
We haven’t tested on Arduino v2.0.0, and I unfortunately don’t even use PlatformIO, though of course we support it – it doesn’t have support for our BSPs. And… this is the first I’ve heard of Arduino 2.0. So I’m really out in the weeds and not able to invest much time short term.
You can possibly use
objdump
on the filearduino_lorawan_sessionstate.
o to get the disassembly. But it depends on the tool chain. You’ll have to research the command line switches on your version.objdump
will be withgcc
. There is an option to disassmble, and to include line numbers, and possibly even to include source code. The.o
file will be somewhere in your build directory.