diff --git a/components/newlib/test/test_time.c b/components/newlib/test/test_time.c index 752fa091ab..15db812012 100644 --- a/components/newlib/test/test_time.c +++ b/components/newlib/test/test_time.c @@ -247,6 +247,7 @@ static void get_time_task(void *pvParameters) // although exit flag is set in another task, checking (exit_flag == false) is safe while (exit_flag == false) { gettimeofday(&tv_time, NULL); + vTaskDelay(1500 / portTICK_PERIOD_MS); } xSemaphoreGive(*sema); vTaskDelete(NULL); @@ -255,13 +256,9 @@ static void get_time_task(void *pvParameters) static void start_measure(int64_t* sys_time, int64_t* real_time) { struct timeval tv_time; - int64_t t1, t2; - do { - t1 = esp_timer_get_time(); - gettimeofday(&tv_time, NULL); - t2 = esp_timer_get_time(); - } while (t2 - t1 > 40); - *real_time = t2; + // there shouldn't be much time between gettimeofday and esp_timer_get_time + gettimeofday(&tv_time, NULL); + *real_time = esp_timer_get_time(); *sys_time = (int64_t)tv_time.tv_sec * 1000000L + tv_time.tv_usec; } @@ -297,7 +294,7 @@ static void measure_time_task(void *pvParameters) int64_t sys_time_us[2] = { main_sys_time_us[0], 0}; // although exit flag is set in another task, checking (exit_flag == false) is safe while (exit_flag == false) { - esp_rom_delay_us(2 * 1000000); // 2 sec + vTaskDelay(2000 / portTICK_PERIOD_MS); start_measure(&sys_time_us[1], &real_time_us[1]); result_adjtime_correction_us[1] += calc_correction("measure", sys_time_us, real_time_us); @@ -318,7 +315,7 @@ static void measure_time_task(void *pvParameters) vTaskDelete(NULL); } -TEST_CASE("test time adjustment happens linearly", "[newlib][timeout=35]") +TEST_CASE("test time adjustment happens linearly", "[newlib][timeout=15]") { exit_flag = false; @@ -331,8 +328,8 @@ TEST_CASE("test time adjustment happens linearly", "[newlib][timeout=35]") xTaskCreatePinnedToCore(get_time_task, "get_time_task", 4096, &exit_sema[0], UNITY_FREERTOS_PRIORITY - 1, NULL, 0); xTaskCreatePinnedToCore(measure_time_task, "measure_time_task", 4096, &exit_sema[1], UNITY_FREERTOS_PRIORITY - 1, NULL, 1); - printf("start waiting for 30 seconds\n"); - vTaskDelay(30000 / portTICK_PERIOD_MS); + printf("start waiting for 10 seconds\n"); + vTaskDelay(10000 / portTICK_PERIOD_MS); // set exit flag to let thread exit exit_flag = true;