kopia lustrzana https://github.com/espressif/esp-idf
Merge branch 'bugfix/time_jump_after_reboot_v4.4' into 'release/v4.4'
esp_hw_support: Fix time jump after reboot (v4.4) See merge request espressif/esp-idf!20907pull/10244/head
commit
08135d4ea6
|
@ -46,7 +46,7 @@ extern uint32_t g_ticks_per_us_app;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static portMUX_TYPE s_esp_rtc_time_lock = portMUX_INITIALIZER_UNLOCKED;
|
static portMUX_TYPE s_esp_rtc_time_lock = portMUX_INITIALIZER_UNLOCKED;
|
||||||
static RTC_DATA_ATTR uint64_t s_esp_rtc_time_us = 0, s_rtc_last_ticks = 0;
|
static RTC_NOINIT_ATTR uint64_t s_esp_rtc_time_us, s_rtc_last_ticks;
|
||||||
|
|
||||||
inline static int IRAM_ATTR s_get_cpu_freq_mhz(void)
|
inline static int IRAM_ATTR s_get_cpu_freq_mhz(void)
|
||||||
{
|
{
|
||||||
|
@ -89,6 +89,10 @@ uint64_t esp_rtc_get_time_us(void)
|
||||||
{
|
{
|
||||||
portENTER_CRITICAL_SAFE(&s_esp_rtc_time_lock);
|
portENTER_CRITICAL_SAFE(&s_esp_rtc_time_lock);
|
||||||
const uint32_t cal = esp_clk_slowclk_cal_get();
|
const uint32_t cal = esp_clk_slowclk_cal_get();
|
||||||
|
if (cal == 0) {
|
||||||
|
s_esp_rtc_time_us = 0;
|
||||||
|
s_rtc_last_ticks = 0;
|
||||||
|
}
|
||||||
const uint64_t rtc_this_ticks = rtc_time_get();
|
const uint64_t rtc_this_ticks = rtc_time_get();
|
||||||
const uint64_t ticks = rtc_this_ticks - s_rtc_last_ticks;
|
const uint64_t ticks = rtc_this_ticks - s_rtc_last_ticks;
|
||||||
/* RTC counter result is up to 2^48, calibration factor is up to 2^24,
|
/* RTC counter result is up to 2^48, calibration factor is up to 2^24,
|
||||||
|
|
Ładowanie…
Reference in New Issue