| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 | 
							- /*
 
-     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!
 
- */
 
- /*
 
-  * The simplest possible implementation of pvPortMalloc().  Note that this
 
-  * implementation does NOT allow allocated memory to be freed again.
 
-  *
 
-  * See heap_2.c, heap_3.c and heap_4.c for alternative implementations, and the
 
-  * memory management pages of http://www.FreeRTOS.org for more information.
 
-  */
 
- #include <stdlib.h>
 
- /* Defining MPU_WRAPPERS_INCLUDED_FROM_API_FILE prevents task.h from redefining
 
- all the API functions to use the MPU wrappers.  That should only be done when
 
- task.h is included from an application file. */
 
- #define MPU_WRAPPERS_INCLUDED_FROM_API_FILE
 
- #include "FreeRTOS.h"
 
- #include "task.h"
 
- #undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE
 
- /* A few bytes might be lost to byte aligning the heap start address. */
 
- #define configADJUSTED_HEAP_SIZE	( configTOTAL_HEAP_SIZE - portBYTE_ALIGNMENT )
 
- /* Allocate the memory for the heap. */
 
- static uint8_t ucHeap[ configTOTAL_HEAP_SIZE ];
 
- static size_t xNextFreeByte = ( size_t ) 0;
 
- /*-----------------------------------------------------------*/
 
- void *pvPortMalloc( size_t xWantedSize )
 
- {
 
- void *pvReturn = NULL;
 
- static uint8_t *pucAlignedHeap = NULL;
 
- 	/* Ensure that blocks are always aligned to the required number of bytes. */
 
- 	#if portBYTE_ALIGNMENT != 1
 
- 		if( xWantedSize & portBYTE_ALIGNMENT_MASK )
 
- 		{
 
- 			/* Byte alignment required. */
 
- 			xWantedSize += ( portBYTE_ALIGNMENT - ( xWantedSize & portBYTE_ALIGNMENT_MASK ) );
 
- 		}
 
- 	#endif
 
- 	vTaskSuspendAll();
 
- 	{
 
- 		if( pucAlignedHeap == NULL )
 
- 		{
 
- 			/* Ensure the heap starts on a correctly aligned boundary. */
 
- 			pucAlignedHeap = ( uint8_t * ) ( ( ( portPOINTER_SIZE_TYPE ) &ucHeap[ portBYTE_ALIGNMENT ] ) & ( ( portPOINTER_SIZE_TYPE ) ~portBYTE_ALIGNMENT_MASK ) );
 
- 		}
 
- 		/* Check there is enough room left for the allocation. */
 
- 		if( ( ( xNextFreeByte + xWantedSize ) < configADJUSTED_HEAP_SIZE ) &&
 
- 			( ( xNextFreeByte + xWantedSize ) > xNextFreeByte )	)/* Check for overflow. */
 
- 		{
 
- 			/* Return the next free byte then increment the index past this
 
- 			block. */
 
- 			pvReturn = pucAlignedHeap + xNextFreeByte;
 
- 			xNextFreeByte += xWantedSize;
 
- 		}
 
- 		traceMALLOC( pvReturn, xWantedSize );
 
- 	}
 
- 	( void ) xTaskResumeAll();
 
- 	#if( configUSE_MALLOC_FAILED_HOOK == 1 )
 
- 	{
 
- 		if( pvReturn == NULL )
 
- 		{
 
- 			extern void vApplicationMallocFailedHook( void );
 
- 			vApplicationMallocFailedHook();
 
- 		}
 
- 	}
 
- 	#endif
 
- 	return pvReturn;
 
- }
 
- /*-----------------------------------------------------------*/
 
- void vPortFree( void *pv )
 
- {
 
- 	/* Memory cannot be freed using this scheme.  See heap_2.c, heap_3.c and
 
- 	heap_4.c for alternative implementations, and the memory management pages of
 
- 	http://www.FreeRTOS.org for more information. */
 
- 	( void ) pv;
 
- 	/* Force an assert as it is invalid to call this function. */
 
- 	configASSERT( pv == NULL );
 
- }
 
- /*-----------------------------------------------------------*/
 
- void vPortInitialiseBlocks( void )
 
- {
 
- 	/* Only required when static memory is not cleared. */
 
- 	xNextFreeByte = ( size_t ) 0;
 
- }
 
- /*-----------------------------------------------------------*/
 
- size_t xPortGetFreeHeapSize( void )
 
- {
 
- 	return ( configADJUSTED_HEAP_SIZE - xNextFreeByte );
 
- }
 
 
  |