]> begriffs open source - freertos/blob - Demo/MB96340_Softune/FreeRTOS_96348hs_FLASHCAN100P340/Src/utility/taskutility.c
Increase stack size.
[freertos] / Demo / MB96340_Softune / FreeRTOS_96348hs_FLASHCAN100P340 / 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 vUART2Task( 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 InitUart2(void)\r
26 {\r
27         /* Initialize UART asynchronous mode */\r
28         BGR2 = configCLKP1_CLOCK_HZ / 9600;     /* 9600 Baud @ CLKP1 - 56 MHz */\r
29                   \r
30         SCR2 = 0x17;    /* 8N1 */\r
31         SMR2 = 0x0d;    /* enable SOT3, Reset, normal mode */\r
32         SSR2 = 0x02;    /* LSB first, enable receive interrupts */\r
33   \r
34         PIER05_IE0 = 1;  /* enable input */\r
35         DDR05_D0 = 0;    /* switch P05_0 to input */\r
36         DDR05_D1 = 1;    /* switch P05_1 to output */\r
37         \r
38 }\r
39 \r
40 void Putch2(char ch)         /* sends a char */\r
41 {\r
42   while (SSR2_TDRE == 0);    /* wait for transmit buffer empty  */\r
43   TDR2 = ch;                 /* put ch into buffer                      */\r
44 }\r
45 \r
46 char Getch2(void)            /* waits for and returns incomming char    */\r
47 {\r
48   volatile unsigned ch;\r
49   \r
50   while(SSR2_RDRF == 0);         /* wait for data received      */\r
51   if (SSR2_ORE)              /* overrun error           */\r
52   {\r
53     ch = RDR2;              /* reset error flags                */\r
54     return (char)(-1);\r
55   }\r
56   else\r
57   return (RDR2);            /* return char                      */\r
58 }\r
59 \r
60 void Puts2(const char *Name2)  /* Puts a String to UART */\r
61 {\r
62   volatile portSHORT i,len;\r
63   len = strlen(Name2);\r
64         \r
65   for (i=0; i<strlen(Name2); i++)   /* go through string                     */\r
66   {\r
67     if (Name2[i] == 10)\r
68       Putch2(13);\r
69     Putch2(Name2[i]);              /* send it out                           */\r
70   }\r
71 }\r
72 \r
73 void Puthex2(unsigned long n, unsigned char digits)\r
74 {\r
75    unsigned portCHAR digit=0,div=0,i;\r
76 \r
77    div=(4*(digits-1));  /* init shift divisor */\r
78    for (i=0;i<digits;i++)\r
79    {\r
80      digit = ((n >> div)&0xF); /* get hex-digit value */\r
81          Putch2(digit + ((digit < 0xA) ? '0' : 'A' - 0xA));\r
82      div-=4;                    /* next digit shift */\r
83    }\r
84 }\r
85 \r
86 void Putdec2(unsigned long x, int digits)\r
87 {\r
88         portSHORT i;\r
89         portCHAR buf[10],sign=1;\r
90         \r
91         if (digits < 0) {     /* should be print of zero? */\r
92           digits *= (-1);\r
93           sign =1;\r
94         }  \r
95         buf[digits]='\0';                       /* end sign of string */\r
96         \r
97         for (i=digits; i>0; i--) {\r
98                 buf[i-1] = ASCII[x % 10];\r
99                 x = x/10;\r
100         }\r
101 \r
102     if ( sign )\r
103     {\r
104           for (i=0; buf[i]=='0'; i++) { /* no print of zero */\r
105                 if ( i<digits-1)\r
106                         buf[i] = ' ';\r
107           }             \r
108     }\r
109     \r
110         Puts2(buf);                                     /* send string */\r
111 }\r
112 \r
113 void vTraceListTasks( unsigned portBASE_TYPE uxPriority )\r
114 {\r
115         portENTER_CRITICAL();\r
116         InitUart2();\r
117         portENTER_CRITICAL();\r
118         xTaskCreate( vUART2Task , ( signed portCHAR * ) "UART2",  ( unsigned portSHORT ) 2048, ( void * ) NULL, uxPriority, &UART_TaskHandle );\r
119 }\r
120 \r
121 static void vUART2Task( void *pvParameters )\r
122 {\r
123         portCHAR tasklist_buff[512];\r
124         portCHAR trace_buff[512];\r
125         unsigned portLONG trace_len;\r
126         signed portLONG i, j, l=0;\r
127         \r
128         unsigned portCHAR ch;   \r
129         \r
130         ( void ) pvParameters;\r
131         \r
132         Puts2("\n -------------MB96348 FreeRTOS DEMO Task List and Trace Utility----------- \n");\r
133 \r
134         for(;;)\r
135         {\r
136                 Puts2("\n\rPress any of the following keys for the corresponding functionality: ");\r
137 \r
138                 Puts2("\n\r1: To call vTaskList() and display current task status ");\r
139 \r
140                 Puts2("\n\r2: To call vTaskStartTrace() and to display trace results once the trace ends");\r
141 \r
142                 SSR2_RIE=1;\r
143 \r
144                 vTaskSuspend(NULL);\r
145 \r
146                 ch=Getch2();\r
147 \r
148                 switch ( ch ) \r
149                 {\r
150                         case '1':\r
151                                 vTaskList( ( signed char * ) tasklist_buff );\r
152                                 Puts2("\n\rThe current task list is as follows....");\r
153                                 Puts2("\n\r----------------------------------------------");\r
154                                 Puts2("\n\rName          State  Priority  Stack   Number");\r
155                                 Puts2("\n\r----------------------------------------------");\r
156                                 Puts2(tasklist_buff);\r
157                                 Puts2("\r----------------------------------------------");\r
158                                 break;\r
159 \r
160                         case '2':\r
161                                 vTaskStartTrace(( signed char * ) trace_buff, 512);\r
162                                 Puts2("\n\rThe trace started!!");\r
163                                 vTaskDelay( ( portTickType ) 500);\r
164                                 trace_len = ulTaskEndTrace();\r
165                                 Puts2("\n\rThe trace ended!!");\r
166                                 Puts2("\n\rThe trace is as follows....");\r
167                                 Puts2("\n\r--------------------------------------------------------");\r
168                                 Puts2("\n\r  Tick     | Task Number  |     Tick     | Task Number  |");\r
169                                 Puts2("\n\r--------------------------------------------------------\n\r");\r
170                                 \r
171                                 for( i = 0 ; i < trace_len ; i+=4 )\r
172                                 {\r
173                                         for( j = i+3 ; j >= i ; j-- )\r
174                                         {\r
175                                                 Puthex2(trace_buff[j],2);\r
176                                         }\r
177                                         Puts2("   |   ");\r
178                                         l++;\r
179                                         if ( l == 4)\r
180                                         {\r
181                                                 Puts2("\n");\r
182                                                 l = 0;\r
183                                         }       \r
184                                 }\r
185                                 Puts2("\r--------------------------------------------------------");\r
186                                 break;\r
187                                 \r
188                         default:\r
189                                 break;\r
190                 }\r
191                 Puts2("\n");\r
192         }\r
193 }\r
194 \r
195 __interrupt void UART2_RxISR ( void )\r
196 {\r
197         SSR2_RIE=0;\r
198         vTaskResume( UART_TaskHandle );\r
199 }\r