2009-11-28 10:28:11 +01:00
/*
2011-06-02 06:43:38 +02:00
FreeRTOS V7 .0 .1 - Copyright ( C ) 2011 Real Time Engineers Ltd .
FreeRTOS supports many tools and architectures . V7 .0 .0 is sponsored by :
Atollic AB - Atollic provides professional embedded systems development
tools for C / C + + development , code analysis and test automation .
See http : //www.atollic.com
2009-11-28 10:28:11 +01:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
2011-06-02 06:43:38 +02:00
* *
* FreeRTOS tutorial books are available in pdf and paperback . *
* Complete , revised , and edited pdf reference manuals are also *
* available . *
* *
* Purchasing FreeRTOS documentation will not only help you , by *
* ensuring you get running as quickly as possible and with an *
* in - depth knowledge of how to use FreeRTOS , it will also help *
* the FreeRTOS project to continue with its mission of providing *
* professional grade , cross platform , de facto standard solutions *
* for microcontrollers - completely free of charge ! *
* *
* > > > See http : //www.FreeRTOS.org/Documentation for details. <<< *
* *
* Thank you for using FreeRTOS , and thank you for your support ! *
* *
2009-11-28 10:28:11 +01:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
2011-06-02 06:43:38 +02:00
2009-11-28 10:28:11 +01:00
This file is part of the FreeRTOS distribution .
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 .
2011-06-02 06:43:38 +02:00
> > > NOTE < < < The modification to the GPL is included to allow you to
distribute a combined work that includes FreeRTOS without being obliged to
provide the source code for proprietary components outside of the FreeRTOS
kernel . 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
2011-01-24 08:51:26 +01: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-11-28 10:28:11 +01:00
by writing to Richard Barry , contact details for whom are available on the
FreeRTOS WEB site .
1 tab = = 4 spaces !
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 INC_FREERTOS_H
# define INC_FREERTOS_H
/*
* Include the generic headers required for the FreeRTOS port being used .
*/
# 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"
/* Defines the prototype to which the application task hook function must
conform . */
typedef portBASE_TYPE ( * pdTASK_HOOK_CODE ) ( void * ) ;
/*
* Check all the required application specific macros have been defined .
* 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
# ifndef configUSE_APPLICATION_TASK_TAG
# define configUSE_APPLICATION_TASK_TAG 0
# endif
# ifndef INCLUDE_uxTaskGetStackHighWaterMark
# define INCLUDE_uxTaskGetStackHighWaterMark 0
# endif
# ifndef configUSE_RECURSIVE_MUTEXES
# define configUSE_RECURSIVE_MUTEXES 0
# endif
# ifndef configUSE_MUTEXES
# define configUSE_MUTEXES 0
# endif
2011-06-02 06:43:38 +02:00
# ifndef configUSE_TIMERS
# define configUSE_TIMERS 0
# endif
2009-11-28 10:28:11 +01:00
# ifndef configUSE_COUNTING_SEMAPHORES
# define configUSE_COUNTING_SEMAPHORES 0
# endif
# ifndef configUSE_ALTERNATIVE_API
# define configUSE_ALTERNATIVE_API 0
# endif
# ifndef portCRITICAL_NESTING_IN_TCB
# define portCRITICAL_NESTING_IN_TCB 0
# endif
# 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
2011-06-02 06:43:38 +02:00
# error configMAX_TASK_NAME_LEN must be set to a minimum of 1 in FreeRTOSConfig.h
2009-11-28 10:28:11 +01:00
# endif
# ifndef INCLUDE_xTaskResumeFromISR
# define INCLUDE_xTaskResumeFromISR 1
# endif
2011-06-02 06:43:38 +02:00
# ifndef configASSERT
# define configASSERT( x )
# endif
/* The timers module relies on xTaskGetSchedulerState(). */
# if configUSE_TIMERS == 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 */
2009-11-28 10:28:11 +01:00
# ifndef INCLUDE_xTaskGetSchedulerState
# define INCLUDE_xTaskGetSchedulerState 0
# endif
2011-06-02 06:43:38 +02:00
# ifndef INCLUDE_xTaskGetCurrentTaskHandle
# define INCLUDE_xTaskGetCurrentTaskHandle 0
2009-11-28 10:28:11 +01:00
# endif
# ifndef portSET_INTERRUPT_MASK_FROM_ISR
# define portSET_INTERRUPT_MASK_FROM_ISR() 0
# endif
# ifndef portCLEAR_INTERRUPT_MASK_FROM_ISR
# define portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedStatusValue ) ( void ) uxSavedStatusValue
# endif
# ifndef configQUEUE_REGISTRY_SIZE
2011-06-02 06:43:38 +02:00
# define configQUEUE_REGISTRY_SIZE 0U
2009-11-28 10:28:11 +01:00
# endif
2011-06-02 06:43:38 +02:00
# if ( configQUEUE_REGISTRY_SIZE < 1U )
2009-11-28 10:28:11 +01:00
# define vQueueAddToRegistry( xQueue, pcName )
# define vQueueUnregisterQueue( xQueue )
# endif
/* 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
# 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
# ifndef traceBLOCKING_ON_QUEUE_RECEIVE
2011-01-24 08:51:26 +01:00
/* Task is about to block because it cannot read from a
2009-11-28 10:28:11 +01:00
queue / mutex / semaphore . pxQueue is a pointer to the queue / mutex / semaphore
2011-01-24 08:51:26 +01:00
upon which the read was attempted . pxCurrentTCB points to the TCB of the
2009-11-28 10:28:11 +01:00
task that attempted the read . */
# define traceBLOCKING_ON_QUEUE_RECEIVE( pxQueue )
# endif
# ifndef traceBLOCKING_ON_QUEUE_SEND
2011-01-24 08:51:26 +01:00
/* Task is about to block because it cannot write to a
2009-11-28 10:28:11 +01:00
queue / mutex / semaphore . pxQueue is a pointer to the queue / mutex / semaphore
2011-01-24 08:51:26 +01:00
upon which the write was attempted . pxCurrentTCB points to the TCB of the
2009-11-28 10:28:11 +01:00
task that attempted the write . */
# define traceBLOCKING_ON_QUEUE_SEND( pxQueue )
# endif
# ifndef configCHECK_FOR_STACK_OVERFLOW
# define configCHECK_FOR_STACK_OVERFLOW 0
# endif
/* 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
2011-01-24 08:51:26 +01:00
# ifndef traceTAKE_MUTEX_RECURSIVE_FAILED
# define traceTAKE_MUTEX_RECURSIVE_FAILED( pxMutex )
# endif
2009-11-28 10:28:11 +01: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
2011-01-24 08:51:26 +01:00
# define traceTASK_CREATE_FAILED()
2009-11-28 10:28:11 +01: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
2011-06-02 06:43:38 +02:00
# ifndef traceTIMER_CREATE
# define traceTIMER_CREATE( pxNewTimer )
# endif
# ifndef traceTIMER_CREATE_FAILED
# define traceTIMER_CREATE_FAILED()
# endif
# ifndef traceTIMER_COMMAND_SEND
# define traceTIMER_COMMAND_SEND( xTimer, xMessageID, xMessageValueValue, xReturn )
# endif
# ifndef traceTIMER_EXPIRED
# define traceTIMER_EXPIRED( pxTimer )
# endif
# ifndef traceTIMER_COMMAND_RECEIVED
# define traceTIMER_COMMAND_RECEIVED( pxTimer, xMessageID, xMessageValue )
# endif
2009-11-28 10:28:11 +01: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-24 08:51:26 +01: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-11-28 10:28:11 +01: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
# ifndef configUSE_MALLOC_FAILED_HOOK
# define configUSE_MALLOC_FAILED_HOOK 0
# endif
# ifndef portPRIVILEGE_BIT
# define portPRIVILEGE_BIT ( ( unsigned portBASE_TYPE ) 0x00 )
# endif
# ifndef portYIELD_WITHIN_API
# define portYIELD_WITHIN_API portYIELD
# endif
# ifndef pvPortMallocAligned
2011-06-02 06:43:38 +02:00
# define pvPortMallocAligned( x, puxStackBuffer ) ( ( ( puxStackBuffer ) == NULL ) ? ( pvPortMalloc( ( x ) ) ) : ( puxStackBuffer ) )
2009-11-28 10:28:11 +01:00
# endif
# ifndef vPortFreeAligned
# define vPortFreeAligned( pvBlockToFree ) vPortFree( pvBlockToFree )
# endif
# endif /* INC_FREERTOS_H */