Calling System.disableUpdates() ends in SOS Hard fault (DeviceOS 3.2.0)

I have a firmware running on DeviceOS 3.2.0 with classes declared and initialized in the global space of the ino file, declared right before (and certainly outside) the setup() function.

One of these classes has a constructor that wants to save to EEPROM and the original developer wanted to protect the eeprom save from updates, or that’s what I suspect, like so:

System.disableUpdates();
EEPROM.put(addr,whatever_data);
System.enableUpdates();

I ended up nailing the SOS - Hard Fault (1 blink between 2 SOS patterns) (one blink red) on the System.disableUpdates();

This happens in a firmware like this:


MyClass _myClass;

setup()
{
  blahblah;
}
loop()
{
  blahblah2;
}

and in MyClass constructor:

MyClass::MyClass()
{
  System.disableUpdates();  <<== this ends in SOS
  EEPROM.put(addr,whatever_data);
  System.enableUpdates();
}

I’m 100% sure this happens on DeviceOS 3.2.0.
90% sure this happens on DEviceOS 3.1.0.

Is this behavior normal for some reason or DeviceOS could be at fault?
Thanks!

Hi @gusgonnet , we will look at this and update you soon.

1 Like

Hi @gusgonnet , to help with investigation, could you provide a couple of affected device IDs? Thank you.

1 Like

Unsure if this is happening for us as well. I’m OTA’ing from DeviceOS 3.1.0 to 3.2.0 and we have enable/disableUpdates in our firmware. After the following OTA sequence the LED is constant white with no user code running (no watchdog triggering)

0001202148 [comm.ota] INFO: Received UpdateStart request
0001202148 [comm.ota] INFO: File size: 42073
0001202148 [comm.ota] INFO: Chunk size: 512
0001202150 [comm.ota] INFO: File checksum:
30086c33166b64b583c6cc63a8a0e11dba618a548d22e21df6908edc5461bfdd
0001202150 [comm.ota] INFO: Starting firmware update
0001202712 [comm.ota] INFO: Start offset: 0
0001202712 [comm.ota] INFO: Chunk count: 83
0001208550 [comm.ota] INFO: Received UpdateFinish request
0001208551 [comm.ota] INFO: Validating firmware update
0001209187 [comm.ota] INFO: Update time: 7039
0001209188 [comm.ota] INFO: Transfer time: 5189
0001209188 [comm.ota] INFO: Processing time: 1432
0001209188 [comm.ota] INFO: Chunks received: 83
0001209190 [comm.ota] INFO: Chunk ACKs sent: 49
0001209190 [comm.ota] INFO: Duplicate chunks: 0
0001209190 [comm.ota] INFO: Out-of-order chunks: 10
0001209191 [comm.ota] INFO: Applying firmware update
0001209966 [system] INFO: Cloud: disconnecting

After cloud disconnect, full white LED.

I suppose that the answer is this:

source

1 Like

This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.