Add adjust_millis_forward() API to help with deep sleep processing #243
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This patch fixes mcci-catena#1. During a deep sleep, systick must be off. But some libraries use
millis()
to get an idea of real time. (In particular, this is true for https://github.com/mcci-catena/arduino-lmic -- otherwise, it loses track of the schedule.) Since_ulTickCount
is local to delay.c, the appropriate correction is to add a new APIadjust_millis_forward()
.The submitted patch disables interrupts briefly. I have a different, tested, patch that instead causes the systick interrupt processing routine to do the adjustment. But I think the submitted approach is more clear, and is certainly more efficient. It would be great if this could be added to the mainline distribution. (Of course, this might also imply a similar change to the AVR core, and there are portability issues related to the function of the real-time clock which I have not addressed.)
With this patch, I have successfully entered deep sleep with an Adafruit Feather M0 for the roughly six-minute sleep between LoRaWAN transmissions in my application. Use of deep sleep doubles the battery life.
Sample (somewhat clumsy use):