kopia lustrzana https://github.com/espressif/esp-idf
freertos: Fixed a bug where xTimerIsTimerActive incorrectly returns pdTRUE from callback
This commit fixes the following: - Fixes a bug wherein the timer status is active for oneshot timers that expire before they are started. - Callback calls for periodic timers where made before the timers were auto-reloaded. - Timer expiry trace was being set after the timer callback is called. Closes https://github.com/espressif/esp-idf/issues/8014pull/9446/head
rodzic
12dcb95644
commit
5e1437deb8
|
@ -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
|
||||
{
|
||||
|
|
Ładowanie…
Reference in New Issue