test_task_wdt.c 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. /*
  2. * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
  3. *
  4. * SPDX-License-Identifier: Unlicense OR CC0-1.0
  5. */
  6. #include <stdbool.h>
  7. #include "unity.h"
  8. #include "esp_rom_sys.h"
  9. #include "esp_task_wdt.h"
  10. #include "test_utils.h"
  11. #define TASK_WDT_TIMEOUT_MS 1000
  12. static bool timeout_flag;
  13. void esp_task_wdt_isr_user_handler(void)
  14. {
  15. timeout_flag = true;
  16. }
  17. #if !TEMPORARY_DISABLED_FOR_TARGETS(ESP32C2)
  18. //IDF-5055
  19. TEST_CASE("Task WDT task timeout", "[task_wdt]")
  20. {
  21. timeout_flag = false;
  22. esp_task_wdt_config_t twdt_config = {
  23. .timeout_ms = TASK_WDT_TIMEOUT_MS,
  24. .idle_core_mask = 0,
  25. .trigger_panic = false,
  26. };
  27. TEST_ASSERT_EQUAL(ESP_OK, esp_task_wdt_init(&twdt_config));
  28. TEST_ASSERT_EQUAL(ESP_OK, esp_task_wdt_add(NULL));
  29. // Short delay to allow timeout to occur
  30. esp_rom_delay_us(TASK_WDT_TIMEOUT_MS * 1000);
  31. TEST_ASSERT_EQUAL(true, timeout_flag);
  32. TEST_ASSERT_EQUAL(ESP_OK, esp_task_wdt_delete(NULL));
  33. TEST_ASSERT_EQUAL(ESP_OK, esp_task_wdt_deinit());
  34. }
  35. #endif //!TEMPORARY_DISABLED_FOR_TARGETS(ESP32C2)
  36. TEST_CASE("Task WDT task feed", "[task_wdt]")
  37. {
  38. timeout_flag = false;
  39. esp_task_wdt_config_t twdt_config = {
  40. .timeout_ms = TASK_WDT_TIMEOUT_MS,
  41. .idle_core_mask = 0,
  42. .trigger_panic = false,
  43. };
  44. TEST_ASSERT_EQUAL(ESP_OK, esp_task_wdt_init(&twdt_config));
  45. TEST_ASSERT_EQUAL(ESP_OK, esp_task_wdt_add(NULL));
  46. // Feed the watchdog after a short delay
  47. esp_rom_delay_us((TASK_WDT_TIMEOUT_MS * 1000) / 2);
  48. TEST_ASSERT_EQUAL(ESP_OK, esp_task_wdt_reset());
  49. esp_rom_delay_us((TASK_WDT_TIMEOUT_MS * 1000) / 2);
  50. TEST_ASSERT_EQUAL(false, timeout_flag);
  51. TEST_ASSERT_EQUAL(ESP_OK, esp_task_wdt_delete(NULL));
  52. TEST_ASSERT_EQUAL(ESP_OK, esp_task_wdt_deinit());
  53. }
  54. #if !TEMPORARY_DISABLED_FOR_TARGETS(ESP32C2)
  55. //IDF-5055
  56. TEST_CASE("Task WDT user timeout", "[task_wdt]")
  57. {
  58. const char *user_name = "test_user";
  59. esp_task_wdt_user_handle_t user_handle;
  60. timeout_flag = false;
  61. esp_task_wdt_config_t twdt_config = {
  62. .timeout_ms = TASK_WDT_TIMEOUT_MS,
  63. .idle_core_mask = 0,
  64. .trigger_panic = false,
  65. };
  66. TEST_ASSERT_EQUAL(ESP_OK, esp_task_wdt_init(&twdt_config));
  67. TEST_ASSERT_EQUAL(ESP_OK, esp_task_wdt_add_user(user_name, &user_handle));
  68. // Short delay to allow timeout to occur
  69. esp_rom_delay_us(TASK_WDT_TIMEOUT_MS * 1000);
  70. TEST_ASSERT_EQUAL(true, timeout_flag);
  71. TEST_ASSERT_EQUAL(ESP_OK, esp_task_wdt_delete_user(user_handle));
  72. TEST_ASSERT_EQUAL(ESP_OK, esp_task_wdt_deinit());
  73. }
  74. #endif //!TEMPORARY_DISABLED_FOR_TARGETS(ESP32C2)
  75. TEST_CASE("Task WDT user feed", "[task_wdt]")
  76. {
  77. const char *user_name = "test_user";
  78. esp_task_wdt_user_handle_t user_handle;
  79. timeout_flag = false;
  80. esp_task_wdt_config_t twdt_config = {
  81. .timeout_ms = TASK_WDT_TIMEOUT_MS,
  82. .idle_core_mask = 0,
  83. .trigger_panic = false,
  84. };
  85. TEST_ASSERT_EQUAL(ESP_OK, esp_task_wdt_init(&twdt_config));
  86. TEST_ASSERT_EQUAL(ESP_OK, esp_task_wdt_add_user(user_name, &user_handle));
  87. // Feed the watchdog after a short delay
  88. esp_rom_delay_us((TASK_WDT_TIMEOUT_MS * 1000) / 2);
  89. TEST_ASSERT_EQUAL(ESP_OK, esp_task_wdt_reset_user(user_handle));
  90. esp_rom_delay_us((TASK_WDT_TIMEOUT_MS * 1000) / 2);
  91. TEST_ASSERT_EQUAL(false, timeout_flag);
  92. TEST_ASSERT_EQUAL(ESP_OK, esp_task_wdt_delete_user(user_handle));
  93. TEST_ASSERT_EQUAL(ESP_OK, esp_task_wdt_deinit());
  94. }