| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 | 
							- /*
 
-     FreeRTOS V8.2.0 - Copyright (C) 2015 Real Time Engineers Ltd.
 
-     All rights reserved
 
-     VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
 
-     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.
 
- 	***************************************************************************
 
-     >>!   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.  Full license text is available on the following
 
-     link: http://www.freertos.org/a00114.html
 
-     ***************************************************************************
 
-      *                                                                       *
 
-      *    FreeRTOS provides completely free yet professionally developed,    *
 
-      *    robust, strictly quality controlled, supported, and cross          *
 
-      *    platform software that is more than just the market leader, it     *
 
-      *    is the industry's de facto standard.                               *
 
-      *                                                                       *
 
-      *    Help yourself get started quickly while simultaneously helping     *
 
-      *    to support the FreeRTOS project by purchasing a FreeRTOS           *
 
-      *    tutorial book, reference manual, or both:                          *
 
-      *    http://www.FreeRTOS.org/Documentation                              *
 
-      *                                                                       *
 
-     ***************************************************************************
 
-     http://www.FreeRTOS.org/FAQHelp.html - Having a problem?  Start by reading
 
- 	the FAQ page "My application does not run, what could be wrong?".  Have you
 
- 	defined configASSERT()?
 
- 	http://www.FreeRTOS.org/support - In return for receiving this top quality
 
- 	embedded software for free we request you assist our global community by
 
- 	participating in the support forum.
 
- 	http://www.FreeRTOS.org/training - Investing in training allows your team to
 
- 	be as productive as possible as early as possible.  Now you can receive
 
- 	FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers
 
- 	Ltd, and the world's leading authority on the world's leading RTOS.
 
-     http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
 
-     including FreeRTOS+Trace - an indispensable productivity tool, a DOS
 
-     compatible FAT file system, and our tiny thread aware UDP/IP stack.
 
-     http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.
 
-     Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.
 
-     http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High
 
-     Integrity Systems ltd. to sell under the OpenRTOS brand.  Low cost OpenRTOS
 
-     licenses offer ticketed support, indemnification and commercial middleware.
 
-     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.
 
-     1 tab == 4 spaces!
 
- */
 
- #ifndef STACK_MACROS_H
 
- #define STACK_MACROS_H
 
- /*
 
-  * Call the stack overflow hook function if the stack of the task being swapped
 
-  * out is currently overflowed, or looks like it might have overflowed in the
 
-  * past.
 
-  *
 
-  * Setting configCHECK_FOR_STACK_OVERFLOW to 1 will cause the macro to check
 
-  * the current stack state only - comparing the current top of stack value to
 
-  * the stack limit.  Setting configCHECK_FOR_STACK_OVERFLOW to greater than 1
 
-  * will also cause the last few stack bytes to be checked to ensure the value
 
-  * to which the bytes were set when the task was created have not been
 
-  * overwritten.  Note this second test does not guarantee that an overflowed
 
-  * stack will always be recognised.
 
-  */
 
- /*-----------------------------------------------------------*/
 
- #if( configCHECK_FOR_STACK_OVERFLOW == 0 )
 
- 	/* FreeRTOSConfig.h is not set to check for stack overflows. */
 
- 	#define taskFIRST_CHECK_FOR_STACK_OVERFLOW()
 
- 	#define taskSECOND_CHECK_FOR_STACK_OVERFLOW()
 
- #endif /* configCHECK_FOR_STACK_OVERFLOW == 0 */
 
- /*-----------------------------------------------------------*/
 
- #if( configCHECK_FOR_STACK_OVERFLOW == 1 )
 
- 	/* FreeRTOSConfig.h is only set to use the first method of
 
- 	overflow checking. */
 
- 	#define taskSECOND_CHECK_FOR_STACK_OVERFLOW()
 
- #endif
 
- /*-----------------------------------------------------------*/
 
- #if( ( configCHECK_FOR_STACK_OVERFLOW > 0 ) && ( portSTACK_GROWTH < 0 ) )
 
- 	/* Only the current stack state is to be checked. */
 
- 	#define taskFIRST_CHECK_FOR_STACK_OVERFLOW()														\
 
- 	{																									\
 
- 		/* Is the currently saved stack pointer within the stack limit? */								\
 
- 		if( pxCurrentTCB->pxTopOfStack <= pxCurrentTCB->pxStack )										\
 
- 		{																								\
 
- 			vApplicationStackOverflowHook( ( TaskHandle_t ) pxCurrentTCB, pxCurrentTCB->pcTaskName );	\
 
- 		}																								\
 
- 	}
 
- #endif /* configCHECK_FOR_STACK_OVERFLOW > 0 */
 
- /*-----------------------------------------------------------*/
 
- #if( ( configCHECK_FOR_STACK_OVERFLOW > 0 ) && ( portSTACK_GROWTH > 0 ) )
 
- 	/* Only the current stack state is to be checked. */
 
- 	#define taskFIRST_CHECK_FOR_STACK_OVERFLOW()														\
 
- 	{																									\
 
- 																										\
 
- 		/* Is the currently saved stack pointer within the stack limit? */								\
 
- 		if( pxCurrentTCB->pxTopOfStack >= pxCurrentTCB->pxEndOfStack )									\
 
- 		{																								\
 
- 			vApplicationStackOverflowHook( ( TaskHandle_t ) pxCurrentTCB, pxCurrentTCB->pcTaskName );	\
 
- 		}																								\
 
- 	}
 
- #endif /* configCHECK_FOR_STACK_OVERFLOW == 1 */
 
- /*-----------------------------------------------------------*/
 
- #if( ( configCHECK_FOR_STACK_OVERFLOW > 1 ) && ( portSTACK_GROWTH < 0 ) )
 
- 	#define taskSECOND_CHECK_FOR_STACK_OVERFLOW()																						\
 
- 	{																																	\
 
- 	static const uint8_t ucExpectedStackBytes[] = {	tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE,		\
 
- 													tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE,		\
 
- 													tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE,		\
 
- 													tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE,		\
 
- 													tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE };	\
 
- 																																		\
 
- 																																		\
 
- 		/* Has the extremity of the task stack ever been written over? */																\
 
- 		if( memcmp( ( void * ) pxCurrentTCB->pxStack, ( void * ) ucExpectedStackBytes, sizeof( ucExpectedStackBytes ) ) != 0 )			\
 
- 		{																																\
 
- 			vApplicationStackOverflowHook( ( TaskHandle_t ) pxCurrentTCB, pxCurrentTCB->pcTaskName );									\
 
- 		}																																\
 
- 	}
 
- #endif /* #if( configCHECK_FOR_STACK_OVERFLOW > 1 ) */
 
- /*-----------------------------------------------------------*/
 
- #if( ( configCHECK_FOR_STACK_OVERFLOW > 1 ) && ( portSTACK_GROWTH > 0 ) )
 
- 	#define taskSECOND_CHECK_FOR_STACK_OVERFLOW()																						\
 
- 	{																																	\
 
- 	int8_t *pcEndOfStack = ( int8_t * ) pxCurrentTCB->pxEndOfStack;																		\
 
- 	static const uint8_t ucExpectedStackBytes[] = {	tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE,		\
 
- 													tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE,		\
 
- 													tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE,		\
 
- 													tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE,		\
 
- 													tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE };	\
 
- 																																		\
 
- 																																		\
 
- 		pcEndOfStack -= sizeof( ucExpectedStackBytes );																					\
 
- 																																		\
 
- 		/* Has the extremity of the task stack ever been written over? */																\
 
- 		if( memcmp( ( void * ) pcEndOfStack, ( void * ) ucExpectedStackBytes, sizeof( ucExpectedStackBytes ) ) != 0 )					\
 
- 		{																																\
 
- 			vApplicationStackOverflowHook( ( TaskHandle_t ) pxCurrentTCB, pxCurrentTCB->pcTaskName );									\
 
- 		}																																\
 
- 	}
 
- #endif /* #if( configCHECK_FOR_STACK_OVERFLOW > 1 ) */
 
- /*-----------------------------------------------------------*/
 
- #endif /* STACK_MACROS_H */
 
 
  |