From d2369cc3822fff0ac1128e1f1242e9de36275aff Mon Sep 17 00:00:00 2001 From: RichardBarry Date: Wed, 28 Jan 2009 12:21:11 +0000 Subject: [PATCH] Tidy up and comment. git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@629 1d2547de-c912-0410-9cb9-b8ca96c0e9e2 --- Demo/NEC_V850ES_Fx3_IAR/FreeRTOSConfig.h | 72 ++--- Demo/NEC_V850ES_Fx3_IAR/LEDtoggle/LED.c | 298 ------------------ Demo/NEC_V850ES_Fx3_IAR/LEDtoggle/LED.h | 61 ---- Demo/NEC_V850ES_Fx3_IAR/ParTest/ParTest.c | 15 +- Demo/NEC_V850ES_Fx3_IAR/RegTest.s85 | 9 +- Demo/NEC_V850ES_Fx3_IAR/main.c | 72 ++++- Demo/NEC_V850ES_Fx3_IAR/rtosdemo.ewp | 6 +- Demo/NEC_V850ES_Fx3_IAR/serial/serial.c | 38 ++- .../settings/rtosdemo.dbgdt | 12 +- Demo/NEC_V850ES_Fx3_IAR/settings/rtosdemo.dni | 3 +- .../NEC_V850ES_Fx3_IAR/settings/rtosdemo.wsdt | 10 +- 11 files changed, 151 insertions(+), 445 deletions(-) delete mode 100644 Demo/NEC_V850ES_Fx3_IAR/LEDtoggle/LED.c delete mode 100644 Demo/NEC_V850ES_Fx3_IAR/LEDtoggle/LED.h diff --git a/Demo/NEC_V850ES_Fx3_IAR/FreeRTOSConfig.h b/Demo/NEC_V850ES_Fx3_IAR/FreeRTOSConfig.h index 14bc86b30..57dc17fa6 100644 --- a/Demo/NEC_V850ES_Fx3_IAR/FreeRTOSConfig.h +++ b/Demo/NEC_V850ES_Fx3_IAR/FreeRTOSConfig.h @@ -52,12 +52,11 @@ /* only include in C files */ #ifdef __IAR_SYSTEMS_ICC__ -#pragma language=extended -#pragma system_include - -#include -#include "io70f3385.h" + #pragma language=extended + #pragma system_include + #include + #include "io70f3385.h" #endif /* __IAR_SYSTEMS_ICC__ */ /* V850ES/Fx3 Memory Model @@ -79,39 +78,40 @@ */ #define configUSE_PREEMPTION 1 /* only include in C files */ + #ifdef __IAR_SYSTEMS_ICC__ -#define configUSE_IDLE_HOOK 0 -#define configUSE_TICK_HOOK 0 -#define configCPU_CLOCK_HZ ( ( unsigned portLONG ) 48000000 ) /* using the external clock source */ -#define configTICK_RATE_HZ ( ( portTickType ) 1000 ) -#define configMAX_PRIORITIES ( ( unsigned portBASE_TYPE ) 4 ) -#define configMINIMAL_STACK_SIZE ( ( unsigned portSHORT ) 85 ) -#define configTOTAL_HEAP_SIZE ( (size_t ) ( 60000 ) ) -#define configMAX_TASK_NAME_LEN ( 10 ) -#define configUSE_TRACE_FACILITY 0 -#define configUSE_16_BIT_TICKS 0 -#define configIDLE_SHOULD_YIELD 0 -#define configUSE_CO_ROUTINES 0 -#define configUSE_MUTEXES 1 -#define configCHECK_FOR_STACK_OVERFLOW 2 -#define configUSE_RECURSIVE_MUTEXES 1 -#define configQUEUE_REGISTRY_SIZE 0 -#define configUSE_COUNTING_SEMAPHORES 0 - -/* Co-routine definitions. */ -#define configUSE_CO_ROUTINES 0 -#define configMAX_CO_ROUTINE_PRIORITIES ( 2 ) - -/* Set the following definitions to 1 to include the API function, or zero -to exclude the API function. */ -#define INCLUDE_vTaskPrioritySet 1 -#define INCLUDE_uxTaskPriorityGet 1 -#define INCLUDE_vTaskDelete 1 -#define INCLUDE_vTaskCleanUpResources 0 -#define INCLUDE_vTaskSuspend 1 -#define INCLUDE_vTaskDelayUntil 1 -#define INCLUDE_vTaskDelay 1 + #define configUSE_IDLE_HOOK 0 + #define configUSE_TICK_HOOK 0 + #define configCPU_CLOCK_HZ ( ( unsigned portLONG ) 48000000 ) /* using the external clock source */ + #define configTICK_RATE_HZ ( ( portTickType ) 1000 ) + #define configMAX_PRIORITIES ( ( unsigned portBASE_TYPE ) 4 ) + #define configMINIMAL_STACK_SIZE ( ( unsigned portSHORT ) 85 ) + #define configTOTAL_HEAP_SIZE ( (size_t ) ( 60000 ) ) + #define configMAX_TASK_NAME_LEN ( 10 ) + #define configUSE_TRACE_FACILITY 0 + #define configUSE_16_BIT_TICKS 0 + #define configIDLE_SHOULD_YIELD 0 + #define configUSE_CO_ROUTINES 0 + #define configUSE_MUTEXES 1 + #define configCHECK_FOR_STACK_OVERFLOW 2 + #define configUSE_RECURSIVE_MUTEXES 1 + #define configQUEUE_REGISTRY_SIZE 0 + #define configUSE_COUNTING_SEMAPHORES 0 + + /* Co-routine definitions. */ + #define configUSE_CO_ROUTINES 0 + #define configMAX_CO_ROUTINE_PRIORITIES ( 2 ) + + /* Set the following definitions to 1 to include the API function, or zero + to exclude the API function. */ + #define INCLUDE_vTaskPrioritySet 1 + #define INCLUDE_uxTaskPriorityGet 1 + #define INCLUDE_vTaskDelete 1 + #define INCLUDE_vTaskCleanUpResources 0 + #define INCLUDE_vTaskSuspend 1 + #define INCLUDE_vTaskDelayUntil 1 + #define INCLUDE_vTaskDelay 1 #endif /* __IAR_SYSTEMS_ICC__ */ diff --git a/Demo/NEC_V850ES_Fx3_IAR/LEDtoggle/LED.c b/Demo/NEC_V850ES_Fx3_IAR/LEDtoggle/LED.c deleted file mode 100644 index 739584eec..000000000 --- a/Demo/NEC_V850ES_Fx3_IAR/LEDtoggle/LED.c +++ /dev/null @@ -1,298 +0,0 @@ -/* - FreeRTOS.org V5.1.1 - Copyright (C) 2003-2008 Richard Barry. - - This file is part of the FreeRTOS.org distribution. - - FreeRTOS.org is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - FreeRTOS.org 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 more details. - - You should have received a copy of the GNU General Public License - along with FreeRTOS.org; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes FreeRTOS.org, without being obliged to provide - the source code for any proprietary components. See the licensing section - of http://www.FreeRTOS.org for full details of how and when the exception - can be applied. - - *************************************************************************** - *************************************************************************** - * * - * SAVE TIME AND MONEY! We can port FreeRTOS.org to your own hardware, * - * and even write all or part of your application on your behalf. * - * See http://www.OpenRTOS.com for details of the services we provide to * - * expedite your project. * - * * - *************************************************************************** - *************************************************************************** - - Please ensure to read the configuration and relevant port sections of the - online documentation. - - http://www.FreeRTOS.org - Documentation, latest information, license and - contact details. - - http://www.SafeRTOS.com - A version that is certified for use in safety - critical systems. - - http://www.OpenRTOS.com - Commercial support, development, porting, - licensing and training services. -*/ - -/** - * This is a simple LED toggle test for the V850ES/Fx3. - * - * Creates two task that control one LED each. - * - * The first task toggles a LED with a frequency of 1Hz by using the vTaskDelay - * function. So the task is yielded for 1 seconed after each LED switch. - * - * The second LED also starts with a toggling frequency of 1Hz but this frequency - * can be increased by pushing the switch button conected to pin INTP0. - * When the switch is pushed it is detected by an interrupt. When the interrupt - * occurs a flag is set in the ISR and sent to the third task by using a queue. - * Therefore the xQueueSendFromISR() function is called from within the ISR to - * write the flag value to the queue. The task uses the xQueueReceive() function - * to read the flag value from the queue. - * If the flag value changed from the last task activation the yield time for the - * second LED is incremented by 100ms. If the yield time reaches a time greater - * then 3 seconds it is set back to 1 second within task 3. - * - * Also a check function is implemented to check if the task still run properly - */ - -/* Scheduler include files. */ -#include "FreeRTOS.h" -#include "task.h" - -/* Demo program include files. */ -#include "LED.h" -#include "queue.h" -#include "print.h" - -#define LEDToggleSTACK_SIZE (( unsigned portSHORT ) configMINIMAL_STACK_SIZE) -#define SwitchSTACK_SIZE (( unsigned portSHORT ) configMINIMAL_STACK_SIZE) -#define LED_NUMBER_OF_TASKS 2 - -/* LED toggle wait time and check definitions */ -static portTickType LED1_Wait_Time = 1000; -static portTickType LED2_Wait_Time = 1000; -static portTickType SWITCH_Wait_Time = 50; - -/* Task function prototypes */ -static void vLEDToggleTask1 ( void *pvParameters ); -static void vLEDToggleTask2 ( void *pvParameters ); -static void vSWITCHDelayTask ( void *pvParameters ); - -/* Port Initialization for LED's and Switch */ -static void prvLEDInit(void); - -/* Switch press counter */ -static unsigned portSHORT usClick = 0; -/* Queue used for LED02 toggle*/ -static xQueueHandle xSwitchQueue; - -/*xQUEUE *xLEDQueue;*/ - -static volatile unsigned portSHORT usTask1Check = 0, usTask2Check = 0, usTask3Check = 0, usLEDQueue = 0; - -void vStartLEDToggleTasks( unsigned portBASE_TYPE uxPriority ) -{ - -const unsigned portBASE_TYPE uxQueueSize = 4; - - prvLEDInit(); - - /* Create the queue used by the Switch ISR and the second task. */ - xSwitchQueue = xQueueCreate( uxQueueSize, ( unsigned portBASE_TYPE ) sizeof( unsigned portSHORT ) ); - /* create 2 LED toggle Tasks */ - xTaskCreate(vLEDToggleTask1, "LEDTog1", LEDToggleSTACK_SIZE, ( void * ) &(usTask1Check), uxPriority, NULL ); - xTaskCreate(vLEDToggleTask2, "LEDTog2", LEDToggleSTACK_SIZE, ( void * ) &(usTask2Check), uxPriority, NULL ); - xTaskCreate(vSWITCHDelayTask, "SWITCH", SwitchSTACK_SIZE, ( void * ) &xSwitchQueue, (uxPriority+1), NULL ); -} -/*---------------------------------------------------------------------------*/ -static void vLEDToggleTask1( void *pvParameters) -{ -static portCHAR pcLED1old; -static portCHAR LEDcounter1 = 0; -portSHORT sError = pdFALSE; -volatile unsigned portSHORT *pusTaskCheckVariable; -const portCHAR * const pcTaskFailMsg = "ERROR: LED toggle failed.\r\n"; - - pusTaskCheckVariable = ( unsigned portSHORT * ) pvParameters; - for(;;) - { - pcLED1old = LED01; - LED01 = ~LED01; - LEDcounter1++; - vTaskDelay( LED1_Wait_Time ); - /* toggle the LED01 */ - - if(pcLED1old == LED01) - { - /* an error has occured */ - vPrintDisplayMessage( &pcTaskFailMsg ); - sError = pdTRUE; - } - - if(sError != pdTRUE) - { - /* If a LED toggle has been made, increment the check - variable so we know this task is still running okay. */ - ( *pusTaskCheckVariable )++; - } - } -} -/*-----------------------------------------------------------*/ -static void vLEDToggleTask2( void *pvParameters) -{ -static portCHAR pcLED2old; -portSHORT sError = pdFALSE; -volatile unsigned portSHORT *pusTaskCheckVariable; -const portCHAR * const pcTaskFailMsg = "ERROR: LED toggle failed.\r\n"; - - pusTaskCheckVariable = ( unsigned portSHORT * ) pvParameters; - for(;;) - { - pcLED2old = LED02; - /* toggle the LED02 */ - LED02 = ~LED02; - vTaskDelay( LED2_Wait_Time ); - if(pcLED2old == LED02) - { - /* an error has occured */ - vPrintDisplayMessage( &pcTaskFailMsg ); - sError = pdTRUE; - } - - if(sError != pdTRUE) - { - /* If a LED toggle has been made, increment the check - variable so we know this task is still running okay. */ - ( *pusTaskCheckVariable )++; - } - } -} -/*-----------------------------------------------------------*/ - -static void vSWITCHDelayTask( void *pvParameters) -{ -unsigned portSHORT usData, usDataOld = 0; -xQueueHandle *pxQueue; - - pxQueue = ( xQueueHandle * ) pvParameters; - for(;;) - { - if( xQueueReceive( *pxQueue, &usData, ( portTickType ) 0 ) == pdPASS ) - { - if (usData != usDataOld) - { - LED2_Wait_Time += 100; - if(LED2_Wait_Time >= 3000) - { - LED2_Wait_Time = 1000; - } - } - usDataOld = usData; - } - vTaskDelay( SWITCH_Wait_Time ); - /* increment check variable whenever the task gets active */ - usTask3Check++; - } -} - -portBASE_TYPE xAreLEDToggleTaskStillRunning( void ) -{ -/* - * Keep a history of the check variables so we know if they have been incremented - * since the last call. - */ -static unsigned portSHORT usLastTask1Check = 0; -static unsigned portSHORT usLastTask2Check = 0; -static unsigned portSHORT usLastTask3Check = 0; -portBASE_TYPE xReturn = pdTRUE; - - /* Check the LED toggle tasks are still running by ensuring their check variables - * are still incrementing. - */ - if(( usTask1Check == usLastTask1Check )||(usLastTask2Check == usTask2Check)||(usLastTask3Check == usTask3Check)) - { - /* The check has not incremented so an error exists. */ - xReturn = pdFALSE; - } - - usLastTask1Check = usTask1Check; - usLastTask2Check = usTask2Check; - usLastTask3Check = usTask3Check; - - return xReturn; -} -/*-----------------------------------------------------------*/ - -static void prvLEDInit(void) -{ - - INTR0 = 0x00; - INTR1 = 0x00; - INTR3L = 0x00; - INTR3H = 0x00; - INTR4 = 0x00; - INTR6L = 0x00; - INTR6H = 0x00; - INTR8 = 0x00; - INTR9H = 0x00; - - INTF0 = 0x00; - INTF1 = 0x00; - INTF3L = 0x00; - INTF3H = 0x00; - INTF4 = 0x00; - INTF6L = 0x00; - INTF6H = 0x00; - INTF8 = 0x00; - INTF9H = 0x00; - -/* LED Port Initialization */ -// PCM = 0x00; - PMCM = 0xF2; - PMCCM = 0x00; - -/* Switch Pin Initialization */ - /* INTP0 Setting */ - PMK0 = 1; /* INTP0 disable */ - PIF0 = 0; /* INTP0 IF clear */ - /* Set INTP0 lowest priority */ - PIC0 |= 0x07; - INTR0 |= 0x00; - INTF0 |= 0x08; - /* INTP0 pin set */ - PFC0 &= 0xF7; - PFCE0 &= 0xF7; - PMC0 |= 0x08; - - PIF0 = 0; /* INTP0 IF clear */ - PMK0 = 0; /* INTP0 enable */ -} -/*-----------------------------------------------------------*/ - -/* Switch ISR */ - -#pragma vector=INTP0_vector -__interrupt void MD_INTP0(void) -{ - /* Increment Switch pressed counter */ - usClick++; - /* Use usClick to signalize a detected Interrupt for the vLEDToggleTask2 - * to toggle the LED02. - */ - xQueueSendFromISR( xSwitchQueue, &usClick, pdFALSE ); -} -/*-----------------------------------------------------------*/ \ No newline at end of file diff --git a/Demo/NEC_V850ES_Fx3_IAR/LEDtoggle/LED.h b/Demo/NEC_V850ES_Fx3_IAR/LEDtoggle/LED.h deleted file mode 100644 index 244053008..000000000 --- a/Demo/NEC_V850ES_Fx3_IAR/LEDtoggle/LED.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - FreeRTOS.org V5.1.1 - Copyright (C) 2003-2008 Richard Barry. - - This file is part of the FreeRTOS.org distribution. - - FreeRTOS.org is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - FreeRTOS.org 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 more details. - - You should have received a copy of the GNU General Public License - along with FreeRTOS.org; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - A special exception to the GPL can be applied should you wish to distribute - a combined work that includes FreeRTOS.org, without being obliged to provide - the source code for any proprietary components. See the licensing section - of http://www.FreeRTOS.org for full details of how and when the exception - can be applied. - - *************************************************************************** - *************************************************************************** - * * - * SAVE TIME AND MONEY! We can port FreeRTOS.org to your own hardware, * - * and even write all or part of your application on your behalf. * - * See http://www.OpenRTOS.com for details of the services we provide to * - * expedite your project. * - * * - *************************************************************************** - *************************************************************************** - - Please ensure to read the configuration and relevant port sections of the - online documentation. - - http://www.FreeRTOS.org - Documentation, latest information, license and - contact details. - - http://www.SafeRTOS.com - A version that is certified for use in safety - critical systems. - - http://www.OpenRTOS.com - Commercial support, development, porting, - licensing and training services. -*/ - -#ifndef LEDTOGGLE_TASKS_H -#define LEDTOGGLE_TASKS_H - -void vStartLEDToggleTasks( unsigned portBASE_TYPE uxPriority ); -portBASE_TYPE xAreLEDToggleTaskStillRunning( void ); -/* LED Pin Configuration */ -static void prvLEDinit( void ); - -#define LED01 PCM_bit.no3 -#define LED02 PCM_bit.no2 - -#endif \ No newline at end of file diff --git a/Demo/NEC_V850ES_Fx3_IAR/ParTest/ParTest.c b/Demo/NEC_V850ES_Fx3_IAR/ParTest/ParTest.c index 5730903ec..71ea53168 100644 --- a/Demo/NEC_V850ES_Fx3_IAR/ParTest/ParTest.c +++ b/Demo/NEC_V850ES_Fx3_IAR/ParTest/ParTest.c @@ -47,17 +47,15 @@ licensing and training services. */ -/* - Changes from V2.5.2 - - + All LED's are turned off to start. -*/ - +/*----------------------------------------------------------- + * Simple parallel port IO routines. + *-----------------------------------------------------------*/ +/* FreeRTOS includes. */ #include "FreeRTOS.h" -#include "task.h" #include "partest.h" + #define partstNUM_LEDs 4 #define LED0_MASK ( ( unsigned short ) 0x08 ) @@ -68,9 +66,6 @@ static const unsigned short xLEDs[ partstNUM_LEDs ] = { LED0_MASK, LED1_MASK, LED2_MASK, LED3_MASK }; -/*----------------------------------------------------------- - * Simple parallel port IO routines. - *-----------------------------------------------------------*/ void vParTestInitialise( void ) { diff --git a/Demo/NEC_V850ES_Fx3_IAR/RegTest.s85 b/Demo/NEC_V850ES_Fx3_IAR/RegTest.s85 index 97d349496..bb65ac034 100644 --- a/Demo/NEC_V850ES_Fx3_IAR/RegTest.s85 +++ b/Demo/NEC_V850ES_Fx3_IAR/RegTest.s85 @@ -1,4 +1,4 @@ -; FreeRTOS.org V5.0.2 - Copyright (C) 2003-2008 Richard Barry. +; FreeRTOS.org V5.1.1 - Copyright (C) 2003-2009 Richard Barry. ; ; This file is part of the FreeRTOS.org distribution. ; @@ -33,6 +33,13 @@ EXTERN vRegTestFailed + + +; +; The RegTest tasks as described in the comments at the top of main(). +; + + ;------------------------------------------------------------------------------ ; Functions implemented in this file diff --git a/Demo/NEC_V850ES_Fx3_IAR/main.c b/Demo/NEC_V850ES_Fx3_IAR/main.c index 38a0864f3..80699aca5 100644 --- a/Demo/NEC_V850ES_Fx3_IAR/main.c +++ b/Demo/NEC_V850ES_Fx3_IAR/main.c @@ -47,6 +47,27 @@ licensing and training services. */ +/* + * Creates all the demo application tasks, then starts the scheduler. The WEB + * documentation provides more details of the standard demo application tasks. + * In addition to the standard demo tasks, the following tasks and tests are + * defined and/or created within this file: + * + * "Check" task - This only executes every three seconds but has a high priority + * to ensure it gets processor time. Its main function is to check that all the + * standard demo tasks are still operational. If everything is running as + * expected then the check task will toggle an LED every 3 seconds. An error + * being discovered in any task will cause the toggle rate to increase to 500ms. + * + * "Reg test" tasks - These fill the registers with known values, then check + * that each register still contains its expected value. Each task uses + * different values. The tasks run with very low priority so get preempted very + * frequently. A register containing an unexpected value is indicative of an + * error in the context switching mechanism. + * + */ + +/* Standard include files. */ #include #include @@ -81,46 +102,50 @@ #define mainGEN_QUEUE_TASK_PRIORITY ( tskIDLE_PRIORITY ) #define mainCOMTEST_PRIORITY ( tskIDLE_PRIORITY + 1 ) +/* Passed into the check task just as a test that the parameter passing +mechanism is working correctly. */ #define mainCHECK_PARAMETER ( ( void * ) 0x12345678 ) /* The period between executions of the check task. */ #define mainNO_ERROR_DELAY ( ( portTickType ) 3000 / portTICK_RATE_MS ) #define mainERROR_DELAY ( ( portTickType ) 500 / portTICK_RATE_MS ) +/* The LEDs used by the demos. */ #define mainCHECK_TASK_LED ( 3 ) #define mainCOMTEST_LED ( 5 ) +/* The baud rate used by the comtest task. */ #define mainBAUD_RATE ( 9600 ) +/*-----------------------------------------------------------*/ -/* The task function for the "Check" task. */ +/* The implementation of the 'check' task as described at the top of this file. */ static void prvCheckTask( void *pvParameters ); -/* low level initialization prototype */ +/* Called by the startup code to initialise the run time system. */ unsigned portCHAR __low_level_init(void); +/* Just sets up the LED outputs. Most generic setup is done in +__low_level_init(). */ static void prvSetupHardware( void ); +/* The RegTest functions as described at the top of this file. */ extern void vRegTest1( void *pvParameters ); extern void vRegTest2( void *pvParameters ); -/*-----------------------------------------------------------*/ - +/* A variable that will get set to fail if a RegTest task finds an error. The +variable is inspected by the 'Check' task. */ static volatile portLONG lRegTestStatus = pdPASS; -void vRegTestFailed( void ) -{ - lRegTestStatus = pdFAIL; - - /* Do not return from here as the reg test tasks clobber all registers so - function calls may not function correctly. */ - for( ;; ); -} +/*-----------------------------------------------------------*/ +/* Create all the demo tasks then start the scheduler. */ void main( void ) { + /* Just sets up the LED outputs. */ prvSetupHardware(); + /* Standard demo tasks. */ vStartLEDFlashTasks( mainFLASH_PRIORITY ); vStartSemaphoreTasks( mainSEM_TEST_PRIORITY ); vStartPolledQueueTasks( mainQUEUE_POLL_PRIORITY ); @@ -130,9 +155,10 @@ void main( void ) vStartBlockingQueueTasks( mainBLOCK_Q_PRIORITY ); vAltStartComTestTasks( mainCOMTEST_PRIORITY, mainBAUD_RATE, mainCOMTEST_LED ); - /* Create the tasks defined within this file. */ + /* Create the check task as described at the top of this file. */ xTaskCreate( prvCheckTask, "Check", configMINIMAL_STACK_SIZE, mainCHECK_PARAMETER, mainCHECK_TASK_PRIORITY, NULL ); + /* Create the RegTest tasks as described at the top of this file. */ xTaskCreate( vRegTest1, "Reg1", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL ); xTaskCreate( vRegTest2, "Reg2", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL ); @@ -160,6 +186,8 @@ portTickType xDelayPeriod = mainNO_ERROR_DELAY, xLastWakeTime; xDelayPeriod = mainERROR_DELAY; } + /* Initialise xLastWakeTime before it is used. After this point it is not + written to directly. */ xLastWakeTime = xTaskGetTickCount(); /* Cycle for ever, delaying then checking all the other tasks are still @@ -287,14 +315,32 @@ unsigned portCHAR psval = 0; return pdTRUE; } +/*-----------------------------------------------------------*/ static void prvSetupHardware( void ) { + /* Setup the LED outputs. */ vParTestInitialise(); + + /* Any additional hardware configuration can be added here. */ } +/*-----------------------------------------------------------*/ void vApplicationStackOverflowHook( void ) { + /* This will be called if a task overflows its stack. pxCurrentTCB + can be inspected to see which is the offending task. */ for( ;; ); } +/*-----------------------------------------------------------*/ +void vRegTestFailed( void ) +{ + /* Called by the RegTest tasks if an error is found. lRegTestStatus is + inspected by the check task. */ + lRegTestStatus = pdFAIL; + + /* Do not return from here as the reg test tasks clobber all registers so + function calls may not function correctly. */ + for( ;; ); +} diff --git a/Demo/NEC_V850ES_Fx3_IAR/rtosdemo.ewp b/Demo/NEC_V850ES_Fx3_IAR/rtosdemo.ewp index 4b1c1ff7e..7a2dda22a 100644 --- a/Demo/NEC_V850ES_Fx3_IAR/rtosdemo.ewp +++ b/Demo/NEC_V850ES_Fx3_IAR/rtosdemo.ewp @@ -17,7 +17,7 @@ 1