<SetRegEntry>
<Number>0</Number>
<Key>DLGDARM</Key>
- <Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=1215,201,1680,501,0)</Name>
+ <Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=1071,201,1536,501,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Name>-UV1115SAE -O2983 -S0 -C0 -P00 -N00("ARM CoreSight JTAG-DP") -D00(4BA00477) -L00(4) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO11 -FN1 -FC1000 -FD20000000 -FF0NEW_DEVICE -FL080000 -FS00 -FP0($$Device:ARMCM4_FP$Device\ARM\Flash\NEW_DEVICE.FLM)</Name>
</SetRegEntry>
</TargetDriverDllRegistry>
- <Breakpoint/>
+ <Breakpoint>
+ <Bp>
+ <Number>0</Number>
+ <Type>0</Type>
+ <LineNumber>614</LineNumber>
+ <EnabledFlag>1</EnabledFlag>
+ <Address>23132</Address>
+ <ByteObject>0</ByteObject>
+ <HtxType>0</HtxType>
+ <ManyObjects>0</ManyObjects>
+ <SizeOfObject>0</SizeOfObject>
+ <BreakByAccess>0</BreakByAccess>
+ <BreakIfRCount>1</BreakIfRCount>
+ <Filename>C:\Users\ribarry\Dev\FreeRTOS\WorkingCopy\FreeRTOS\Source\stream_buffer.c</Filename>
+ <ExecCommand></ExecCommand>
+ <Expression>\\RTOSDemo\../../../Source/stream_buffer.c\614</Expression>
+ </Bp>
+ </Breakpoint>
<WatchWindow1>
<Ww>
<count>0</count>
<DebugFlag>
<trace>0</trace>
<periodic>1</periodic>
- <aLwin>1</aLwin>
+ <aLwin>0</aLwin>
<aCover>0</aCover>
<aSer1>0</aSer1>
<aSer2>0</aSer2>
<aLa>0</aLa>
<aPa1>0</aPa1>
<AscS4>0</AscS4>
- <aSer4>0</aSer4>
+ <aSer4>1</aSer4>
<StkLoc>0</StkLoc>
<TrcWin>0</TrcWin>
<newCpu>0</newCpu>
static void prvExerciseSemaphoreAPI( void );\r
static void prvExerciseTaskNotificationAPI( void );\r
static void prvExerciseStreamBufferAPI( void );\r
+static void prvExerciseTimerAPI( void );\r
\r
/*\r
* Just configures any clocks and IO necessary.\r
*/\r
static void prvTimerCallback( TimerHandle_t xExpiredTimer );\r
\r
+/*\r
+ * The callback function and a function that is pended used when exercising the\r
+ * timer API.\r
+ */\r
+static void prvPendedFunctionCall( void *pvParameter1, uint32_t ulParameter2 );\r
+static void prvTestTimerCallback( TimerHandle_t xTimer );\r
+\r
/*-----------------------------------------------------------*/\r
\r
/* The handle of the queue used to communicate between tasks and between tasks\r
prvExerciseSemaphoreAPI();\r
prvExerciseTaskNotificationAPI();\r
prvExerciseStreamBufferAPI();\r
+ prvExerciseTimerAPI();\r
\r
/* For code coverage test purposes it is deleted by the Idle task. */\r
configASSERT( uxTaskGetStackHighWaterMark( NULL ) > 0 );\r
}\r
/*-----------------------------------------------------------*/\r
\r
+static void prvPendedFunctionCall( void *pvParameter1, uint32_t ulParameter2 )\r
+{\r
+uint32_t *pulCounter = ( uint32_t * ) pvParameter1;\r
+ \r
+ /* Increment the paramater to show the pended function has executed. */\r
+ ( *pulCounter )++;\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvTestTimerCallback( TimerHandle_t xTimer )\r
+{\r
+uint32_t ulTimerID;\r
+ \r
+ /* Increment the timer's ID to show the callback has executed. */\r
+ ulTimerID = ( uint32_t ) pvTimerGetTimerID( xTimer );\r
+ ulTimerID++;\r
+ vTimerSetTimerID( xTimer, ( void * ) ulTimerID );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvExerciseTimerAPI( void )\r
+{\r
+TimerHandle_t xTimer;\r
+const char * const pcTimerName = "TestTimer";\r
+const TickType_t x10ms = pdMS_TO_TICKS( 3 );\r
+uint32_t ulValueForTesting = 0;\r
+ \r
+ xTimer = xTimerCreate( pcTimerName, \r
+ x10ms,\r
+ pdFALSE, /* Created as a one shot timer. */\r
+ 0,\r
+ prvTestTimerCallback );\r
+ configASSERT( xTimer ); \r
+ configASSERT( xTimerIsTimerActive( xTimer ) == pdFALSE );\r
+ configASSERT( xTimerGetTimerDaemonTaskHandle() != NULL );\r
+ configASSERT( strcmp( pcTimerName, pcTimerGetName( xTimer ) ) == 0 );\r
+ configASSERT( xTimerGetPeriod( xTimer ) == x10ms );\r
+ configASSERT( xTimerGetExpiryTime( xTimer ) == 0 ); /* The timer has been created only. */\r
+ \r
+ /* Pend a function then wait for it to execute. All it does is increment\r
+ its parameter. */\r
+ xTimerPendFunctionCall( prvPendedFunctionCall, &ulValueForTesting, 0, 0 );\r
+ vTaskDelay( x10ms );\r
+ configASSERT( ulValueForTesting == 1 );\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, 0 );\r
+ vTaskDelay( 3UL * x10ms );\r
+ configASSERT( ( ( uint32_t ) ( pvTimerGetTimerID( xTimer ) ) ) == 1UL );\r
+ \r
+ /* Now change the timer to be an autoreload timer and check it executes\r
+ the expected number of times. */\r
+ vTimerSetReloadMode( xTimer, pdTRUE );\r
+ xTimerStart( xTimer, 0 );\r
+ vTaskDelay( 3UL * x10ms );\r
+ configASSERT( ( uint32_t ) ( pvTimerGetTimerID( xTimer ) ) > 3UL );\r
+ configASSERT( xTimerStop( xTimer, 0 ) != pdFAIL );\r
+ \r
+ /* Clean up at the end. */\r
+ xTimerDelete( xTimer, portMAX_DELAY );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
static void prvExerciseStreamBufferAPI( void )\r
{\r
uint8_t ucBuffer[ 10 ];\r
0 );\r
configASSERT( xReturned == sizeof( xRead ) );\r
configASSERT( xRead == x );\r
-\r
- xStreamBufferSendFromISR( xStreamBuffer,\r
- ( void * ) &x,\r
- sizeof( x ),\r
- NULL );\r
- configASSERT( xReturned == sizeof( x ) );\r
-\r
- xReturned = xStreamBufferReceiveFromISR( xStreamBuffer,\r
- ( void * ) &xRead,\r
- sizeof( xRead ),\r
- NULL );\r
- configASSERT( xReturned == sizeof( xRead ) );\r
- configASSERT( xRead == x );\r
configASSERT( xStreamBufferIsFull( xStreamBuffer ) == pdFALSE );\r
configASSERT( xStreamBufferIsEmpty( xStreamBuffer ) == pdTRUE );\r
configASSERT( xStreamBufferSpacesAvailable( xStreamBuffer ) == sizeof( ucBuffer ) );\r
test purposes. */\r
if( xTaskToDelete != NULL )\r
{\r
- vTaskDelete( xTaskToDelete );\r
- xTaskToDelete = NULL;\r
+ if( eTaskGetState( xTaskToDelete ) == eSuspended )\r
+ {\r
+ /* The task has finished its tests and can be deleted. */\r
+ vTaskDelete( xTaskToDelete );\r
+ xTaskToDelete = NULL;\r
+ }\r
}\r
\r
( void ) ulReadData;\r