Kaynağa Gözat

Merge branch 'bugfix/freertos_oneshot_timer_active_after_expiry' into 'master'

freertos: Fixed a bug where xTimerIsTimerActive incorrectly returns pdTRUE from callback

Closes IDFGH-6353

See merge request espressif/esp-idf!19076
Sudeep Mohanty 3 yıl önce
ebeveyn
işleme
dadafb753f
1 değiştirilmiş dosya ile 5 ekleme ve 4 silme
  1. 5 4
      components/freertos/FreeRTOS-Kernel/timers.c

+ 5 - 4
components/freertos/FreeRTOS-Kernel/timers.c

@@ -856,9 +856,6 @@ PRIVILEGED_DATA portMUX_TYPE xTimerMux = portMUX_INITIALIZER_UNLOCKED;
                         {
                             /* The timer expired before it was added to the active
                              * timer list.  Process it now. */
-                            pxTimer->pxCallbackFunction( ( TimerHandle_t ) pxTimer );
-                            traceTIMER_EXPIRED( pxTimer );
-
                             if( ( pxTimer->ucStatus & tmrSTATUS_IS_AUTORELOAD ) != 0 )
                             {
                                 xResult = xTimerGenericCommand( pxTimer, tmrCOMMAND_START_DONT_TRACE, xMessage.u.xTimerParameters.xMessageValue + pxTimer->xTimerPeriodInTicks, NULL, tmrNO_DELAY );
@@ -867,8 +864,12 @@ PRIVILEGED_DATA portMUX_TYPE xTimerMux = portMUX_INITIALIZER_UNLOCKED;
                             }
                             else
                             {
-                                mtCOVERAGE_TEST_MARKER();
+                                pxTimer->ucStatus &= ( ( uint8_t ) ~tmrSTATUS_IS_ACTIVE );
                             }
+
+                            /* Call the timer callback. */
+                            traceTIMER_EXPIRED( pxTimer );
+                            pxTimer->pxCallbackFunction( ( TimerHandle_t ) pxTimer );
                         }
                         else
                         {