mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-02 12:14:32 +02:00
Merge branch 'bugfix/mitigate_test_time_adjustment_happens_linearly_v3.3' into 'release/v3.3'
newlib: Mitigate UT - time adjustment happens linearly See merge request espressif/esp-idf!14309
This commit is contained in:
@@ -216,6 +216,7 @@ static void get_time_task(void *pvParameters)
|
|||||||
// although exit flag is set in another task, checking (exit_flag == false) is safe
|
// although exit flag is set in another task, checking (exit_flag == false) is safe
|
||||||
while (exit_flag == false) {
|
while (exit_flag == false) {
|
||||||
gettimeofday(&tv_time, NULL);
|
gettimeofday(&tv_time, NULL);
|
||||||
|
vTaskDelay(1500 / portTICK_PERIOD_MS);
|
||||||
}
|
}
|
||||||
xSemaphoreGive(*sema);
|
xSemaphoreGive(*sema);
|
||||||
vTaskDelete(NULL);
|
vTaskDelete(NULL);
|
||||||
@@ -224,13 +225,9 @@ static void get_time_task(void *pvParameters)
|
|||||||
static void start_measure(int64_t* sys_time, int64_t* real_time)
|
static void start_measure(int64_t* sys_time, int64_t* real_time)
|
||||||
{
|
{
|
||||||
struct timeval tv_time;
|
struct timeval tv_time;
|
||||||
int64_t t1, t2;
|
// there shouldn't be much time between gettimeofday and esp_timer_get_time
|
||||||
do {
|
|
||||||
t1 = esp_timer_get_time();
|
|
||||||
gettimeofday(&tv_time, NULL);
|
gettimeofday(&tv_time, NULL);
|
||||||
t2 = esp_timer_get_time();
|
*real_time = esp_timer_get_time();
|
||||||
} while (t2 - t1 > 40);
|
|
||||||
*real_time = t2;
|
|
||||||
*sys_time = (int64_t)tv_time.tv_sec * 1000000L + tv_time.tv_usec;
|
*sys_time = (int64_t)tv_time.tv_sec * 1000000L + tv_time.tv_usec;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -266,7 +263,7 @@ static void measure_time_task(void *pvParameters)
|
|||||||
int64_t sys_time_us[2] = { main_sys_time_us[0], 0};
|
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
|
// although exit flag is set in another task, checking (exit_flag == false) is safe
|
||||||
while (exit_flag == false) {
|
while (exit_flag == false) {
|
||||||
ets_delay_us(2 * 1000000); // 2 sec
|
vTaskDelay(2000 / portTICK_PERIOD_MS);
|
||||||
|
|
||||||
start_measure(&sys_time_us[1], &real_time_us[1]);
|
start_measure(&sys_time_us[1], &real_time_us[1]);
|
||||||
result_adjtime_correction_us[1] += calc_correction("measure", sys_time_us, real_time_us);
|
result_adjtime_correction_us[1] += calc_correction("measure", sys_time_us, real_time_us);
|
||||||
@@ -287,7 +284,7 @@ static void measure_time_task(void *pvParameters)
|
|||||||
vTaskDelete(NULL);
|
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;
|
exit_flag = false;
|
||||||
|
|
||||||
@@ -300,8 +297,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(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);
|
xTaskCreatePinnedToCore(measure_time_task, "measure_time_task", 4096, &exit_sema[1], UNITY_FREERTOS_PRIORITY - 1, NULL, 1);
|
||||||
|
|
||||||
printf("start waiting for 30 seconds\n");
|
printf("start waiting for 10 seconds\n");
|
||||||
vTaskDelay(30000 / portTICK_PERIOD_MS);
|
vTaskDelay(10000 / portTICK_PERIOD_MS);
|
||||||
|
|
||||||
// set exit flag to let thread exit
|
// set exit flag to let thread exit
|
||||||
exit_flag = true;
|
exit_flag = true;
|
||||||
|
Reference in New Issue
Block a user