+ /* Avoid compiler warnings about unused parameter. */\r
+ ( void ) pvParameters;\r
+\r
+ xTimer = xTimerCreate( pcTimerName,\r
+ x100ms,\r
+ pdFALSE, /* Created as a one-shot timer. */\r
+ 0,\r
+ prvReloadModeTestTimerCallback );\r
+ configASSERT( xTimer );\r
+ configASSERT( xTimerIsTimerActive( xTimer ) == pdFALSE );\r
+ configASSERT( xTimerGetTimerDaemonTaskHandle() != NULL );\r
+ configASSERT( strcmp( pcTimerName, pcTimerGetName( xTimer ) ) == 0 );\r
+ configASSERT( xTimerGetPeriod( xTimer ) == x100ms );\r
+\r
+ /* Timer was created as a one-shot timer. Its callback just increments the\r
+ timer's ID - so set the ID to 0, let the timer run for a number of timeout\r
+ periods, then check the timer has only executed once. */\r
+ vTimerSetTimerID( xTimer, ( void * ) 0 );\r
+ xTimerStart( xTimer, portMAX_DELAY );\r
+ vTaskDelay( 3UL * x100ms );\r
+ configASSERT( ( ( uint32_t ) ( pvTimerGetTimerID( xTimer ) ) ) == 1UL );\r
+\r
+ /* Now change the timer to be an auto-reload timer and check it executes\r
+ the expected number of times. */\r
+ vTimerSetReloadMode( xTimer, pdTRUE );\r
+ vTimerSetTimerID( xTimer, ( void * ) 0 );\r
+ xTimerStart( xTimer, 0 );\r
+ vTaskDelay( ( 3UL * x100ms ) + ( x100ms / 2UL ) ); /* Three full periods. */\r
+ configASSERT( ( uint32_t ) ( pvTimerGetTimerID( xTimer ) ) == 3UL );\r
+ configASSERT( xTimerStop( xTimer, 0 ) != pdFAIL );\r
+\r
+ /* Now change the timer back to be a one-shot timer and check it only\r
+ executes once. */\r
+ vTimerSetReloadMode( xTimer, pdFALSE );\r
+ vTimerSetTimerID( xTimer, ( void * ) 0 );\r
+ xTimerStart( xTimer, 0 );\r
+ vTaskDelay( 3UL * x100ms );\r
+ configASSERT( xTimerStop( xTimer, 0 ) != pdFAIL );\r
+ configASSERT( ( uint32_t ) ( pvTimerGetTimerID( xTimer ) ) == 1UL );\r
+\r
+ /* Clean up at the end. */\r
+ xTimerDelete( xTimer, portMAX_DELAY );\r
+ vTaskDelete( NULL );\r
+}\r