mirror of
https://github.com/espressif/ESP8266_RTOS_SDK.git
synced 2025-10-20 05:23:44 +08:00
fix(esp_timer): fix system time statistical error
This commit is contained in:
@@ -246,21 +246,21 @@ esp_err_t esp_timer_delete(esp_timer_handle_t timer)
|
|||||||
|
|
||||||
int64_t esp_timer_get_time()
|
int64_t esp_timer_get_time()
|
||||||
{
|
{
|
||||||
extern esp_tick_t g_cpu_ticks;
|
|
||||||
extern uint64_t g_os_ticks;
|
extern uint64_t g_os_ticks;
|
||||||
|
|
||||||
esp_irqflag_t flag;
|
esp_irqflag_t flag;
|
||||||
esp_tick_t diff_ticks, ticks;
|
uint64_t diff_ticks, ticks, prev_ticks;
|
||||||
uint64_t time;
|
uint64_t time;
|
||||||
|
|
||||||
flag = soc_save_local_irq();
|
flag = soc_save_local_irq();
|
||||||
|
|
||||||
time = g_os_ticks * portTICK_PERIOD_MS * 1000;
|
time = g_os_ticks * portTICK_PERIOD_MS * 1000;
|
||||||
|
prev_ticks = soc_get_ccompare() - _xt_tick_divisor;
|
||||||
ticks = soc_get_ticks();
|
ticks = soc_get_ticks();
|
||||||
if (ticks >= g_cpu_ticks) {
|
if (ticks >= prev_ticks) {
|
||||||
diff_ticks = ticks - g_cpu_ticks;
|
diff_ticks = ticks - prev_ticks;
|
||||||
} else {
|
} else {
|
||||||
diff_ticks = ESP_TICKS_MAX - g_cpu_ticks + ticks;
|
diff_ticks = ESP_TICKS_MAX - prev_ticks + ticks;
|
||||||
}
|
}
|
||||||
|
|
||||||
time += diff_ticks / (_xt_tick_divisor * configTICK_RATE_HZ / (1000 * 1000));
|
time += diff_ticks / (_xt_tick_divisor * configTICK_RATE_HZ / (1000 * 1000));
|
||||||
|
Reference in New Issue
Block a user