summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Keller <geekboy1011@gmail.com>2021-08-19 00:44:22 +0000
committerTim Keller <geekboy1011@gmail.com>2021-08-19 00:44:22 +0000
commit2dd7b8ba2c0c8f756eddd9c86a40497f1b7f7537 (patch)
tree5ba30987c4905a0b8efdd1e6652a9c58e9b20e33
parent16502b788f19458b472de74173d92f01aba30b5f (diff)
Add clearing of noinit segment on bad word
Code readability cleanup
-rw-r--r--src/components/datetime/DateTimeController.cpp2
-rw-r--r--src/components/datetime/DateTimeController.h2
-rw-r--r--src/main.cpp15
3 files changed, 12 insertions, 7 deletions
diff --git a/src/components/datetime/DateTimeController.cpp b/src/components/datetime/DateTimeController.cpp
index 77c5be4e..49953388 100644
--- a/src/components/datetime/DateTimeController.cpp
+++ b/src/components/datetime/DateTimeController.cpp
@@ -76,7 +76,7 @@ void DateTime::UpdateTime(uint32_t systickCounter) {
} else if (hour != 0) {
isMidnightAlreadyNotified = false;
}
- BackUpTime = currentDateTime;
+ NoInit_BackUpTime = currentDateTime;
}
const char* DateTime::MonthShortToString() {
diff --git a/src/components/datetime/DateTimeController.h b/src/components/datetime/DateTimeController.h
index ed7b0861..a20f71c1 100644
--- a/src/components/datetime/DateTimeController.h
+++ b/src/components/datetime/DateTimeController.h
@@ -2,7 +2,7 @@
#include <cstdint>
#include <chrono>
-extern std::chrono::time_point<std::chrono::system_clock, std::chrono::nanoseconds> BackUpTime;
+extern std::chrono::time_point<std::chrono::system_clock, std::chrono::nanoseconds> NoInit_BackUpTime;
namespace Pinetime {
namespace System {
diff --git a/src/main.cpp b/src/main.cpp
index 9c384a8b..d5da4283 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -160,8 +160,12 @@ Pinetime::System::SystemTask systemTask(spi,
heartRateApp,
fs);
-uint32_t MAGIC_RAM __attribute__((section(".noinit")));
-std::chrono::time_point<std::chrono::system_clock, std::chrono::nanoseconds> BackUpTime __attribute__((section(".noinit")));
+extern uint32_t __start_noinit_data;
+extern uint32_t __stop_noinit_data;
+static constexpr uint32_t NoInit_MagicValue = 0xDEADBEEF;
+uint32_t NoInit_MagicWord __attribute__((section(".noinit")));
+std::chrono::time_point<std::chrono::system_clock, std::chrono::nanoseconds> NoInit_BackUpTime __attribute__((section(".noinit")));
+
void nrfx_gpiote_evt_handler(nrfx_gpiote_pin_t pin, nrf_gpiote_polarity_t action) {
if (pin == pinTouchIrq) {
@@ -324,10 +328,11 @@ int main(void) {
Pinetime::BootloaderVersion::SetVersion(NRF_TIMER2->CC[0]);
// Check Magic Ram and reset lost variables
- if (MAGIC_RAM == 0xDEADBEEF) {
- dateTimeController.SetCurrentTime(BackUpTime);
+ if (NoInit_MagicWord == NoInit_MagicValue) {
+ dateTimeController.SetCurrentTime(NoInit_BackUpTime);
} else {
- MAGIC_RAM = 0xDEADBEEF;
+ memset(&__start_noinit_data,0,(uintptr_t)&__stop_noinit_data-(uintptr_t)&__start_noinit_data);
+ NoInit_MagicWord = NoInit_MagicValue;
}
lvgl.Init();