]> git.sur5r.net Git - freertos/blob - Demo/MB96340_Softune/FreeRTOS_96348hs_SK16FX100PMC/Src/utility/taskutility.c
bd7836798ae1cc364ae9d66dcc6c01ebeb12b859
[freertos] / Demo / MB96340_Softune / FreeRTOS_96348hs_SK16FX100PMC / Src / utility / taskutility.c
1 /* THIS SAMPLE CODE IS PROVIDED AS IS AND IS SUBJECT TO ALTERATIONS. FUJITSU */\r
2 /* MICROELECTRONICS ACCEPTS NO RESPONSIBILITY OR LIABILITY FOR ANY ERRORS OR */\r
3 /* ELIGIBILITY FOR ANY PURPOSES.                                             */\r
4 /*                 (C) Fujitsu Microelectronics Europe GmbH                  */\r
5 /*------------------------------------------------------------------------\r
6   taskutility.C\r
7   - \r
8 -------------------------------------------------------------------------*/\r
9 \r
10  \r
11 /*************************@INCLUDE_START************************/\r
12 #include "mb96348hs.h"\r
13 #include "FreeRTOS.h"\r
14 #include "task.h"\r
15 \r
16 \r
17 static void vUART1Task( void *pvParameters );\r
18 \r
19 /**************************@INCLUDE_END*************************/\r
20 /*********************@GLOBAL_VARIABLES_START*******************/\r
21 const char ASCII[] = "0123456789ABCDEF";\r
22 \r
23 xTaskHandle UART_TaskHandle;\r
24 \r
25 void InitUart1(void)\r
26 {\r
27         /* Initialize UART asynchronous mode */\r
28         BGR1 = configCLKP1_CLOCK_HZ / 9600;     /* 9600 Baud @ CLKP1 - 56 MHz */\r
29                   \r
30         SCR1 = 0x17;    /* 8N1 */\r
31         SMR1 = 0x0d;    /* enable SOT3, Reset, normal mode */\r
32         SSR1 = 0x02;    /* LSB first, enable receive interrupts */\r
33   \r
34         PIER08_IE5 = 1;  /* enable input */\r
35         DDR08_D5 = 0;    /* switch P08_5 to input */\r
36         DDR08_D6 = 1;    /* switch P08_6 to output */\r
37 }\r
38 \r
39 void Putch1(char ch)         /* sends a char */\r
40 {\r
41   while (SSR1_TDRE == 0);    /* wait for transmit buffer empty  */\r
42   TDR1 = ch;                 /* put ch into buffer                      */\r
43 }\r
44 \r
45 char Getch1(void)            /* waits for and returns incomming char    */\r
46 {\r
47   volatile unsigned ch;\r
48   \r
49   while(SSR1_RDRF == 0);         /* wait for data received      */\r
50   if (SSR1_ORE)              /* overrun error           */\r
51   {\r
52     ch = RDR1;              /* reset error flags                */\r
53     return (char)(-1);\r
54   }\r
55   else\r
56   return (RDR1);            /* return char                      */\r
57 }\r
58 \r
59 void Puts1(const char *Name1)  /* Puts a String to UART */\r
60 {\r
61   volatile portSHORT i,len;\r
62   len = strlen(Name1);\r
63         \r
64   for (i=0; i<strlen(Name1); i++)   /* go through string                     */\r
65   {\r
66     if (Name1[i] == 10)\r
67       Putch1(13);\r
68     Putch1(Name1[i]);              /* send it out                           */\r
69   }\r
70 }\r
71 \r
72 void Puthex1(unsigned long n, unsigned char digits)\r
73 {\r
74    unsigned portCHAR digit=0,div=0,i;\r
75 \r
76    div=(4*(digits-1));  /* init shift divisor */\r
77    for (i=0;i<digits;i++)\r
78    {\r
79      digit = ((n >> div)&0xF); /* get hex-digit value */\r
80          Putch1(digit + ((digit < 0xA) ? '0' : 'A' - 0xA));\r
81      div-=4;                    /* next digit shift */\r
82    }\r
83 }\r
84 \r
85 void Putdec1(unsigned long x, int digits)\r
86 {\r
87         portSHORT i;\r
88         portCHAR buf[10],sign=1;\r
89         \r
90         if (digits < 0) {     /* should be print of zero? */\r
91           digits *= (-1);\r
92           sign =1;\r
93         }  \r
94         buf[digits]='\0';                       /* end sign of string */\r
95         \r
96         for (i=digits; i>0; i--) {\r
97                 buf[i-1] = ASCII[x % 10];\r
98                 x = x/10;\r
99         }\r
100 \r
101     if ( sign )\r
102     {\r
103           for (i=0; buf[i]=='0'; i++) { /* no print of zero */\r
104                 if ( i<digits-1)\r
105                         buf[i] = ' ';\r
106           }             \r
107     }\r
108     \r
109         Puts1(buf);                                     /* send string */\r
110 }\r
111 \r
112 void vTraceListTasks( unsigned portBASE_TYPE uxPriority )\r
113 {\r
114         portENTER_CRITICAL();\r
115         InitUart1();\r
116         portENTER_CRITICAL();\r
117         xTaskCreate( vUART1Task , ( signed portCHAR * ) "UART1",  ( unsigned portSHORT ) 2048, ( void * ) NULL, uxPriority, &UART_TaskHandle );\r
118 }\r
119 \r
120 static void vUART1Task( void *pvParameters )\r
121 {\r
122         portCHAR tasklist_buff[512];\r
123         portCHAR trace_buff[512];\r
124         unsigned portLONG trace_len;\r
125         signed portLONG i, j, l=0;\r
126         \r
127         unsigned portCHAR ch;   \r
128         \r
129         ( void ) pvParameters;\r
130         \r
131         Puts1("\n -------------MB96348 FreeRTOS DEMO Task List and Trace Utility----------- \n");\r
132 \r
133         for(;;)\r
134         {\r
135                 Puts1("\n\rPress any of the following keys for the corresponding functionality: ");\r
136 \r
137                 Puts1("\n\r1: To call vTaskList() and display current task status ");\r
138 \r
139                 Puts1("\n\r2: To call vTaskStartTrace() and to display trace results once the trace ends");\r
140 \r
141                 SSR1_RIE=1;\r
142 \r
143                 vTaskSuspend(NULL);\r
144 \r
145                 ch=Getch1();\r
146 \r
147                 switch ( ch ) \r
148                 {\r
149                         case '1':\r
150                                 vTaskList( ( signed char * ) tasklist_buff );\r
151                                 Puts1("\n\rThe current task list is as follows....");\r
152                                 Puts1("\n\r----------------------------------------------");\r
153                                 Puts1("\n\rName          State  Priority  Stack   Number");\r
154                                 Puts1("\n\r----------------------------------------------");\r
155                                 Puts1(tasklist_buff);\r
156                                 Puts1("\r----------------------------------------------");\r
157                                 break;\r
158 \r
159                         case '2':\r
160                                 vTaskStartTrace(( signed char * ) trace_buff, 512);\r
161                                 Puts1("\n\rThe trace started!!");\r
162                                 vTaskDelay( ( portTickType ) 500);\r
163                                 trace_len = ulTaskEndTrace();\r
164                                 Puts1("\n\rThe trace ended!!");\r
165                                 Puts1("\n\rThe trace is as follows....");\r
166                                 Puts1("\n\r--------------------------------------------------------");\r
167                                 Puts1("\n\r  Tick     | Task Number  |     Tick     | Task Number  |");\r
168                                 Puts1("\n\r--------------------------------------------------------\n\r");\r
169                                 \r
170                                 for( i = 0 ; i < trace_len ; i+=4 )\r
171                                 {\r
172                                         for( j = i+3 ; j >= i ; j-- )\r
173                                         {\r
174                                                 Puthex1(trace_buff[j],2);\r
175                                         }\r
176                                         Puts1("   |   ");\r
177                                         l++;\r
178                                         if ( l == 4)\r
179                                         {\r
180                                                 Puts1("\n");\r
181                                                 l = 0;\r
182                                         }       \r
183                                 }\r
184                                 Puts1("\r--------------------------------------------------------");\r
185                                 break;\r
186                                 \r
187                         default:\r
188                                 break;\r
189                 }\r
190                 Puts1("\n");\r
191         }\r
192 }\r
193 \r
194 __interrupt void UART1_RxISR ( void )\r
195 {\r
196         SSR1_RIE=0;\r
197         vTaskResume( UART_TaskHandle );\r
198 }\r