Просмотр исходного кода

freertos: Use the standard assert() function for configASSERT

Unless the option for "assert and keep running" is enabled.

This means that silent asserts now work for FreeRTOS, and disabling asserts
now also disables them in FreeRTOS without needing a separate config change.

Related to https://github.com/espressif/esp-idf/issues/6306
Angus Gratton 4 лет назад
Родитель
Сommit
e9e2b68587

+ 8 - 1
components/freertos/Kconfig

@@ -141,18 +141,25 @@ menu "FreeRTOS"
 
     choice FREERTOS_ASSERT
         prompt "FreeRTOS assertions"
-        default FREERTOS_ASSERT_FAIL_ABORT
+        default FREERTOS_ASSERT_FAIL_ABORT if !COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE
+        default FREERTOS_ASSERT_DISABLE if COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE
         help
             Failed FreeRTOS configASSERT() assertions can be configured to
             behave in different ways.
 
+            By default these behave the same as the global project assert settings.
+
         config FREERTOS_ASSERT_FAIL_ABORT
             bool "abort() on failed assertions"
+            depends on !COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE
             help
                 If a FreeRTOS configASSERT() fails, FreeRTOS will abort() and
                 halt execution. The panic handler can be configured to handle
                 the outcome of an abort() in different ways.
 
+                If assertions are disabled for the entire project, they are also
+                disabled in FreeRTOS and this option is unavailable.
+
         config FREERTOS_ASSERT_FAIL_PRINT_CONTINUE
             bool "Print and continue failed assertions"
             help

+ 3 - 7
components/freertos/port/riscv/include/freertos/FreeRTOSConfig.h

@@ -88,7 +88,7 @@
 
 /* configASSERT behaviour */
 #ifndef __ASSEMBLER__
-#include <stdlib.h> /* for abort() */
+#include <assert.h>
 #include "esp32c3/rom/ets_sys.h"
 
 #if defined(CONFIG_FREERTOS_ASSERT_DISABLE)
@@ -98,12 +98,8 @@
         esp_rom_printf("%s:%d (%s)- assert failed!\n", __FILE__, __LINE__,  \
                    __FUNCTION__);                                           \
     }
-#else /* CONFIG_FREERTOS_ASSERT_FAIL_ABORT */
-#define configASSERT(a) if (unlikely(!(a))) {                               \
-        esp_rom_printf("%s:%d (%s)- assert failed!\n", __FILE__, __LINE__,  \
-                   __FUNCTION__);                                           \
-        abort();                                                            \
-        }
+#elif defined(CONFIG_FREERTOS_ASSERT_FAIL_ABORT)
+#define configASSERT(a) assert(a)
 #endif
 
 #if CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION

+ 3 - 7
components/freertos/port/xtensa/include/freertos/FreeRTOSConfig.h

@@ -119,7 +119,7 @@ int xt_clock_freq(void) __attribute__((deprecated));
 
 /* configASSERT behaviour */
 #ifndef __ASSEMBLER__
-#include <stdlib.h> /* for abort() */
+#include <assert.h>
 #include "esp_rom_sys.h"
 #if CONFIG_IDF_TARGET_ESP32
 #include "esp32/rom/ets_sys.h"  // will be removed in idf v5.0
@@ -138,12 +138,8 @@ int xt_clock_freq(void) __attribute__((deprecated));
         esp_rom_printf("%s:%d (%s)- assert failed!\n", __FILE__, __LINE__,  \
                    __FUNCTION__);                                           \
     }
-#else /* CONFIG_FREERTOS_ASSERT_FAIL_ABORT */
-#define configASSERT(a) if (unlikely(!(a))) {                               \
-        esp_rom_printf("%s:%d (%s)- assert failed!\n", __FILE__, __LINE__,  \
-                   __FUNCTION__);                                           \
-        abort();                                                            \
-        }
+#elif defined(CONFIG_FREERTOS_ASSERT_FAIL_ABORT)
+#define configASSERT(a) assert(a)
 #endif
 
 #if CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION