]> git.sur5r.net Git - freertos/blobdiff - Demo/MB91460_Softune/SRC/utility/taskutility.c
Get the trace utility and co-routines working.
[freertos] / Demo / MB91460_Softune / SRC / utility / taskutility.c
index b23f633f270729dcc70e590b663e67cb678a7e66..3a756ca360c47695b1e533efa145c21dc45fd651 100644 (file)
@@ -10,7 +10,7 @@
 #include "vectors.h"\r
 #include "FreeRTOS.h"\r
 #include "task.h"\r
-#include "semphr.h"\r
+#include "queue.h"\r
 \r
 static void vUART5Task( void *pvParameters );\r
 \r
@@ -18,7 +18,8 @@ const char                    ASCII[] = "0123456789ABCDEF";
 \r
 void                           vInitUart5( void );\r
 \r
-xSemaphoreHandle       xSemaphore;\r
+\r
+static xQueueHandle xQueue;\r
 \r
 void vInitUart5( void )\r
 {\r
@@ -65,7 +66,7 @@ void Puts5( const char *Name5 ) /* Puts a String to UART */
        volatile portSHORT      i, len;\r
        len = strlen( Name5 );\r
 \r
-       for( i = 0; i < strlen(Name5); i++ )    /* go through string */\r
+       for( i = 0; i < len; i++ )      /* go through string */\r
        {\r
                if( Name5[i] == 10 )\r
                {\r
@@ -124,25 +125,26 @@ void Putdec5( unsigned long x, int digits )
 \r
 void vUtilityStartTraceTask( unsigned portBASE_TYPE uxPriority )\r
 {\r
-       portENTER_CRITICAL();\r
-       vInitUart5();\r
-       portENTER_CRITICAL();\r
-\r
-       vSemaphoreCreateBinary( xSemaphore );\r
+       xQueue = xQueueCreate( 5, sizeof( char ) );\r
 \r
-       if( xSemaphore != NULL )\r
+       if( xQueue != NULL )\r
        {\r
-               xTaskCreate( vUART5Task, (signed portCHAR *) "UART4", ( unsigned portSHORT ) 2048, ( void * ) NULL, uxPriority, NULL );\r
+               portENTER_CRITICAL();\r
+               vInitUart5();\r
+               portENTER_CRITICAL();\r
+\r
+               xTaskCreate( vUART5Task, (signed portCHAR *) "UART5", configMINIMAL_STACK_SIZE * 2, ( void * ) NULL, uxPriority, NULL );\r
        }\r
 }\r
 \r
 static void vUART5Task( void *pvParameters )\r
 {\r
-       portCHAR                        tasklist_buff[512], trace_buff[512];\r
+       static portCHAR buff[ 900 ] = { 0 };\r
        unsigned portLONG       trace_len, j;\r
 \r
        unsigned portCHAR       ch;\r
 \r
+       SSR05_RIE = 1;\r
        Puts5( "\n -------------MB91467D FreeRTOS DEMO Task List and Trace Utility----------- \n" );\r
 \r
        for( ;; )\r
@@ -153,28 +155,24 @@ static void vUART5Task( void *pvParameters )
 \r
                Puts5( "\n\r2: To call vTaskStartTrace() and to display trace results once the trace ends" );\r
 \r
-               SSR05_RIE = 1;\r
-\r
                /* Block on the semaphore.  The UART interrupt will use the semaphore to\r
                wake this task when required. */\r
-               xSemaphoreTake( xSemaphore, portMAX_DELAY );\r
-\r
-               ch = Getch5();\r
+               xQueueReceive( xQueue, &ch, portMAX_DELAY );\r
 \r
                switch( ch )\r
                {\r
                        case '1':\r
-                               vTaskList( (signed char *) tasklist_buff );\r
+                               vTaskList( (signed char *) buff );\r
                                Puts5( "\n\rThe current task list is as follows...." );\r
                                Puts5( "\n\r----------------------------------------------" );\r
                                Puts5( "\n\rName                  State  Priority  Stack   Number" );\r
                                Puts5( "\n\r----------------------------------------------" );\r
-                               Puts5( tasklist_buff );\r
+                               Puts5( buff );\r
                                Puts5( "\r----------------------------------------------" );\r
                                break;\r
 \r
                        case '2':\r
-                               vTaskStartTrace( (signed char *) trace_buff, 512 );\r
+                               vTaskStartTrace( (signed char *) buff, 512 );\r
                                Puts5( "\n\rThe trace started!!" );\r
                                vTaskDelay( (portTickType) 450 );\r
                                trace_len = ulTaskEndTrace();\r
@@ -185,7 +183,7 @@ static void vUART5Task( void *pvParameters )
                                Puts5( "\n\r--------------------------------------------------------\n\r" );\r
                                for( j = 0; j < trace_len; j++ )\r
                                {\r
-                                       Puthex5( trace_buff[j], 2 );\r
+                                       Puthex5( buff[j], 2 );\r
                                        if( j % 4 == 3 )\r
                                        {\r
                                                Puts5( "   |   " );\r
@@ -210,6 +208,8 @@ static void vUART5Task( void *pvParameters )
 \r
 __interrupt void UART5_RxISR( void )\r
 {\r
-       SSR05_RIE = 0;\r
-       xSemaphoreGiveFromISR( xSemaphore, pdFALSE );\r
+unsigned portCHAR ch;\r
+\r
+       ch = RDR05;\r
+       xQueueSendFromISR( xQueue, &ch, pdFALSE );\r
 }\r