@@ -115,7 +115,6 @@ Pinetime::Controllers::FS fs {spiNorFlash};
115115Pinetime::Controllers::Settings settingsController {fs};
116116Pinetime::Controllers::MotorController motorController {settingsController};
117117
118-
119118Pinetime::Applications::DisplayApp displayApp (lcd,
120119 lvgl,
121120 touchPanel,
@@ -156,6 +155,16 @@ Pinetime::System::SystemTask systemTask(spi,
156155 fs,
157156 touchHandler);
158157
158+ /* Variable Declarations for variables in noinit SRAM
159+ Increment NoInit_MagicValue upon adding variables to this area
160+ */
161+ extern uint32_t __start_noinit_data;
162+ extern uint32_t __stop_noinit_data;
163+ static constexpr uint32_t NoInit_MagicValue = 0xDEAD0000 ;
164+ uint32_t NoInit_MagicWord __attribute__ ((section(" .noinit" )));
165+ std::chrono::time_point<std::chrono::system_clock, std::chrono::nanoseconds> NoInit_BackUpTime __attribute__ ((section(" .noinit" )));
166+
167+
159168void nrfx_gpiote_evt_handler (nrfx_gpiote_pin_t pin, nrf_gpiote_polarity_t action) {
160169 if (pin == Pinetime::PinMap::Cst816sIrq) {
161170 systemTask.OnTouchEvent ();
@@ -316,6 +325,15 @@ int main(void) {
316325 // retrieve version stored by bootloader
317326 Pinetime::BootloaderVersion::SetVersion (NRF_TIMER2->CC [0 ]);
318327
328+
329+ if (NoInit_MagicWord == NoInit_MagicValue) {
330+ dateTimeController.SetCurrentTime (NoInit_BackUpTime);
331+ } else {
332+ // Clear Memory to known state
333+ memset (&__start_noinit_data,0 ,(uintptr_t )&__stop_noinit_data-(uintptr_t )&__start_noinit_data);
334+ NoInit_MagicWord = NoInit_MagicValue;
335+ }
336+
319337 lvgl.Init ();
320338
321339 systemTask.Start ();
0 commit comments