Add some assertion points to timers.c.
diff --git a/Source/timers.c b/Source/timers.c
index 88959ed..5b29f55 100644
--- a/Source/timers.c
+++ b/Source/timers.c
@@ -149,7 +149,7 @@
* timer list does not contain any timers then return 0 and set *pxListWasEmpty
* to pdTRUE.
*/
-static portTickType prvLookForExpiredTimer( portBASE_TYPE *pxListWasEmpty ) PRIVILEGED_FUNCTION;
+static portTickType prvGetNextExpireTime( portBASE_TYPE *pxListWasEmpty ) PRIVILEGED_FUNCTION;
/*
* If a timer has expired, process it. Otherwise, block the timer service task
@@ -251,6 +251,7 @@
static void prvProcessExpiredTimer( portTickType xNextExpireTime, portTickType xTimeNow )
{
xTIMER *pxTimer;
+portBASE_TYPE xResult;
/* Remove the timer from the list of active timers. A check has already
been performed to ensure the list is not empty. */
@@ -271,7 +272,9 @@
{
/* The timer expired before it was added to the active timer
list. Reload it now. */
- xTimerGenericCommand( pxTimer, tmrCOMMAND_START, xNextExpireTime, NULL, tmrNO_DELAY );
+ xResult = xTimerGenericCommand( pxTimer, tmrCOMMAND_START, xNextExpireTime, NULL, tmrNO_DELAY );
+ configASSERT( xResult );
+ ( void ) xResult;
}
}
@@ -292,7 +295,7 @@
{
/* Query the timers list to see if it contains any timers, and if so,
obtain the time at which the next timer will expire. */
- xNextExpireTime = prvLookForExpiredTimer( &xListWasEmpty );
+ xNextExpireTime = prvGetNextExpireTime( &xListWasEmpty );
/* If a timer has expired, process it. Otherwise, block this task
until either a timer does expire, or a command is received. */
@@ -322,6 +325,7 @@
/* The tick count has not overflowed, has the timer expired? */
if( ( xListWasEmpty == pdFALSE ) && ( xNextExpireTime <= xTimeNow ) )
{
+ xTaskResumeAll();
prvProcessExpiredTimer( xNextExpireTime, xTimeNow );
}
else
@@ -333,21 +337,26 @@
be reached unless xNextExpireTime > xTimeNow, except in the
case when the current timer list is empty. */
vQueueWaitForMessageRestricted( xTimerQueue, ( xNextExpireTime - xTimeNow ) );
+
+ if( xTaskResumeAll() == pdFALSE )
+ {
+ /* Yield to wait for either a command to arrive, or the block time
+ to expire. If a command arrived between the critical section being
+ exited and this yield then the yield will not cause the task
+ to block. */
+ portYIELD_WITHIN_API();
+ }
}
}
- }
- if( xTaskResumeAll() == pdFALSE )
- {
- /* Yield to wait for either a command to arrive, or the block time
- to expire. If a command arrived between the critical section being
- exited and this yield then the yield will not cause the task
- to block. */
- portYIELD_WITHIN_API();
+ else
+ {
+ xTaskResumeAll();
+ }
}
}
/*-----------------------------------------------------------*/
-static portTickType prvLookForExpiredTimer( portBASE_TYPE *pxListWasEmpty )
+static portTickType prvGetNextExpireTime( portBASE_TYPE *pxListWasEmpty )
{
portTickType xNextExpireTime;
@@ -441,7 +450,7 @@
{
xTIMER_MESSAGE xMessage;
xTIMER *pxTimer;
-portBASE_TYPE xTimerListsWereSwitched;
+portBASE_TYPE xTimerListsWereSwitched, xResult;
portTickType xTimeNow;
/* In this case the xTimerListsWereSwitched parameter is not used, but it
@@ -476,7 +485,9 @@
if( pxTimer->uxAutoReload == pdTRUE )
{
- xTimerGenericCommand( pxTimer, tmrCOMMAND_START, xMessage.xMessageValue + pxTimer->xTimerPeriodInTicks, NULL, tmrNO_DELAY );
+ xResult = xTimerGenericCommand( pxTimer, tmrCOMMAND_START, xMessage.xMessageValue + pxTimer->xTimerPeriodInTicks, NULL, tmrNO_DELAY );
+ configASSERT( xResult );
+ ( void ) xResult;
}
}
break;
@@ -511,6 +522,7 @@
portTickType xNextExpireTime;
xList *pxTemp;
xTIMER *pxTimer;
+portBASE_TYPE xResult;
/* Remove compiler warnings if configASSERT() is not defined. */
( void ) xLastTime;
@@ -534,7 +546,9 @@
pxTimer->pxCallbackFunction( ( xTimerHandle ) pxTimer );
if( pxTimer->uxAutoReload == pdTRUE )
{
- xTimerGenericCommand( pxTimer, tmrCOMMAND_START, xNextExpireTime, NULL, tmrNO_DELAY );
+ xResult = xTimerGenericCommand( pxTimer, tmrCOMMAND_START, xNextExpireTime, NULL, tmrNO_DELAY );
+ configASSERT( xResult );
+ ( void ) xResult;
}
}