Please see my note book http://mbed.org/users/kenjiArai/notebook/freertos-on-mbed-board-with-mbed-cloud-ide--never-/

This is too old.
Below is another FreeRTOS on mbed.
http://developer.mbed.org/users/rgrover1/code/FreeRTOS/
I don't know it works well or not.
I have not evaluated it.

Committer:
kenjiArai
Date:
Sat Jan 01 11:17:45 2011 +0000
Revision:
0:d4960fcea8ff

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 0:d4960fcea8ff 1 /*
kenjiArai 0:d4960fcea8ff 2 FreeRTOS V6.0.3 - Copyright (C) 2010 Real Time Engineers Ltd.
kenjiArai 0:d4960fcea8ff 3
kenjiArai 0:d4960fcea8ff 4 ***************************************************************************
kenjiArai 0:d4960fcea8ff 5 * *
kenjiArai 0:d4960fcea8ff 6 * If you are: *
kenjiArai 0:d4960fcea8ff 7 * *
kenjiArai 0:d4960fcea8ff 8 * + New to FreeRTOS, *
kenjiArai 0:d4960fcea8ff 9 * + Wanting to learn FreeRTOS or multitasking in general quickly *
kenjiArai 0:d4960fcea8ff 10 * + Looking for basic training, *
kenjiArai 0:d4960fcea8ff 11 * + Wanting to improve your FreeRTOS skills and productivity *
kenjiArai 0:d4960fcea8ff 12 * *
kenjiArai 0:d4960fcea8ff 13 * then take a look at the FreeRTOS eBook *
kenjiArai 0:d4960fcea8ff 14 * *
kenjiArai 0:d4960fcea8ff 15 * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
kenjiArai 0:d4960fcea8ff 16 * http://www.FreeRTOS.org/Documentation *
kenjiArai 0:d4960fcea8ff 17 * *
kenjiArai 0:d4960fcea8ff 18 * A pdf reference manual is also available. Both are usually delivered *
kenjiArai 0:d4960fcea8ff 19 * to your inbox within 20 minutes to two hours when purchased between 8am *
kenjiArai 0:d4960fcea8ff 20 * and 8pm GMT (although please allow up to 24 hours in case of *
kenjiArai 0:d4960fcea8ff 21 * exceptional circumstances). Thank you for your support! *
kenjiArai 0:d4960fcea8ff 22 * *
kenjiArai 0:d4960fcea8ff 23 ***************************************************************************
kenjiArai 0:d4960fcea8ff 24
kenjiArai 0:d4960fcea8ff 25 This file is part of the FreeRTOS distribution.
kenjiArai 0:d4960fcea8ff 26
kenjiArai 0:d4960fcea8ff 27 FreeRTOS is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License (version 2) as published by the Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
kenjiArai 0:d4960fcea8ff 28 ***NOTE*** The exception to the GPL is included to allow you to distribute a combined work that includes FreeRTOS without being obliged to provide the
kenjiArai 0:d4960fcea8ff 29 source code for proprietary components outside of the FreeRTOS kernel.
kenjiArai 0:d4960fcea8ff 30 FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
kenjiArai 0:d4960fcea8ff 31 more details. You should have received a copy of the GNU General Public License and the FreeRTOS license exception along with FreeRTOS; if not it can be viewed here: http://www.freertos.org/a00114.html and also obtained
kenjiArai 0:d4960fcea8ff 32 by writing to Richard Barry, contact details for whom are available on the FreeRTOS WEB site.
kenjiArai 0:d4960fcea8ff 33
kenjiArai 0:d4960fcea8ff 34 1 tab == 4 spaces!
kenjiArai 0:d4960fcea8ff 35
kenjiArai 0:d4960fcea8ff 36 http://www.FreeRTOS.org - Documentation, latest information, license and contact details.
kenjiArai 0:d4960fcea8ff 37
kenjiArai 0:d4960fcea8ff 38 http://www.SafeRTOS.com - A version that is certified for use in safety critical systems.
kenjiArai 0:d4960fcea8ff 39
kenjiArai 0:d4960fcea8ff 40 http://www.OpenRTOS.com - Commercial support, development, porting, licensing and training services.
kenjiArai 0:d4960fcea8ff 41 */
kenjiArai 0:d4960fcea8ff 42
kenjiArai 0:d4960fcea8ff 43 //#error The batch file Demo\CORTEX_LPC1768_GCC_RedSuite\CreateProjectDirectoryStructure.bat must be executed before the first build. After executing the batch file hit F5 to refrech the Eclipse project, then delete this line.
kenjiArai 0:d4960fcea8ff 44
kenjiArai 0:d4960fcea8ff 45 /*
kenjiArai 0:d4960fcea8ff 46 * Creates all the demo application tasks, then starts the scheduler. The WEB documentation provides more details of the standard demo application tasks
kenjiArai 0:d4960fcea8ff 47 * (which just exist to test the kernel port and provide an example of how to use each FreeRTOS API function).
kenjiArai 0:d4960fcea8ff 48 *
kenjiArai 0:d4960fcea8ff 49 * In addition to the standard demo tasks, the following tasks and tests are defined and/or created within this file:
kenjiArai 0:d4960fcea8ff 50 *
kenjiArai 0:d4960fcea8ff 51 * "Check" hook - This only executes fully every five seconds from the tick hook. Its main function is to check that all the standard demo tasks are
kenjiArai 0:d4960fcea8ff 52 * still operational. The status can be viewed using on the Task Stats page served by the WEB server.
kenjiArai 0:d4960fcea8ff 53 *
kenjiArai 0:d4960fcea8ff 54 * "uIP" task - This is the task that handles the uIP stack. All TCP/IP processing is performed in this task.
kenjiArai 0:d4960fcea8ff 55 *
kenjiArai 0:d4960fcea8ff 56 * "USB" task - Enumerates the USB device as a CDC class, then echoes back all received characters with a configurable offset (for example, if the offset
kenjiArai 0:d4960fcea8ff 57 * is 1 and 'A' is received then 'B' will be sent back). A dumb terminal such as Hyperterminal can be used to talk to the USB task.
kenjiArai 0:d4960fcea8ff 58 */
kenjiArai 0:d4960fcea8ff 59 /*----------------------------------------------------------------------------------------------------------*/
kenjiArai 0:d4960fcea8ff 60 /*
kenjiArai 0:d4960fcea8ff 61 * Modified for mbed IDE development environment
kenjiArai 0:d4960fcea8ff 62 * By Kenji Arai / JH1PJL on October 28th,2010
kenjiArai 0:d4960fcea8ff 63 * October 28th,2010
kenjiArai 0:d4960fcea8ff 64 */
kenjiArai 0:d4960fcea8ff 65
kenjiArai 0:d4960fcea8ff 66 #include <stdio.h>
kenjiArai 0:d4960fcea8ff 67
kenjiArai 0:d4960fcea8ff 68 #include "FreeRTOS.h"
kenjiArai 0:d4960fcea8ff 69 #include "task.h"
kenjiArai 0:d4960fcea8ff 70
kenjiArai 0:d4960fcea8ff 71 #include "integer.h"
kenjiArai 0:d4960fcea8ff 72 #include "BlockQ.h"
kenjiArai 0:d4960fcea8ff 73 #include "blocktim.h"
kenjiArai 0:d4960fcea8ff 74 #include "flash.h"
kenjiArai 0:d4960fcea8ff 75 #include "partest.h"
kenjiArai 0:d4960fcea8ff 76 #include "semtest.h"
kenjiArai 0:d4960fcea8ff 77 #include "PollQ.h"
kenjiArai 0:d4960fcea8ff 78 #include "GenQTest.h"
kenjiArai 0:d4960fcea8ff 79 #include "QPeek.h"
kenjiArai 0:d4960fcea8ff 80 #include "queue.h"
kenjiArai 0:d4960fcea8ff 81 #include "recmutex.h"
kenjiArai 0:d4960fcea8ff 82
kenjiArai 0:d4960fcea8ff 83 /*----------------------------------------------------------------------------------------------------------*/
kenjiArai 0:d4960fcea8ff 84 /* The time between cycles of the 'check' functionality (defined within the tick hook. */
kenjiArai 0:d4960fcea8ff 85 #define mainCHECK_DELAY ( ( portTickType ) 5000 / portTICK_RATE_MS )
kenjiArai 0:d4960fcea8ff 86
kenjiArai 0:d4960fcea8ff 87 /* Task priorities. */
kenjiArai 0:d4960fcea8ff 88 #define mainQUEUE_POLL_PRIORITY ( tskIDLE_PRIORITY + 2 )
kenjiArai 0:d4960fcea8ff 89 #define mainSEM_TEST_PRIORITY ( tskIDLE_PRIORITY + 1 )
kenjiArai 0:d4960fcea8ff 90 #define mainBLOCK_Q_PRIORITY ( tskIDLE_PRIORITY + 2 )
kenjiArai 0:d4960fcea8ff 91 #define mainUIP_TASK_PRIORITY ( tskIDLE_PRIORITY + 3 )
kenjiArai 0:d4960fcea8ff 92 #define mainINTEGER_TASK_PRIORITY ( tskIDLE_PRIORITY )
kenjiArai 0:d4960fcea8ff 93 #define mainGEN_QUEUE_TASK_PRIORITY ( tskIDLE_PRIORITY )
kenjiArai 0:d4960fcea8ff 94 #define mainFLASH_TASK_PRIORITY ( tskIDLE_PRIORITY + 2 )
kenjiArai 0:d4960fcea8ff 95
kenjiArai 0:d4960fcea8ff 96 /* LED */
kenjiArai 0:d4960fcea8ff 97 #define LED1 0
kenjiArai 0:d4960fcea8ff 98 #define LED2 1
kenjiArai 0:d4960fcea8ff 99 #define LED3 2
kenjiArai 0:d4960fcea8ff 100 #define LED4 3
kenjiArai 0:d4960fcea8ff 101
kenjiArai 0:d4960fcea8ff 102 // FLASH
kenjiArai 0:d4960fcea8ff 103 #define FLASH_SETUP 1
kenjiArai 0:d4960fcea8ff 104 #define FLASHCFG_Val 0x0000303A
kenjiArai 0:d4960fcea8ff 105
kenjiArai 0:d4960fcea8ff 106 // Define clocks
kenjiArai 0:d4960fcea8ff 107 #define XTAL (12000000UL) /* Oscillator frequency */
kenjiArai 0:d4960fcea8ff 108 #define OSC_CLK ( XTAL) /* Main oscillator frequency */
kenjiArai 0:d4960fcea8ff 109 #define RTC_CLK ( 32000UL) /* RTC oscillator frequency */
kenjiArai 0:d4960fcea8ff 110 #define IRC_OSC ( 4000000UL) /* Internal RC oscillator frequency */
kenjiArai 0:d4960fcea8ff 111
kenjiArai 0:d4960fcea8ff 112 /*----------------------------------------------------------------------------------------------------------*/
kenjiArai 0:d4960fcea8ff 113 // Configure the hardware for mbed board
kenjiArai 0:d4960fcea8ff 114 static void prvSetupHardware( void );
kenjiArai 0:d4960fcea8ff 115 static void prvSetupSystem( void );
kenjiArai 0:d4960fcea8ff 116
kenjiArai 0:d4960fcea8ff 117 //Control tasks for JH1PJL
kenjiArai 0:d4960fcea8ff 118 void vTask1( void *pvParameters );
kenjiArai 0:d4960fcea8ff 119 void vTask2( void *pvParameters );
kenjiArai 0:d4960fcea8ff 120 void vTask3( void *pvParameters );
kenjiArai 0:d4960fcea8ff 121 void vTask4( void *pvParameters );
kenjiArai 0:d4960fcea8ff 122 void vTask5( void *pvParameters );
kenjiArai 0:d4960fcea8ff 123 void vTask6( void *pvParameters );
kenjiArai 0:d4960fcea8ff 124 void vTask7( void *pvParameters );
kenjiArai 0:d4960fcea8ff 125
kenjiArai 0:d4960fcea8ff 126 /*----------------------------------------------------------------------------------------------------------*/
kenjiArai 0:d4960fcea8ff 127 uint32_t SystemFrequency; /*!< System Clock Frequency (Core Clock) */
kenjiArai 0:d4960fcea8ff 128
kenjiArai 0:d4960fcea8ff 129 unsigned portBASE_TYPE uxHiWtrMrk_tsk1, uxHiWtrMrk_tsk2;
kenjiArai 0:d4960fcea8ff 130 unsigned portBASE_TYPE uxHiWtrMrk_tsk3, uxHiWtrMrk_tsk4, uxHiWtrMrk_tsk5;
kenjiArai 0:d4960fcea8ff 131 unsigned portBASE_TYPE uxHiWtrMrk_tsk6, uxHiWtrMrk_tsk7;
kenjiArai 0:d4960fcea8ff 132
kenjiArai 0:d4960fcea8ff 133 ////////////////////////////// Constant Data /////////////////////////////////////////////////////////////////
kenjiArai 0:d4960fcea8ff 134 /* ---------------------------< Copyright >---------------------------------------------------------------- */
kenjiArai 0:d4960fcea8ff 135 const uint8_t copyright[] = "Arai,Kenji / JH1PJL(c)2010 kenjia@sannet.ne.jp "__DATE__" (" __TIME__ ")";
kenjiArai 0:d4960fcea8ff 136 #if ( USE_XPRESSO == 1 )
kenjiArai 0:d4960fcea8ff 137 /* ---------------------------< Board >---------------------------------------------------------------- */
kenjiArai 0:d4960fcea8ff 138 const uint8_t board[] = "LPCXpresso LPC1768";
kenjiArai 0:d4960fcea8ff 139 /*----------------------------------------------------------------------------------------------------------*/
kenjiArai 0:d4960fcea8ff 140 #elif ( USE_MBED == 1 )
kenjiArai 0:d4960fcea8ff 141 /* ---------------------------< Board >---------------------------------------------------------------- */
kenjiArai 0:d4960fcea8ff 142 const uint8_t board[] = "med LPC1768";
kenjiArai 0:d4960fcea8ff 143 #else
kenjiArai 0:d4960fcea8ff 144 /* ---------------------------< Board >---------------------------------------------------------------- */
kenjiArai 0:d4960fcea8ff 145 const uint8_t board[] = "No identification";
kenjiArai 0:d4960fcea8ff 146 #endif
kenjiArai 0:d4960fcea8ff 147
kenjiArai 0:d4960fcea8ff 148 int main( void ){
kenjiArai 0:d4960fcea8ff 149 // char cIPAddress[ 16 ];
kenjiArai 0:d4960fcea8ff 150 /* Configure the hardware for mbed board */
kenjiArai 0:d4960fcea8ff 151 prvSetupHardware();
kenjiArai 0:d4960fcea8ff 152 prvSetupSystem();
kenjiArai 0:d4960fcea8ff 153
kenjiArai 0:d4960fcea8ff 154 /* Start the standard demo tasks. These are just here to exercise the kernel port and provide examples of how the FreeRTOS API can be used. */
kenjiArai 0:d4960fcea8ff 155 vStartBlockingQueueTasks( mainBLOCK_Q_PRIORITY );
kenjiArai 0:d4960fcea8ff 156 vCreateBlockTimeTasks();
kenjiArai 0:d4960fcea8ff 157 vStartSemaphoreTasks( mainSEM_TEST_PRIORITY );
kenjiArai 0:d4960fcea8ff 158 vStartPolledQueueTasks( mainQUEUE_POLL_PRIORITY );
kenjiArai 0:d4960fcea8ff 159 vStartIntegerMathTasks( mainINTEGER_TASK_PRIORITY );
kenjiArai 0:d4960fcea8ff 160 vStartGenericQueueTasks( mainGEN_QUEUE_TASK_PRIORITY );
kenjiArai 0:d4960fcea8ff 161 vStartQueuePeekTasks();
kenjiArai 0:d4960fcea8ff 162 vStartRecursiveMutexTasks();
kenjiArai 0:d4960fcea8ff 163
kenjiArai 0:d4960fcea8ff 164 // ??? Task
kenjiArai 0:d4960fcea8ff 165 xTaskCreate( vTask1, ( signed char * ) "Task1", ( ( unsigned short ) 96 ), ( void * ) NULL, tskIDLE_PRIORITY, NULL );
kenjiArai 0:d4960fcea8ff 166 // ??? Task
kenjiArai 0:d4960fcea8ff 167 xTaskCreate( vTask2, ( signed char * ) "Task2", ( ( unsigned short ) 96 ), ( void * ) NULL, tskIDLE_PRIORITY, NULL );
kenjiArai 0:d4960fcea8ff 168 // ??? Task
kenjiArai 0:d4960fcea8ff 169 xTaskCreate( vTask3, ( signed char * ) "Task3", ( ( unsigned short ) 96 ), ( void * ) NULL, tskIDLE_PRIORITY, NULL );
kenjiArai 0:d4960fcea8ff 170 // ??? Task
kenjiArai 0:d4960fcea8ff 171 xTaskCreate( vTask4, ( signed char * ) "Task4", ( ( unsigned short ) 96 ), ( void * ) NULL, tskIDLE_PRIORITY, NULL );
kenjiArai 0:d4960fcea8ff 172 // ??? Task
kenjiArai 0:d4960fcea8ff 173 xTaskCreate( vTask5, ( signed char * ) "Task5", ( ( unsigned short ) 96 ), ( void * ) NULL, tskIDLE_PRIORITY, NULL );
kenjiArai 0:d4960fcea8ff 174 // ??? Task
kenjiArai 0:d4960fcea8ff 175 xTaskCreate( vTask6, ( signed char * ) "Task6", ( ( unsigned short ) 96 ), ( void * ) NULL, tskIDLE_PRIORITY, NULL );
kenjiArai 0:d4960fcea8ff 176 // ??? Task
kenjiArai 0:d4960fcea8ff 177 xTaskCreate( vTask7, ( signed char * ) "Task7", ( ( unsigned short ) 96 ), ( void * ) NULL, tskIDLE_PRIORITY, NULL );
kenjiArai 0:d4960fcea8ff 178
kenjiArai 0:d4960fcea8ff 179 /* Start the scheduler. */
kenjiArai 0:d4960fcea8ff 180 vTaskStartScheduler();
kenjiArai 0:d4960fcea8ff 181
kenjiArai 0:d4960fcea8ff 182 /* Will only get here if there was insufficient memory to create the idle task. The idle task is created within vTaskStartScheduler(). */
kenjiArai 0:d4960fcea8ff 183 for( ;; );
kenjiArai 0:d4960fcea8ff 184 }
kenjiArai 0:d4960fcea8ff 185 /*----------------------------------------------------------------------------------------------------------*/
kenjiArai 0:d4960fcea8ff 186
kenjiArai 0:d4960fcea8ff 187 /***** TASK #1 ******/
kenjiArai 0:d4960fcea8ff 188 // ????
kenjiArai 0:d4960fcea8ff 189 void vTask1 ( void *pvParameters ){
kenjiArai 0:d4960fcea8ff 190 portTickType xLastCheckTime;
kenjiArai 0:d4960fcea8ff 191 portTickType xDelayTime;
kenjiArai 0:d4960fcea8ff 192
kenjiArai 0:d4960fcea8ff 193 xDelayTime = 125 / portTICK_RATE_MS;
kenjiArai 0:d4960fcea8ff 194 xLastCheckTime = xTaskGetTickCount();
kenjiArai 0:d4960fcea8ff 195 while(1){
kenjiArai 0:d4960fcea8ff 196 vTaskDelayUntil( &xLastCheckTime, xDelayTime );
kenjiArai 0:d4960fcea8ff 197 vParTestToggleLED( LED1 );
kenjiArai 0:d4960fcea8ff 198 uxHiWtrMrk_tsk1 = uxTaskGetStackHighWaterMark( NULL );
kenjiArai 0:d4960fcea8ff 199 }
kenjiArai 0:d4960fcea8ff 200 }
kenjiArai 0:d4960fcea8ff 201 /*----------------------------------------------------------------------------------------------------------*/
kenjiArai 0:d4960fcea8ff 202
kenjiArai 0:d4960fcea8ff 203 /***** TASK #2 ******/
kenjiArai 0:d4960fcea8ff 204 // ???
kenjiArai 0:d4960fcea8ff 205 void vTask2 ( void *pvParameters ){
kenjiArai 0:d4960fcea8ff 206 portTickType xLastCheckTime;
kenjiArai 0:d4960fcea8ff 207 portTickType xDelayTime;
kenjiArai 0:d4960fcea8ff 208
kenjiArai 0:d4960fcea8ff 209 xDelayTime = 250 / portTICK_RATE_MS;
kenjiArai 0:d4960fcea8ff 210 xLastCheckTime = xTaskGetTickCount();
kenjiArai 0:d4960fcea8ff 211 while(1){
kenjiArai 0:d4960fcea8ff 212 vTaskDelayUntil( &xLastCheckTime, xDelayTime );
kenjiArai 0:d4960fcea8ff 213 vParTestToggleLED( LED2 );
kenjiArai 0:d4960fcea8ff 214 uxHiWtrMrk_tsk2 = uxTaskGetStackHighWaterMark( NULL );
kenjiArai 0:d4960fcea8ff 215 }
kenjiArai 0:d4960fcea8ff 216 }
kenjiArai 0:d4960fcea8ff 217 /*----------------------------------------------------------------------------------------------------------*/
kenjiArai 0:d4960fcea8ff 218
kenjiArai 0:d4960fcea8ff 219 /***** TASK #3 ******/
kenjiArai 0:d4960fcea8ff 220 // ???
kenjiArai 0:d4960fcea8ff 221 void vTask3 ( void *pvParameters ){
kenjiArai 0:d4960fcea8ff 222 portTickType xLastCheckTime;
kenjiArai 0:d4960fcea8ff 223 portTickType xDelayTime;
kenjiArai 0:d4960fcea8ff 224
kenjiArai 0:d4960fcea8ff 225 xDelayTime = 500 / portTICK_RATE_MS;
kenjiArai 0:d4960fcea8ff 226 xLastCheckTime = xTaskGetTickCount();
kenjiArai 0:d4960fcea8ff 227 while(1){
kenjiArai 0:d4960fcea8ff 228 vTaskDelayUntil( &xLastCheckTime, xDelayTime );
kenjiArai 0:d4960fcea8ff 229 vParTestToggleLED( LED3 );
kenjiArai 0:d4960fcea8ff 230 uxHiWtrMrk_tsk2 = uxTaskGetStackHighWaterMark( NULL );
kenjiArai 0:d4960fcea8ff 231 }
kenjiArai 0:d4960fcea8ff 232 }
kenjiArai 0:d4960fcea8ff 233 /*----------------------------------------------------------------------------------------------------------*/
kenjiArai 0:d4960fcea8ff 234
kenjiArai 0:d4960fcea8ff 235 /***** TASK #4 ******/
kenjiArai 0:d4960fcea8ff 236 // ???
kenjiArai 0:d4960fcea8ff 237 void vTask4(void *pvParameters) {
kenjiArai 0:d4960fcea8ff 238 portTickType xLastCheckTime;
kenjiArai 0:d4960fcea8ff 239 portTickType xDelayTime;
kenjiArai 0:d4960fcea8ff 240
kenjiArai 0:d4960fcea8ff 241 xDelayTime = 1000 / portTICK_RATE_MS;
kenjiArai 0:d4960fcea8ff 242 xLastCheckTime = xTaskGetTickCount();
kenjiArai 0:d4960fcea8ff 243 while(1){
kenjiArai 0:d4960fcea8ff 244 vTaskDelayUntil( &xLastCheckTime, xDelayTime );
kenjiArai 0:d4960fcea8ff 245 vParTestToggleLED( LED4 );
kenjiArai 0:d4960fcea8ff 246 uxHiWtrMrk_tsk2 = uxTaskGetStackHighWaterMark( NULL );
kenjiArai 0:d4960fcea8ff 247 }
kenjiArai 0:d4960fcea8ff 248 }
kenjiArai 0:d4960fcea8ff 249 /*----------------------------------------------------------------------------------------------------------*/
kenjiArai 0:d4960fcea8ff 250
kenjiArai 0:d4960fcea8ff 251 /***** TASK #5 ******/
kenjiArai 0:d4960fcea8ff 252 // ?????
kenjiArai 0:d4960fcea8ff 253 void vTask5 ( void *pvParameters ){
kenjiArai 0:d4960fcea8ff 254
kenjiArai 0:d4960fcea8ff 255 vTaskDelay( 100 / portTICK_RATE_MS ); // Wait 0.1sec
kenjiArai 0:d4960fcea8ff 256 while(1){
kenjiArai 0:d4960fcea8ff 257 vTaskDelay( 10000 / portTICK_RATE_MS ); // Wait 10sec
kenjiArai 0:d4960fcea8ff 258 uxHiWtrMrk_tsk5 = uxTaskGetStackHighWaterMark( NULL );
kenjiArai 0:d4960fcea8ff 259 }
kenjiArai 0:d4960fcea8ff 260 }
kenjiArai 0:d4960fcea8ff 261 /*----------------------------------------------------------------------------------------------------------*/
kenjiArai 0:d4960fcea8ff 262
kenjiArai 0:d4960fcea8ff 263 /***** TASK #6 ******/
kenjiArai 0:d4960fcea8ff 264 // ????
kenjiArai 0:d4960fcea8ff 265 void vTask6(void *pvParameters) {
kenjiArai 0:d4960fcea8ff 266 portTickType xLastCheckTime;
kenjiArai 0:d4960fcea8ff 267 portTickType xDelayTime;
kenjiArai 0:d4960fcea8ff 268
kenjiArai 0:d4960fcea8ff 269 vTaskDelay( 200 / portTICK_RATE_MS ); // Wait
kenjiArai 0:d4960fcea8ff 270 xDelayTime = 25 / portTICK_RATE_MS;
kenjiArai 0:d4960fcea8ff 271 xLastCheckTime = xTaskGetTickCount(); // Need to initialize time prior to the first call to vTaskDelayUntil()
kenjiArai 0:d4960fcea8ff 272 while(1){
kenjiArai 0:d4960fcea8ff 273 vTaskDelayUntil( &xLastCheckTime, xDelayTime );
kenjiArai 0:d4960fcea8ff 274 uxHiWtrMrk_tsk6 = uxTaskGetStackHighWaterMark( NULL );
kenjiArai 0:d4960fcea8ff 275 }
kenjiArai 0:d4960fcea8ff 276 }
kenjiArai 0:d4960fcea8ff 277
kenjiArai 0:d4960fcea8ff 278 /***** TASK #7******/
kenjiArai 0:d4960fcea8ff 279 // ????
kenjiArai 0:d4960fcea8ff 280 void vTask7(void *pvParameters) {
kenjiArai 0:d4960fcea8ff 281 portTickType xLastCheckTime;
kenjiArai 0:d4960fcea8ff 282 portTickType xDelayTime;
kenjiArai 0:d4960fcea8ff 283
kenjiArai 0:d4960fcea8ff 284 xDelayTime = 10 / portTICK_RATE_MS; // 10mS interval
kenjiArai 0:d4960fcea8ff 285 xLastCheckTime = xTaskGetTickCount();
kenjiArai 0:d4960fcea8ff 286 while(1){
kenjiArai 0:d4960fcea8ff 287 vTaskDelayUntil( &xLastCheckTime, xDelayTime );
kenjiArai 0:d4960fcea8ff 288 uxHiWtrMrk_tsk7 = uxTaskGetStackHighWaterMark( NULL );
kenjiArai 0:d4960fcea8ff 289 }
kenjiArai 0:d4960fcea8ff 290 }
kenjiArai 0:d4960fcea8ff 291 /*----------------------------------------------------------------------------------------------------------*/
kenjiArai 0:d4960fcea8ff 292
kenjiArai 0:d4960fcea8ff 293 void vApplicationTickHook( void ){
kenjiArai 0:d4960fcea8ff 294 static unsigned long ulTicksSinceLastDisplay = 0;
kenjiArai 0:d4960fcea8ff 295
kenjiArai 0:d4960fcea8ff 296 /* Called from every tick interrupt as described in the comments at the top of this file.
kenjiArai 0:d4960fcea8ff 297 Have enough ticks passed to make it time to perform our health status check again? */
kenjiArai 0:d4960fcea8ff 298 ulTicksSinceLastDisplay++;
kenjiArai 0:d4960fcea8ff 299 if( ulTicksSinceLastDisplay >= mainCHECK_DELAY ){
kenjiArai 0:d4960fcea8ff 300 /* Reset the counter so these checks run again in mainCHECK_DELAY
kenjiArai 0:d4960fcea8ff 301 ticks time. */
kenjiArai 0:d4960fcea8ff 302 ulTicksSinceLastDisplay = 0;
kenjiArai 0:d4960fcea8ff 303 }
kenjiArai 0:d4960fcea8ff 304 }
kenjiArai 0:d4960fcea8ff 305 /*----------------------------------------------------------------------------------------------------------*/
kenjiArai 0:d4960fcea8ff 306
kenjiArai 0:d4960fcea8ff 307 char *pcGetTaskStatusMessage( void ){
kenjiArai 0:d4960fcea8ff 308 /* Not bothered about a critical section here. */
kenjiArai 0:d4960fcea8ff 309 return 0;
kenjiArai 0:d4960fcea8ff 310 }
kenjiArai 0:d4960fcea8ff 311 /*----------------------------------------------------------------------------------------------------------*/
kenjiArai 0:d4960fcea8ff 312
kenjiArai 0:d4960fcea8ff 313 void prvSetupSystem( void ){
kenjiArai 0:d4960fcea8ff 314 ;
kenjiArai 0:d4960fcea8ff 315 }
kenjiArai 0:d4960fcea8ff 316 /*----------------------------------------------------------------------------------------------------------*/
kenjiArai 0:d4960fcea8ff 317
kenjiArai 0:d4960fcea8ff 318 void prvSetupHardware( void ){
kenjiArai 0:d4960fcea8ff 319 /* Disable peripherals power. */
kenjiArai 0:d4960fcea8ff 320 LPC_SC->PCONP = 0;
kenjiArai 0:d4960fcea8ff 321
kenjiArai 0:d4960fcea8ff 322 /* Enable GPIO power. */
kenjiArai 0:d4960fcea8ff 323 LPC_SC->PCONP = PCONP_PCGPIO;
kenjiArai 0:d4960fcea8ff 324
kenjiArai 0:d4960fcea8ff 325 /* Disable TPIU. */
kenjiArai 0:d4960fcea8ff 326 LPC_PINCON->PINSEL10 = 0;
kenjiArai 0:d4960fcea8ff 327
kenjiArai 0:d4960fcea8ff 328 if ( LPC_SC->PLL0STAT & ( 1 << 25 ) ){
kenjiArai 0:d4960fcea8ff 329 /* Enable PLL, disconnected. */
kenjiArai 0:d4960fcea8ff 330 LPC_SC->PLL0CON = 1;
kenjiArai 0:d4960fcea8ff 331 LPC_SC->PLL0FEED = PLLFEED_FEED1;
kenjiArai 0:d4960fcea8ff 332 LPC_SC->PLL0FEED = PLLFEED_FEED2;
kenjiArai 0:d4960fcea8ff 333 }
kenjiArai 0:d4960fcea8ff 334
kenjiArai 0:d4960fcea8ff 335 /* Disable PLL, disconnected. */
kenjiArai 0:d4960fcea8ff 336 LPC_SC->PLL0CON = 0;
kenjiArai 0:d4960fcea8ff 337 LPC_SC->PLL0FEED = PLLFEED_FEED1;
kenjiArai 0:d4960fcea8ff 338 LPC_SC->PLL0FEED = PLLFEED_FEED2;
kenjiArai 0:d4960fcea8ff 339
kenjiArai 0:d4960fcea8ff 340 /* Enable main OSC. */
kenjiArai 0:d4960fcea8ff 341 LPC_SC->SCS |= 0x20;
kenjiArai 0:d4960fcea8ff 342 while( !( LPC_SC->SCS & 0x40 ) );
kenjiArai 0:d4960fcea8ff 343
kenjiArai 0:d4960fcea8ff 344 /* select main OSC, 12MHz, as the PLL clock source. */
kenjiArai 0:d4960fcea8ff 345 LPC_SC->CLKSRCSEL = 0x1;
kenjiArai 0:d4960fcea8ff 346
kenjiArai 0:d4960fcea8ff 347 LPC_SC->PLL0CFG = 0x20031;
kenjiArai 0:d4960fcea8ff 348 LPC_SC->PLL0FEED = PLLFEED_FEED1;
kenjiArai 0:d4960fcea8ff 349 LPC_SC->PLL0FEED = PLLFEED_FEED2;
kenjiArai 0:d4960fcea8ff 350
kenjiArai 0:d4960fcea8ff 351 /* Enable PLL, disconnected. */
kenjiArai 0:d4960fcea8ff 352 LPC_SC->PLL0CON = 1;
kenjiArai 0:d4960fcea8ff 353 LPC_SC->PLL0FEED = PLLFEED_FEED1;
kenjiArai 0:d4960fcea8ff 354 LPC_SC->PLL0FEED = PLLFEED_FEED2;
kenjiArai 0:d4960fcea8ff 355
kenjiArai 0:d4960fcea8ff 356 /* Set clock divider. */
kenjiArai 0:d4960fcea8ff 357 LPC_SC->CCLKCFG = 0x03;
kenjiArai 0:d4960fcea8ff 358
kenjiArai 0:d4960fcea8ff 359 /* Configure flash accelerator. */
kenjiArai 0:d4960fcea8ff 360 LPC_SC->FLASHCFG = 0x403a;
kenjiArai 0:d4960fcea8ff 361
kenjiArai 0:d4960fcea8ff 362 /* Check lock bit status. */
kenjiArai 0:d4960fcea8ff 363 while( ( ( LPC_SC->PLL0STAT & ( 1 << 26 ) ) == 0 ) );
kenjiArai 0:d4960fcea8ff 364
kenjiArai 0:d4960fcea8ff 365 /* Enable and connect. */
kenjiArai 0:d4960fcea8ff 366 LPC_SC->PLL0CON = 3;
kenjiArai 0:d4960fcea8ff 367 LPC_SC->PLL0FEED = PLLFEED_FEED1;
kenjiArai 0:d4960fcea8ff 368 LPC_SC->PLL0FEED = PLLFEED_FEED2;
kenjiArai 0:d4960fcea8ff 369 while( ( ( LPC_SC->PLL0STAT & ( 1 << 25 ) ) == 0 ) );
kenjiArai 0:d4960fcea8ff 370
kenjiArai 0:d4960fcea8ff 371
kenjiArai 0:d4960fcea8ff 372 /* Configure the clock for the USB. */
kenjiArai 0:d4960fcea8ff 373
kenjiArai 0:d4960fcea8ff 374 if( LPC_SC->PLL1STAT & ( 1 << 9 ) )
kenjiArai 0:d4960fcea8ff 375 {
kenjiArai 0:d4960fcea8ff 376 /* Enable PLL, disconnected. */
kenjiArai 0:d4960fcea8ff 377 LPC_SC->PLL1CON = 1;
kenjiArai 0:d4960fcea8ff 378 LPC_SC->PLL1FEED = PLLFEED_FEED1;
kenjiArai 0:d4960fcea8ff 379 LPC_SC->PLL1FEED = PLLFEED_FEED2;
kenjiArai 0:d4960fcea8ff 380 }
kenjiArai 0:d4960fcea8ff 381
kenjiArai 0:d4960fcea8ff 382 /* Disable PLL, disconnected. */
kenjiArai 0:d4960fcea8ff 383 LPC_SC->PLL1CON = 0;
kenjiArai 0:d4960fcea8ff 384 LPC_SC->PLL1FEED = PLLFEED_FEED1;
kenjiArai 0:d4960fcea8ff 385 LPC_SC->PLL1FEED = PLLFEED_FEED2;
kenjiArai 0:d4960fcea8ff 386
kenjiArai 0:d4960fcea8ff 387 LPC_SC->PLL1CFG = 0x23;
kenjiArai 0:d4960fcea8ff 388 LPC_SC->PLL1FEED = PLLFEED_FEED1;
kenjiArai 0:d4960fcea8ff 389 LPC_SC->PLL1FEED = PLLFEED_FEED2;
kenjiArai 0:d4960fcea8ff 390
kenjiArai 0:d4960fcea8ff 391 /* Enable PLL, disconnected. */
kenjiArai 0:d4960fcea8ff 392 LPC_SC->PLL1CON = 1;
kenjiArai 0:d4960fcea8ff 393 LPC_SC->PLL1FEED = PLLFEED_FEED1;
kenjiArai 0:d4960fcea8ff 394 LPC_SC->PLL1FEED = PLLFEED_FEED2;
kenjiArai 0:d4960fcea8ff 395 while( ( ( LPC_SC->PLL1STAT & ( 1 << 10 ) ) == 0 ) );
kenjiArai 0:d4960fcea8ff 396
kenjiArai 0:d4960fcea8ff 397 /* Enable and connect. */
kenjiArai 0:d4960fcea8ff 398 LPC_SC->PLL1CON = 3;
kenjiArai 0:d4960fcea8ff 399 LPC_SC->PLL1FEED = PLLFEED_FEED1;
kenjiArai 0:d4960fcea8ff 400 LPC_SC->PLL1FEED = PLLFEED_FEED2;
kenjiArai 0:d4960fcea8ff 401 while( ( ( LPC_SC->PLL1STAT & ( 1 << 9 ) ) == 0 ) );
kenjiArai 0:d4960fcea8ff 402
kenjiArai 0:d4960fcea8ff 403 /* Setup the peripheral bus to be the same as the PLL output (64 MHz). */
kenjiArai 0:d4960fcea8ff 404 LPC_SC->PCLKSEL0 = 0x05555555;
kenjiArai 0:d4960fcea8ff 405
kenjiArai 0:d4960fcea8ff 406 /* Porting from system_LPC17xx.c void SystemInit() */
kenjiArai 0:d4960fcea8ff 407 /* Determine clock frequency according to clock register values */
kenjiArai 0:d4960fcea8ff 408 if (((LPC_SC->PLL0STAT >> 24) & 3) == 3) {/* If PLL0 enabled and connected */
kenjiArai 0:d4960fcea8ff 409 switch (LPC_SC->CLKSRCSEL & 0x03) {
kenjiArai 0:d4960fcea8ff 410 case 0: /* Internal RC oscillator => PLL0 */
kenjiArai 0:d4960fcea8ff 411 case 3: /* Reserved, default to Internal RC */
kenjiArai 0:d4960fcea8ff 412 SystemFrequency = (IRC_OSC *
kenjiArai 0:d4960fcea8ff 413 (((2 * ((LPC_SC->PLL0STAT & 0x7FFF) + 1))) /
kenjiArai 0:d4960fcea8ff 414 (((LPC_SC->PLL0STAT >> 16) & 0xFF) + 1)) /
kenjiArai 0:d4960fcea8ff 415 ((LPC_SC->CCLKCFG & 0xFF)+ 1));
kenjiArai 0:d4960fcea8ff 416 break;
kenjiArai 0:d4960fcea8ff 417 case 1: /* Main oscillator => PLL0 */
kenjiArai 0:d4960fcea8ff 418 SystemFrequency = (OSC_CLK *
kenjiArai 0:d4960fcea8ff 419 (((2 * ((LPC_SC->PLL0STAT & 0x7FFF) + 1))) /
kenjiArai 0:d4960fcea8ff 420 (((LPC_SC->PLL0STAT >> 16) & 0xFF) + 1)) /
kenjiArai 0:d4960fcea8ff 421 ((LPC_SC->CCLKCFG & 0xFF)+ 1));
kenjiArai 0:d4960fcea8ff 422 break;
kenjiArai 0:d4960fcea8ff 423 case 2: /* RTC oscillator => PLL0 */
kenjiArai 0:d4960fcea8ff 424 SystemFrequency = (RTC_CLK *
kenjiArai 0:d4960fcea8ff 425 (((2 * ((LPC_SC->PLL0STAT & 0x7FFF) + 1))) /
kenjiArai 0:d4960fcea8ff 426 (((LPC_SC->PLL0STAT >> 16) & 0xFF) + 1)) /
kenjiArai 0:d4960fcea8ff 427 ((LPC_SC->CCLKCFG & 0xFF)+ 1));
kenjiArai 0:d4960fcea8ff 428 break;
kenjiArai 0:d4960fcea8ff 429 }
kenjiArai 0:d4960fcea8ff 430 } else {
kenjiArai 0:d4960fcea8ff 431 switch (LPC_SC->CLKSRCSEL & 0x03) {
kenjiArai 0:d4960fcea8ff 432 case 0: /* Internal RC oscillator => PLL0 */
kenjiArai 0:d4960fcea8ff 433 case 3: /* Reserved, default to Internal RC */
kenjiArai 0:d4960fcea8ff 434 SystemFrequency = IRC_OSC / ((LPC_SC->CCLKCFG & 0xFF)+ 1);
kenjiArai 0:d4960fcea8ff 435 break;
kenjiArai 0:d4960fcea8ff 436 case 1: /* Main oscillator => PLL0 */
kenjiArai 0:d4960fcea8ff 437 SystemFrequency = OSC_CLK / ((LPC_SC->CCLKCFG & 0xFF)+ 1);
kenjiArai 0:d4960fcea8ff 438 break;
kenjiArai 0:d4960fcea8ff 439 case 2: /* RTC oscillator => PLL0 */
kenjiArai 0:d4960fcea8ff 440 SystemFrequency = RTC_CLK / ((LPC_SC->CCLKCFG & 0xFF)+ 1);
kenjiArai 0:d4960fcea8ff 441 break;
kenjiArai 0:d4960fcea8ff 442 }
kenjiArai 0:d4960fcea8ff 443 }
kenjiArai 0:d4960fcea8ff 444
kenjiArai 0:d4960fcea8ff 445 #if (FLASH_SETUP == 1) /* Flash Accelerator Setup */
kenjiArai 0:d4960fcea8ff 446 LPC_SC->FLASHCFG = FLASHCFG_Val;
kenjiArai 0:d4960fcea8ff 447 #endif
kenjiArai 0:d4960fcea8ff 448
kenjiArai 0:d4960fcea8ff 449 /* Configure the LEDs. */
kenjiArai 0:d4960fcea8ff 450 vParTestInitialise();
kenjiArai 0:d4960fcea8ff 451 }
kenjiArai 0:d4960fcea8ff 452 /*----------------------------------------------------------------------------------------------------------*/
kenjiArai 0:d4960fcea8ff 453
kenjiArai 0:d4960fcea8ff 454 void vApplicationStackOverflowHook( xTaskHandle *pxTask, signed char *pcTaskName )
kenjiArai 0:d4960fcea8ff 455 {
kenjiArai 0:d4960fcea8ff 456 /* This function will get called if a task overflows its stack. */
kenjiArai 0:d4960fcea8ff 457
kenjiArai 0:d4960fcea8ff 458 ( void ) pxTask;
kenjiArai 0:d4960fcea8ff 459 ( void ) pcTaskName;
kenjiArai 0:d4960fcea8ff 460 for( ;; );
kenjiArai 0:d4960fcea8ff 461 }
kenjiArai 0:d4960fcea8ff 462 /*----------------------------------------------------------------------------------------------------------*/
kenjiArai 0:d4960fcea8ff 463
kenjiArai 0:d4960fcea8ff 464 void vConfigureTimerForRunTimeStats( void ){
kenjiArai 0:d4960fcea8ff 465 const unsigned long TCR_COUNT_RESET = 2, CTCR_CTM_TIMER = 0x00, TCR_COUNT_ENABLE = 0x01;
kenjiArai 0:d4960fcea8ff 466
kenjiArai 0:d4960fcea8ff 467 /* This function configures a timer that is used as the time base when collecting run time
kenjiArai 0:d4960fcea8ff 468 * statistical information - basically the percentage of CPU time that each task is utilizing.
kenjiArai 0:d4960fcea8ff 469 * It is called automatically when the scheduler is started
kenjiArai 0:d4960fcea8ff 470 * (assuming configGENERATE_RUN_TIME_STATS is set to 1). */
kenjiArai 0:d4960fcea8ff 471
kenjiArai 0:d4960fcea8ff 472 /* Power up and feed the timer. */
kenjiArai 0:d4960fcea8ff 473 LPC_SC->PCONP |= 0x02UL;
kenjiArai 0:d4960fcea8ff 474 LPC_SC->PCLKSEL0 = (LPC_SC->PCLKSEL0 & (~(0x3<<2))) | (0x01 << 2);
kenjiArai 0:d4960fcea8ff 475
kenjiArai 0:d4960fcea8ff 476 /* Reset Timer 0 */
kenjiArai 0:d4960fcea8ff 477 LPC_TIM0->TCR = TCR_COUNT_RESET;
kenjiArai 0:d4960fcea8ff 478
kenjiArai 0:d4960fcea8ff 479 /* Just count up. */
kenjiArai 0:d4960fcea8ff 480 LPC_TIM0->CTCR = CTCR_CTM_TIMER;
kenjiArai 0:d4960fcea8ff 481
kenjiArai 0:d4960fcea8ff 482 /* Prescale to a frequency that is good enough to get a decent resolution,
kenjiArai 0:d4960fcea8ff 483 but not too fast so as to overflow all the time. */
kenjiArai 0:d4960fcea8ff 484 LPC_TIM0->PR = ( configCPU_CLOCK_HZ / 10000UL ) - 1UL;
kenjiArai 0:d4960fcea8ff 485
kenjiArai 0:d4960fcea8ff 486 /* Start the counter. */
kenjiArai 0:d4960fcea8ff 487 LPC_TIM0->TCR = TCR_COUNT_ENABLE;
kenjiArai 0:d4960fcea8ff 488 }
kenjiArai 0:d4960fcea8ff 489 /*----------------------------------------------------------------------------------------------------------*/
kenjiArai 0:d4960fcea8ff 490