2013-04-05 22:46:56 +02:00
/*
2013-04-23 21:57:50 +02:00
FreeRTOS V7 .4 .0 - Copyright ( C ) 2013 Real Time Engineers Ltd .
FEATURES AND PORTS ARE ADDED TO FREERTOS ALL THE TIME . PLEASE VISIT
http : //www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
2013-04-05 22:46:56 +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 ! *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
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 .
2013-04-23 21:57:50 +02:00
> > > > > > NOTE < < < < < < The modification to the GPL is included to allow you to
2013-04-05 22:46:56 +02:00
distribute a combined work that includes FreeRTOS without being obliged to
provide the source code for proprietary components outside of the FreeRTOS
2013-04-23 21:57:50 +02:00
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 more
details . You should have received a copy of the GNU General Public License
and the FreeRTOS license exception along with FreeRTOS ; if not itcan be
viewed here : http : //www.freertos.org/a00114.html and also obtained by
writing to Real Time Engineers Ltd . , contact details for whom are available
on the FreeRTOS WEB site .
2013-04-05 22:46:56 +02:00
1 tab = = 4 spaces !
2013-04-23 21:57:50 +02:00
2013-04-05 22:46:56 +02:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* Having a problem ? Start by reading the FAQ " My application does *
2013-04-23 21:57:50 +02:00
* not run , what could be wrong ? " *
2013-04-05 22:46:56 +02:00
* *
* http : //www.FreeRTOS.org/FAQHelp.html *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
2013-04-23 21:57:50 +02:00
http : //www.FreeRTOS.org - Documentation, books, training, latest versions,
license and Real Time Engineers Ltd . contact details .
2013-04-05 22:46:56 +02:00
http : //www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
2013-04-23 21:57:50 +02:00
including FreeRTOS + Trace - an indispensable productivity tool , and our new
fully thread aware and reentrant UDP / IP stack .
2013-04-05 22:46:56 +02:00
2013-04-23 21:57:50 +02:00
http : //www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High
Integrity Systems , who sell the code with commercial support ,
indemnification and middleware , under the OpenRTOS brand .
http : //www.SafeRTOS.com - High Integrity Systems also provide a safety
engineered and independently SIL3 certified version for use in safety and
mission critical applications that require provable dependability .
2013-04-05 22:46:56 +02:00
*/
# 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"
2013-04-23 21:57:50 +02:00
/* configUSE_PORT_OPTIMISED_TASK_SELECTION must be defined before portable.h
is included as it is used by the port layer . */
# ifndef configUSE_PORT_OPTIMISED_TASK_SELECTION
# define configUSE_PORT_OPTIMISED_TASK_SELECTION 0
# endif
2013-04-05 22:46:56 +02:00
/* 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
2013-04-23 21:57:50 +02:00
# ifndef INCLUDE_vTaskDelete
2013-04-05 22:46:56 +02:00
# 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
2013-04-23 21:57:50 +02:00
# ifndef INCLUDE_vTaskSuspend
2013-04-05 22:46:56 +02:00
# 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 INCLUDE_xTaskGetIdleTaskHandle
# define INCLUDE_xTaskGetIdleTaskHandle 0
# endif
# ifndef INCLUDE_xTimerGetTimerDaemonTaskHandle
# define INCLUDE_xTimerGetTimerDaemonTaskHandle 0
# endif
# ifndef INCLUDE_xQueueGetMutexHolder
# define INCLUDE_xQueueGetMutexHolder 0
# endif
2013-04-23 21:57:50 +02:00
# ifndef INCLUDE_xSemaphoreGetMutexHolder
# define INCLUDE_xSemaphoreGetMutexHolder INCLUDE_xQueueGetMutexHolder
# endif
2013-04-05 22:46:56 +02:00
# ifndef INCLUDE_pcTaskGetTaskName
# define INCLUDE_pcTaskGetTaskName 0
# endif
# ifndef configUSE_APPLICATION_TASK_TAG
# define configUSE_APPLICATION_TASK_TAG 0
# endif
# ifndef INCLUDE_uxTaskGetStackHighWaterMark
# define INCLUDE_uxTaskGetStackHighWaterMark 0
# endif
2013-04-23 21:57:50 +02:00
# ifndef INCLUDE_eTaskGetState
# define INCLUDE_eTaskGetState 0
# endif
2013-04-05 22:46:56 +02:00
# ifndef configUSE_RECURSIVE_MUTEXES
# define configUSE_RECURSIVE_MUTEXES 0
# endif
# ifndef configUSE_MUTEXES
# define configUSE_MUTEXES 0
# endif
# ifndef configUSE_TIMERS
# define configUSE_TIMERS 0
# endif
# 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
# error configMAX_TASK_NAME_LEN must be set to a minimum of 1 in FreeRTOSConfig.h
# endif
# ifndef INCLUDE_xTaskResumeFromISR
# define INCLUDE_xTaskResumeFromISR 1
# endif
# ifndef configASSERT
# define configASSERT( x )
# endif
# ifndef portALIGNMENT_ASSERT_pxCurrentTCB
# define portALIGNMENT_ASSERT_pxCurrentTCB configASSERT
# 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 */
# ifndef INCLUDE_xTaskGetSchedulerState
# define INCLUDE_xTaskGetSchedulerState 0
# endif
# ifndef INCLUDE_xTaskGetCurrentTaskHandle
# define INCLUDE_xTaskGetCurrentTaskHandle 0
# 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 portCLEAN_UP_TCB
# define portCLEAN_UP_TCB( pxTCB ) ( void ) pxTCB
# endif
# ifndef portSETUP_TCB
# define portSETUP_TCB( pxTCB ) ( void ) pxTCB
# endif
# ifndef configQUEUE_REGISTRY_SIZE
# define configQUEUE_REGISTRY_SIZE 0U
# endif
# if ( configQUEUE_REGISTRY_SIZE < 1 )
# define vQueueAddToRegistry( xQueue, pcName )
# define vQueueUnregisterQueue( xQueue )
# endif
# ifndef portPOINTER_SIZE_TYPE
# define portPOINTER_SIZE_TYPE unsigned long
# 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 traceTASK_PRIORITY_INHERIT
/* Called when a task attempts to take a mutex that is already held by a
lower priority task . pxTCBOfMutexHolder is a pointer to the TCB of the task
that holds the mutex . uxInheritedPriority is the priority the mutex holder
will inherit ( the priority of the task that is attempting to obtain the
muted . */
# define traceTASK_PRIORITY_INHERIT( pxTCBOfMutexHolder, uxInheritedPriority )
# endif
# ifndef traceTASK_PRIORITY_DISINHERIT
/* Called when a task releases a mutex, the holding of which had resulted in
2013-04-23 21:57:50 +02:00
the task inheriting the priority of a higher priority task .
2013-04-05 22:46:56 +02:00
pxTCBOfMutexHolder is a pointer to the TCB of the task that is releasing the
mutex . uxOriginalPriority is the task ' s configured ( base ) priority . */
# define traceTASK_PRIORITY_DISINHERIT( pxTCBOfMutexHolder, uxOriginalPriority )
# endif
# ifndef traceBLOCKING_ON_QUEUE_RECEIVE
/* Task is about to block because it cannot read from a
queue / mutex / semaphore . pxQueue is a pointer to the queue / mutex / semaphore
upon which the read was attempted . pxCurrentTCB points to the TCB of the
task that attempted the read . */
# define traceBLOCKING_ON_QUEUE_RECEIVE( pxQueue )
# endif
# ifndef traceBLOCKING_ON_QUEUE_SEND
/* Task is about to block because it cannot write to a
queue / mutex / semaphore . pxQueue is a pointer to the queue / mutex / semaphore
upon which the write was attempted . pxCurrentTCB points to the TCB of the
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 traceMOVED_TASK_TO_READY_STATE
# define traceMOVED_TASK_TO_READY_STATE( pxTCB )
# endif
2013-04-23 21:57:50 +02:00
# ifndef traceQUEUE_CREATE
2013-04-05 22:46:56 +02:00
# define traceQUEUE_CREATE( pxNewQueue )
# endif
# ifndef traceQUEUE_CREATE_FAILED
# define traceQUEUE_CREATE_FAILED( ucQueueType )
# 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
# ifndef traceTAKE_MUTEX_RECURSIVE_FAILED
# define traceTAKE_MUTEX_RECURSIVE_FAILED( pxMutex )
# endif
# 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
# define traceTASK_CREATE_FAILED()
# 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
# 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
# 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
# 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 */
# 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
# define pvPortMallocAligned( x, puxStackBuffer ) ( ( ( puxStackBuffer ) == NULL ) ? ( pvPortMalloc( ( x ) ) ) : ( puxStackBuffer ) )
# endif
# ifndef vPortFreeAligned
# define vPortFreeAligned( pvBlockToFree ) vPortFree( pvBlockToFree )
# endif
2013-04-23 21:57:50 +02:00
# ifndef portSUPPRESS_TICKS_AND_SLEEP
# define portSUPPRESS_TICKS_AND_SLEEP( xExpectedIdleTime )
# endif
# ifndef configEXPECTED_IDLE_TIME_BEFORE_SLEEP
# define configEXPECTED_IDLE_TIME_BEFORE_SLEEP 2
# endif
# if configEXPECTED_IDLE_TIME_BEFORE_SLEEP < 2
# error configEXPECTED_IDLE_TIME_BEFORE_SLEEP must not be less than 2
# endif
# ifndef configUSE_TICKLESS_IDLE
# define configUSE_TICKLESS_IDLE 0
# endif
# ifndef configPRE_SLEEP_PROCESSING
# define configPRE_SLEEP_PROCESSING( x )
# endif
# ifndef configPOST_SLEEP_PROCESSING
# define configPOST_SLEEP_PROCESSING( x )
# endif
# ifndef configUSE_QUEUE_SETS
# define configUSE_QUEUE_SETS 0
# endif
/* For backward compatability. */
# define eTaskStateGet eTaskGetState
2013-04-05 22:46:56 +02:00
# endif /* INC_FREERTOS_H */