Argon crashing with HAL ERROR

the argon seems to crash after some hours. i cannot say yet how long it really takes.

this is the log.

0031480308 [wiring] TRACE: begin packet FF03::1:1001#36969
0031480311 [wiring] TRACE: sendPacket size 16, FF03::1:1001#36969
0031481315 [wiring] TRACE: begin packet FF03::1:1001#36969
0031481317 [wiring] TRACE: sendPacket size 16, FF03::1:1001#36969
0031481321 [hal] ERROR: Assertion failed: openthread/third_party/NordicSemiconductor/drivers/radio/nrf_802154_request_swi.c:57 assert_interrupt_status (nrf_is_nvic_irq_enabled(NRF_80~

FATAL: term closed

the setup consists of one argon and two xenons. all running 0.8.0-rc.27.

after the argon crashes the mesh network still continues to work (at least between the two xenons). but incoming particle cloud messages do not seem to be processed by the argon anymore. also, the “heartbeat blink” does not seem to be sent through mesh anymore (i.e. the mesh message from the argon is not recieved by any of the xenons).

i have to reset the argon.

the xenons run a simple app that checks a button. if pressed the xenon will publish a message through mesh. if any xenon recieves such a message it will blick an led.

there is another photon with a button that will send a cloud message when pressed.

when the argon recieves such a cloud message it will send a mesh message and the xenons will blink.

this works for some time (i assume at least an hour). when pressing the button on the photon the two xenons will blink. when pressing the button on any xenon the other xenon will blink. that’s all basically fine.

the following is the test app.

SerialLogHandler logHandler(LOG_LEVEL_ALL);

void particlePublishHandler(char const *event, char const *data) {
    if (strcmp(event, "button") == 0) {
        Mesh.publish("button", "hit");
    }
}

void setup() {
    pinMode(D7, OUTPUT);
    digitalWrite(D7, 0);
    Particle.subscribe("button", particlePublishHandler);
}

void loop() {
    Mesh.publish("heartbeat", "tick");
    delay(1000);
    digitalWrite(D7, !digitalRead(D7));
}

That's the millis() count, so it's after about 8h 44m 41s

okey. so the other time it crashed was 14 million microseconds later…

0014402840 [comm.protocol] INFO: rcv'd message type=13
0014402842 [wiring] TRACE: begin packet FF03::1:1001#36969
0014402845 [wiring] TRACE: sendPacket size 16, FF03::1:1001#36969
0014403850 [comm.protocol] TRACE: Reply recieved: type=2, code=0
0014403852 [comm.protocol] INFO: message id 42390 complete with code 0.00
0014403854 [hal] ERROR: Assertion failed: openthread/third_party/NordicSemiconductor/drivers/radio/nrf_802154_request_swi.c:57 assert_interrupt_statu$ (nrf_is_nvic_irq_enabled(NRF_80~

FATAL: term closed

by now i changed the argon code to send the heartbeat message to the particle cloude as well.

Particle.publish("heartbeat", "tick");

with that it does not seem to loose connection to the cloud. there is (up to now) no other noticable trouble than the error message and the fact that the serial console (i.e. the serial port on usb) is dead.

FATAL: cannot open /dev/ttyACM1: No such file or directory

i would be interested in learning what “ERROR: Assertion failed” actually means? is this something one has to bother?

AFAICT Assertion Failures are happening when some coded assertion (which is up to the discretion of the programmer of the respective piece of code) failed to render the expected result. These should usually be cases that were assumed to be unlikely or even impossible (followed by an SOS+10 panic reset).

It would be good to get as much detail about the context of it happening as possible in order to locate a potential bug and file an issue on GitHub.