2006-05-02 17:39:15 +08:00
/*
2011-01-15 04:22:24 +08:00
FreeRTOS V6 .1 .1 - Copyright ( C ) 2011 Real Time Engineers Ltd .
2006-05-02 17:39:15 +08:00
2009-10-13 18:54:32 +08:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* If you are : *
* *
* + New to FreeRTOS , *
* + Wanting to learn FreeRTOS or multitasking in general quickly *
* + Looking for basic training , *
* + Wanting to improve your FreeRTOS skills and productivity *
* *
2010-09-24 00:36:25 +08:00
* then take a look at the FreeRTOS books - available as PDF or paperback *
2009-10-13 18:54:32 +08:00
* *
* " Using the FreeRTOS Real Time Kernel - a Practical Guide " *
* http : //www.FreeRTOS.org/Documentation *
* *
* A pdf reference manual is also available . Both are usually delivered *
* to your inbox within 20 minutes to two hours when purchased between 8 am *
* and 8 pm GMT ( although please allow up to 24 hours in case of *
* exceptional circumstances ) . Thank you for your support ! *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
2009-10-05 17:46:11 +08:00
This file is part of the FreeRTOS distribution .
2006-05-02 17:39:15 +08:00
2009-10-13 18:54:32 +08:00
FreeRTOS is free software ; you can redistribute it and / or modify it under
2009-10-05 17:46:11 +08:00
the terms of the GNU General Public License ( version 2 ) as published by the
2009-10-13 18:54:32 +08:00
Free Software Foundation AND MODIFIED BY the FreeRTOS exception .
* * * 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
2009-10-05 17:46:11 +08:00
source code for proprietary components outside of the FreeRTOS kernel .
2009-10-13 18:54:32 +08:00
FreeRTOS is distributed in the hope that it will be useful , but WITHOUT
2009-10-05 17:46:11 +08:00
ANY WARRANTY ; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE . See the GNU General Public License for
2011-01-06 18:08:07 +08:00
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
2009-10-13 18:54:32 +08:00
by writing to Richard Barry , contact details for whom are available on the
FreeRTOS WEB site .
2009-03-15 03:20:12 +08:00
2009-10-05 17:46:11 +08:00
1 tab = = 4 spaces !
2007-04-02 04:47:49 +08:00
2009-10-05 17:46:11 +08:00
http : //www.FreeRTOS.org - Documentation, latest information, license and
contact details .
2008-02-04 03:45:58 +08:00
2009-10-05 17:46:11 +08:00
http : //www.SafeRTOS.com - A version that is certified for use in safety
critical systems .
2008-02-04 03:45:58 +08:00
2009-10-05 17:46:11 +08:00
http : //www.OpenRTOS.com - Commercial support, development, porting,
licensing and training services .
2006-05-02 17:39:15 +08:00
*/
# ifndef INC_FREERTOS_H
# define INC_FREERTOS_H
2007-08-22 00:54:48 +08:00
/*
* Include the generic headers required for the FreeRTOS port being used .
2006-05-02 17:39:15 +08:00
*/
# include <stddef.h>
/* Basic FreeRTOS definitions. */
# include "projdefs.h"
/* Application specific configuration options. */
# include "FreeRTOSConfig.h"
/* Definitions specific to the port being used. */
# include "portable.h"
2008-04-12 17:48:40 +08:00
/* Defines the prototype to which the application task hook function must
conform . */
typedef portBASE_TYPE ( * pdTASK_HOOK_CODE ) ( void * ) ;
2006-05-02 17:39:15 +08:00
/*
2007-08-22 00:54:48 +08:00
* Check all the required application specific macros have been defined .
2006-05-02 17:39:15 +08:00
* These macros are application specific and ( as downloaded ) are defined
* within FreeRTOSConfig . h .
*/
# ifndef configUSE_PREEMPTION
# error Missing definition: configUSE_PREEMPTION should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
# endif
# ifndef configUSE_IDLE_HOOK
# error Missing definition: configUSE_IDLE_HOOK should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
# endif
# ifndef configUSE_TICK_HOOK
# error Missing definition: configUSE_TICK_HOOK should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
# endif
# ifndef configUSE_CO_ROUTINES
# error Missing definition: configUSE_CO_ROUTINES should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
# endif
# ifndef INCLUDE_vTaskPrioritySet
# error Missing definition: INCLUDE_vTaskPrioritySet should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
# endif
# ifndef INCLUDE_uxTaskPriorityGet
# error Missing definition: INCLUDE_uxTaskPriorityGet should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
# endif
# ifndef INCLUDE_vTaskDelete
# error Missing definition: INCLUDE_vTaskDelete should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
# endif
# ifndef INCLUDE_vTaskCleanUpResources
# error Missing definition: INCLUDE_vTaskCleanUpResources should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
# endif
# ifndef INCLUDE_vTaskSuspend
# error Missing definition: INCLUDE_vTaskSuspend should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
# endif
# ifndef INCLUDE_vTaskDelayUntil
# error Missing definition: INCLUDE_vTaskDelayUntil should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
# endif
# ifndef INCLUDE_vTaskDelay
# error Missing definition: INCLUDE_vTaskDelay should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
# endif
# ifndef configUSE_16_BIT_TICKS
# error Missing definition: configUSE_16_BIT_TICKS should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
# endif
2008-04-16 15:47:02 +08:00
# ifndef configUSE_APPLICATION_TASK_TAG
# define configUSE_APPLICATION_TASK_TAG 0
2008-04-12 17:48:40 +08:00
# endif
2008-03-04 04:56:55 +08:00
# ifndef INCLUDE_uxTaskGetStackHighWaterMark
# define INCLUDE_uxTaskGetStackHighWaterMark 0
2008-03-04 00:32:37 +08:00
# endif
2008-01-23 02:43:03 +08:00
# ifndef configUSE_RECURSIVE_MUTEXES
# define configUSE_RECURSIVE_MUTEXES 0
# endif
2007-12-03 02:37:43 +08:00
# ifndef configUSE_MUTEXES
# define configUSE_MUTEXES 0
# endif
2011-02-10 03:26:33 +08:00
# ifndef configUSE_TIMERS
# define configUSE_TIMERS 0
# endif
2007-12-02 04:28:04 +08:00
# ifndef configUSE_COUNTING_SEMAPHORES
# define configUSE_COUNTING_SEMAPHORES 0
# endif
2007-12-03 02:37:43 +08:00
# ifndef configUSE_ALTERNATIVE_API
# define configUSE_ALTERNATIVE_API 0
2007-12-02 04:56:44 +08:00
# endif
2008-02-26 02:54:28 +08:00
# ifndef portCRITICAL_NESTING_IN_TCB
# define portCRITICAL_NESTING_IN_TCB 0
# endif
2008-04-12 17:48:40 +08:00
# ifndef configMAX_TASK_NAME_LEN
# define configMAX_TASK_NAME_LEN 16
# endif
# ifndef configIDLE_SHOULD_YIELD
# define configIDLE_SHOULD_YIELD 1
# endif
# if configMAX_TASK_NAME_LEN < 1
# undef configMAX_TASK_NAME_LEN
# define configMAX_TASK_NAME_LEN 1
# endif
# ifndef INCLUDE_xTaskResumeFromISR
# define INCLUDE_xTaskResumeFromISR 1
# endif
2011-02-10 03:26:33 +08:00
/* The timers module relies on xTaskGetSchedulerState(). */
# if configUSE_TIMERS == 1
# undef INCLUDE_xTaskGetSchedulerState
# define INCLUDE_xTaskGetSchedulerState 1
# ifndef configTIMER_TASK_PRIORITY
# error If configUSE_TIMERS is set to 1 then configTIMER_TASK_PRIORITY must also be defined.
# endif /* configTIMER_TASK_PRIORITY */
# ifndef configTIMER_QUEUE_LENGTH
# error If configUSE_TIMERS is set to 1 then configTIMER_QUEUE_LENGTH must also be defined.
# endif /* configTIMER_QUEUE_LENGTH */
# ifndef configTIMER_TASK_STACK_DEPTH
# error If configUSE_TIMERS is set to 1 then configTIMER_TASK_STACK_DEPTH must also be defined.
# endif /* configTIMER_TASK_STACK_DEPTH */
# endif /* configUSE_TIMERS */
2008-04-12 17:48:40 +08:00
# ifndef INCLUDE_xTaskGetSchedulerState
# define INCLUDE_xTaskGetSchedulerState 0
# endif
2007-08-22 00:54:48 +08:00
# if ( configUSE_MUTEXES == 1 )
/* xTaskGetCurrentTaskHandle is used by the priority inheritance mechanism
within the mutex implementation so must be available if mutexes are used . */
# undef INCLUDE_xTaskGetCurrentTaskHandle
# define INCLUDE_xTaskGetCurrentTaskHandle 1
# else
# ifndef INCLUDE_xTaskGetCurrentTaskHandle
# define INCLUDE_xTaskGetCurrentTaskHandle 0
# endif
2006-05-02 17:39:15 +08:00
# endif
2007-08-22 00:54:48 +08:00
2008-03-04 00:32:37 +08:00
2008-05-08 02:02:19 +08:00
# ifndef portSET_INTERRUPT_MASK_FROM_ISR
2008-05-20 03:12:57 +08:00
# define portSET_INTERRUPT_MASK_FROM_ISR() 0
2008-05-08 02:02:19 +08:00
# endif
# ifndef portCLEAR_INTERRUPT_MASK_FROM_ISR
2008-05-20 03:12:57 +08:00
# define portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedStatusValue ) ( void ) uxSavedStatusValue
2008-05-08 02:02:19 +08:00
# endif
2008-05-24 03:24:05 +08:00
# ifndef configQUEUE_REGISTRY_SIZE
# define configQUEUE_REGISTRY_SIZE 0
# endif
# if configQUEUE_REGISTRY_SIZE < 1
# define configQUEUE_REGISTRY_SIZE 0
# define vQueueAddToRegistry( xQueue, pcName )
# define vQueueUnregisterQueue( xQueue )
# endif
2008-03-04 00:32:37 +08:00
/* Remove any unused trace macros. */
# ifndef traceSTART
/* Used to perform any necessary initialisation - for example, open a file
into which trace is to be written . */
# define traceSTART()
# endif
# ifndef traceEND
/* Use to close a trace, for example close a file into which trace has been
written . */
# define traceEND()
# endif
# ifndef traceTASK_SWITCHED_IN
/* Called after a task has been selected to run. pxCurrentTCB holds a pointer
to the task control block of the selected task . */
# define traceTASK_SWITCHED_IN()
# endif
2008-04-06 17:36:48 +08:00
# ifndef traceTASK_SWITCHED_OUT
/* Called before a task has been selected to run. pxCurrentTCB holds a pointer
to the task control block of the task being switched out . */
# define traceTASK_SWITCHED_OUT()
# endif
2008-03-04 00:32:37 +08:00
# ifndef traceBLOCKING_ON_QUEUE_RECEIVE
2011-01-06 18:08:07 +08:00
/* Task is about to block because it cannot read from a
2008-03-04 00:32:37 +08:00
queue / mutex / semaphore . pxQueue is a pointer to the queue / mutex / semaphore
2011-01-06 18:08:07 +08:00
upon which the read was attempted . pxCurrentTCB points to the TCB of the
2008-03-04 00:32:37 +08:00
task that attempted the read . */
# define traceBLOCKING_ON_QUEUE_RECEIVE( pxQueue )
# endif
# ifndef traceBLOCKING_ON_QUEUE_SEND
2011-01-06 18:08:07 +08:00
/* Task is about to block because it cannot write to a
2008-03-04 00:32:37 +08:00
queue / mutex / semaphore . pxQueue is a pointer to the queue / mutex / semaphore
2011-01-06 18:08:07 +08:00
upon which the write was attempted . pxCurrentTCB points to the TCB of the
2008-03-04 00:32:37 +08:00
task that attempted the write . */
# define traceBLOCKING_ON_QUEUE_SEND( pxQueue )
# endif
2008-03-04 04:56:55 +08:00
# ifndef configCHECK_FOR_STACK_OVERFLOW
# define configCHECK_FOR_STACK_OVERFLOW 0
# endif
2008-03-04 00:32:37 +08:00
/* The following event macros are embedded in the kernel API calls. */
# ifndef traceQUEUE_CREATE
# define traceQUEUE_CREATE( pxNewQueue )
# endif
# ifndef traceQUEUE_CREATE_FAILED
# define traceQUEUE_CREATE_FAILED()
# endif
# ifndef traceCREATE_MUTEX
# define traceCREATE_MUTEX( pxNewQueue )
# endif
# ifndef traceCREATE_MUTEX_FAILED
# define traceCREATE_MUTEX_FAILED()
# endif
# ifndef traceGIVE_MUTEX_RECURSIVE
# define traceGIVE_MUTEX_RECURSIVE( pxMutex )
# endif
# ifndef traceGIVE_MUTEX_RECURSIVE_FAILED
# define traceGIVE_MUTEX_RECURSIVE_FAILED( pxMutex )
# endif
# ifndef traceTAKE_MUTEX_RECURSIVE
# define traceTAKE_MUTEX_RECURSIVE( pxMutex )
# endif
2010-11-21 19:35:48 +08:00
# ifndef traceTAKE_MUTEX_RECURSIVE_FAILED
# define traceTAKE_MUTEX_RECURSIVE_FAILED( pxMutex )
# endif
2008-03-04 00:32:37 +08:00
# ifndef traceCREATE_COUNTING_SEMAPHORE
# define traceCREATE_COUNTING_SEMAPHORE()
# endif
# ifndef traceCREATE_COUNTING_SEMAPHORE_FAILED
# define traceCREATE_COUNTING_SEMAPHORE_FAILED()
# endif
# ifndef traceQUEUE_SEND
# define traceQUEUE_SEND( pxQueue )
# endif
# ifndef traceQUEUE_SEND_FAILED
# define traceQUEUE_SEND_FAILED( pxQueue )
# endif
# ifndef traceQUEUE_RECEIVE
# define traceQUEUE_RECEIVE( pxQueue )
# endif
# ifndef traceQUEUE_PEEK
# define traceQUEUE_PEEK( pxQueue )
# endif
# ifndef traceQUEUE_RECEIVE_FAILED
# define traceQUEUE_RECEIVE_FAILED( pxQueue )
# endif
# ifndef traceQUEUE_SEND_FROM_ISR
# define traceQUEUE_SEND_FROM_ISR( pxQueue )
# endif
# ifndef traceQUEUE_SEND_FROM_ISR_FAILED
# define traceQUEUE_SEND_FROM_ISR_FAILED( pxQueue )
# endif
# ifndef traceQUEUE_RECEIVE_FROM_ISR
# define traceQUEUE_RECEIVE_FROM_ISR( pxQueue )
# endif
# ifndef traceQUEUE_RECEIVE_FROM_ISR_FAILED
# define traceQUEUE_RECEIVE_FROM_ISR_FAILED( pxQueue )
# endif
# ifndef traceQUEUE_DELETE
# define traceQUEUE_DELETE( pxQueue )
# endif
# ifndef traceTASK_CREATE
# define traceTASK_CREATE( pxNewTCB )
# endif
# ifndef traceTASK_CREATE_FAILED
2010-12-09 04:25:24 +08:00
# define traceTASK_CREATE_FAILED()
2008-03-04 00:32:37 +08:00
# endif
# ifndef traceTASK_DELETE
# define traceTASK_DELETE( pxTaskToDelete )
# endif
# ifndef traceTASK_DELAY_UNTIL
# define traceTASK_DELAY_UNTIL()
# endif
# ifndef traceTASK_DELAY
# define traceTASK_DELAY()
# endif
# ifndef traceTASK_PRIORITY_SET
# define traceTASK_PRIORITY_SET( pxTask, uxNewPriority )
# endif
# ifndef traceTASK_SUSPEND
# define traceTASK_SUSPEND( pxTaskToSuspend )
# endif
# ifndef traceTASK_RESUME
# define traceTASK_RESUME( pxTaskToResume )
# endif
# ifndef traceTASK_RESUME_FROM_ISR
# define traceTASK_RESUME_FROM_ISR( pxTaskToResume )
# endif
# ifndef traceTASK_INCREMENT_TICK
# define traceTASK_INCREMENT_TICK( xTickCount )
# endif
2009-05-19 18:31:53 +08:00
# ifndef configGENERATE_RUN_TIME_STATS
# define configGENERATE_RUN_TIME_STATS 0
# endif
# if ( configGENERATE_RUN_TIME_STATS == 1 )
# ifndef portCONFIGURE_TIMER_FOR_RUN_TIME_STATS
# error If configGENERATE_RUN_TIME_STATS is defined then portCONFIGURE_TIMER_FOR_RUN_TIME_STATS must also be defined. portCONFIGURE_TIMER_FOR_RUN_TIME_STATS should call a port layer function to setup a peripheral timer / counter that can then be used as the run time counter time base.
# endif /* portCONFIGURE_TIMER_FOR_RUN_TIME_STATS */
# ifndef portGET_RUN_TIME_COUNTER_VALUE
2011-01-06 18:08:07 +08:00
# ifndef portALT_GET_RUN_TIME_COUNTER_VALUE
# error If configGENERATE_RUN_TIME_STATS is defined then either portGET_RUN_TIME_COUNTER_VALUE or portALT_GET_RUN_TIME_COUNTER_VALUE must also be defined. See the examples provided and the FreeRTOS web site for more information.
# endif /* portALT_GET_RUN_TIME_COUNTER_VALUE */
2009-05-19 18:31:53 +08:00
# endif /* portGET_RUN_TIME_COUNTER_VALUE */
# endif /* configGENERATE_RUN_TIME_STATS */
# ifndef portCONFIGURE_TIMER_FOR_RUN_TIME_STATS
# define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()
# endif
2009-07-22 01:33:02 +08:00
# ifndef configUSE_MALLOC_FAILED_HOOK
# define configUSE_MALLOC_FAILED_HOOK 0
# endif
2009-09-30 03:49:54 +08:00
# ifndef portPRIVILEGE_BIT
# define portPRIVILEGE_BIT ( ( unsigned portBASE_TYPE ) 0x00 )
# endif
# ifndef portYIELD_WITHIN_API
# define portYIELD_WITHIN_API portYIELD
# endif
# ifndef pvPortMallocAligned
2011-02-07 02:47:57 +08:00
# define pvPortMallocAligned( x, puxStackBuffer ) ( ( ( puxStackBuffer ) == NULL ) ? ( pvPortMalloc( ( x ) ) ) : ( puxStackBuffer ) )
2009-09-30 03:49:54 +08:00
# endif
# ifndef vPortFreeAligned
# define vPortFreeAligned( pvBlockToFree ) vPortFree( pvBlockToFree )
# endif
2007-08-22 00:54:48 +08:00
# endif /* INC_FREERTOS_H */
2008-03-04 00:32:37 +08:00