Update revision to use TI's mqtt and Freertos.
Dependencies: mbed client server
Fork of cc3100_Test_mqtt_CM3 by
FreeRTOS_V8_2_1/source/portable/MemMang/heap_1.c@3:a8c249046181, 2015-09-03 (annotated)
- Committer:
- dflet
- Date:
- Thu Sep 03 14:02:37 2015 +0000
- Revision:
- 3:a8c249046181
SPI Mode change 1 to 0
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dflet | 3:a8c249046181 | 1 | /* |
dflet | 3:a8c249046181 | 2 | FreeRTOS V8.2.1 - Copyright (C) 2015 Real Time Engineers Ltd. |
dflet | 3:a8c249046181 | 3 | All rights reserved |
dflet | 3:a8c249046181 | 4 | |
dflet | 3:a8c249046181 | 5 | VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. |
dflet | 3:a8c249046181 | 6 | |
dflet | 3:a8c249046181 | 7 | This file is part of the FreeRTOS distribution. |
dflet | 3:a8c249046181 | 8 | |
dflet | 3:a8c249046181 | 9 | FreeRTOS is free software; you can redistribute it and/or modify it under |
dflet | 3:a8c249046181 | 10 | the terms of the GNU General Public License (version 2) as published by the |
dflet | 3:a8c249046181 | 11 | Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception. |
dflet | 3:a8c249046181 | 12 | |
dflet | 3:a8c249046181 | 13 | *************************************************************************** |
dflet | 3:a8c249046181 | 14 | >>! NOTE: The modification to the GPL is included to allow you to !<< |
dflet | 3:a8c249046181 | 15 | >>! distribute a combined work that includes FreeRTOS without being !<< |
dflet | 3:a8c249046181 | 16 | >>! obliged to provide the source code for proprietary components !<< |
dflet | 3:a8c249046181 | 17 | >>! outside of the FreeRTOS kernel. !<< |
dflet | 3:a8c249046181 | 18 | *************************************************************************** |
dflet | 3:a8c249046181 | 19 | |
dflet | 3:a8c249046181 | 20 | FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY |
dflet | 3:a8c249046181 | 21 | WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
dflet | 3:a8c249046181 | 22 | FOR A PARTICULAR PURPOSE. Full license text is available on the following |
dflet | 3:a8c249046181 | 23 | link: http://www.freertos.org/a00114.html |
dflet | 3:a8c249046181 | 24 | |
dflet | 3:a8c249046181 | 25 | *************************************************************************** |
dflet | 3:a8c249046181 | 26 | * * |
dflet | 3:a8c249046181 | 27 | * FreeRTOS provides completely free yet professionally developed, * |
dflet | 3:a8c249046181 | 28 | * robust, strictly quality controlled, supported, and cross * |
dflet | 3:a8c249046181 | 29 | * platform software that is more than just the market leader, it * |
dflet | 3:a8c249046181 | 30 | * is the industry's de facto standard. * |
dflet | 3:a8c249046181 | 31 | * * |
dflet | 3:a8c249046181 | 32 | * Help yourself get started quickly while simultaneously helping * |
dflet | 3:a8c249046181 | 33 | * to support the FreeRTOS project by purchasing a FreeRTOS * |
dflet | 3:a8c249046181 | 34 | * tutorial book, reference manual, or both: * |
dflet | 3:a8c249046181 | 35 | * http://www.FreeRTOS.org/Documentation * |
dflet | 3:a8c249046181 | 36 | * * |
dflet | 3:a8c249046181 | 37 | *************************************************************************** |
dflet | 3:a8c249046181 | 38 | |
dflet | 3:a8c249046181 | 39 | http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading |
dflet | 3:a8c249046181 | 40 | the FAQ page "My application does not run, what could be wrong?". Have you |
dflet | 3:a8c249046181 | 41 | defined configASSERT()? |
dflet | 3:a8c249046181 | 42 | |
dflet | 3:a8c249046181 | 43 | http://www.FreeRTOS.org/support - In return for receiving this top quality |
dflet | 3:a8c249046181 | 44 | embedded software for free we request you assist our global community by |
dflet | 3:a8c249046181 | 45 | participating in the support forum. |
dflet | 3:a8c249046181 | 46 | |
dflet | 3:a8c249046181 | 47 | http://www.FreeRTOS.org/training - Investing in training allows your team to |
dflet | 3:a8c249046181 | 48 | be as productive as possible as early as possible. Now you can receive |
dflet | 3:a8c249046181 | 49 | FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers |
dflet | 3:a8c249046181 | 50 | Ltd, and the world's leading authority on the world's leading RTOS. |
dflet | 3:a8c249046181 | 51 | |
dflet | 3:a8c249046181 | 52 | http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, |
dflet | 3:a8c249046181 | 53 | including FreeRTOS+Trace - an indispensable productivity tool, a DOS |
dflet | 3:a8c249046181 | 54 | compatible FAT file system, and our tiny thread aware UDP/IP stack. |
dflet | 3:a8c249046181 | 55 | |
dflet | 3:a8c249046181 | 56 | http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. |
dflet | 3:a8c249046181 | 57 | Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. |
dflet | 3:a8c249046181 | 58 | |
dflet | 3:a8c249046181 | 59 | http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High |
dflet | 3:a8c249046181 | 60 | Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS |
dflet | 3:a8c249046181 | 61 | licenses offer ticketed support, indemnification and commercial middleware. |
dflet | 3:a8c249046181 | 62 | |
dflet | 3:a8c249046181 | 63 | http://www.SafeRTOS.com - High Integrity Systems also provide a safety |
dflet | 3:a8c249046181 | 64 | engineered and independently SIL3 certified version for use in safety and |
dflet | 3:a8c249046181 | 65 | mission critical applications that require provable dependability. |
dflet | 3:a8c249046181 | 66 | |
dflet | 3:a8c249046181 | 67 | 1 tab == 4 spaces! |
dflet | 3:a8c249046181 | 68 | */ |
dflet | 3:a8c249046181 | 69 | |
dflet | 3:a8c249046181 | 70 | |
dflet | 3:a8c249046181 | 71 | /* |
dflet | 3:a8c249046181 | 72 | * The simplest possible implementation of pvPortMalloc(). Note that this |
dflet | 3:a8c249046181 | 73 | * implementation does NOT allow allocated memory to be freed again. |
dflet | 3:a8c249046181 | 74 | * |
dflet | 3:a8c249046181 | 75 | * See heap_2.c, heap_3.c and heap_4.c for alternative implementations, and the |
dflet | 3:a8c249046181 | 76 | * memory management pages of http://www.FreeRTOS.org for more information. |
dflet | 3:a8c249046181 | 77 | */ |
dflet | 3:a8c249046181 | 78 | #include <stdlib.h> |
dflet | 3:a8c249046181 | 79 | |
dflet | 3:a8c249046181 | 80 | /* Defining MPU_WRAPPERS_INCLUDED_FROM_API_FILE prevents task.h from redefining |
dflet | 3:a8c249046181 | 81 | all the API functions to use the MPU wrappers. That should only be done when |
dflet | 3:a8c249046181 | 82 | task.h is included from an application file. */ |
dflet | 3:a8c249046181 | 83 | #define MPU_WRAPPERS_INCLUDED_FROM_API_FILE |
dflet | 3:a8c249046181 | 84 | |
dflet | 3:a8c249046181 | 85 | #include "FreeRTOS.h" |
dflet | 3:a8c249046181 | 86 | #include "task.h" |
dflet | 3:a8c249046181 | 87 | |
dflet | 3:a8c249046181 | 88 | #undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE |
dflet | 3:a8c249046181 | 89 | |
dflet | 3:a8c249046181 | 90 | /* A few bytes might be lost to byte aligning the heap start address. */ |
dflet | 3:a8c249046181 | 91 | #define configADJUSTED_HEAP_SIZE ( configTOTAL_HEAP_SIZE - portBYTE_ALIGNMENT ) |
dflet | 3:a8c249046181 | 92 | |
dflet | 3:a8c249046181 | 93 | /* Allocate the memory for the heap. */ |
dflet | 3:a8c249046181 | 94 | static uint8_t ucHeap[ configTOTAL_HEAP_SIZE ]; |
dflet | 3:a8c249046181 | 95 | static size_t xNextFreeByte = ( size_t ) 0; |
dflet | 3:a8c249046181 | 96 | |
dflet | 3:a8c249046181 | 97 | /*-----------------------------------------------------------*/ |
dflet | 3:a8c249046181 | 98 | |
dflet | 3:a8c249046181 | 99 | void *pvPortMalloc( size_t xWantedSize ) |
dflet | 3:a8c249046181 | 100 | { |
dflet | 3:a8c249046181 | 101 | void *pvReturn = NULL; |
dflet | 3:a8c249046181 | 102 | static uint8_t *pucAlignedHeap = NULL; |
dflet | 3:a8c249046181 | 103 | |
dflet | 3:a8c249046181 | 104 | /* Ensure that blocks are always aligned to the required number of bytes. */ |
dflet | 3:a8c249046181 | 105 | #if portBYTE_ALIGNMENT != 1 |
dflet | 3:a8c249046181 | 106 | if( xWantedSize & portBYTE_ALIGNMENT_MASK ) |
dflet | 3:a8c249046181 | 107 | { |
dflet | 3:a8c249046181 | 108 | /* Byte alignment required. */ |
dflet | 3:a8c249046181 | 109 | xWantedSize += ( portBYTE_ALIGNMENT - ( xWantedSize & portBYTE_ALIGNMENT_MASK ) ); |
dflet | 3:a8c249046181 | 110 | } |
dflet | 3:a8c249046181 | 111 | #endif |
dflet | 3:a8c249046181 | 112 | |
dflet | 3:a8c249046181 | 113 | vTaskSuspendAll(); |
dflet | 3:a8c249046181 | 114 | { |
dflet | 3:a8c249046181 | 115 | if( pucAlignedHeap == NULL ) |
dflet | 3:a8c249046181 | 116 | { |
dflet | 3:a8c249046181 | 117 | /* Ensure the heap starts on a correctly aligned boundary. */ |
dflet | 3:a8c249046181 | 118 | pucAlignedHeap = ( uint8_t * ) ( ( ( portPOINTER_SIZE_TYPE ) &ucHeap[ portBYTE_ALIGNMENT ] ) & ( ~( ( portPOINTER_SIZE_TYPE ) portBYTE_ALIGNMENT_MASK ) ) ); |
dflet | 3:a8c249046181 | 119 | } |
dflet | 3:a8c249046181 | 120 | |
dflet | 3:a8c249046181 | 121 | /* Check there is enough room left for the allocation. */ |
dflet | 3:a8c249046181 | 122 | if( ( ( xNextFreeByte + xWantedSize ) < configADJUSTED_HEAP_SIZE ) && |
dflet | 3:a8c249046181 | 123 | ( ( xNextFreeByte + xWantedSize ) > xNextFreeByte ) )/* Check for overflow. */ |
dflet | 3:a8c249046181 | 124 | { |
dflet | 3:a8c249046181 | 125 | /* Return the next free byte then increment the index past this |
dflet | 3:a8c249046181 | 126 | block. */ |
dflet | 3:a8c249046181 | 127 | pvReturn = pucAlignedHeap + xNextFreeByte; |
dflet | 3:a8c249046181 | 128 | xNextFreeByte += xWantedSize; |
dflet | 3:a8c249046181 | 129 | } |
dflet | 3:a8c249046181 | 130 | |
dflet | 3:a8c249046181 | 131 | traceMALLOC( pvReturn, xWantedSize ); |
dflet | 3:a8c249046181 | 132 | } |
dflet | 3:a8c249046181 | 133 | ( void ) xTaskResumeAll(); |
dflet | 3:a8c249046181 | 134 | |
dflet | 3:a8c249046181 | 135 | #if( configUSE_MALLOC_FAILED_HOOK == 1 ) |
dflet | 3:a8c249046181 | 136 | { |
dflet | 3:a8c249046181 | 137 | if( pvReturn == NULL ) |
dflet | 3:a8c249046181 | 138 | { |
dflet | 3:a8c249046181 | 139 | extern void vApplicationMallocFailedHook( void ); |
dflet | 3:a8c249046181 | 140 | vApplicationMallocFailedHook(); |
dflet | 3:a8c249046181 | 141 | } |
dflet | 3:a8c249046181 | 142 | } |
dflet | 3:a8c249046181 | 143 | #endif |
dflet | 3:a8c249046181 | 144 | |
dflet | 3:a8c249046181 | 145 | return pvReturn; |
dflet | 3:a8c249046181 | 146 | } |
dflet | 3:a8c249046181 | 147 | /*-----------------------------------------------------------*/ |
dflet | 3:a8c249046181 | 148 | |
dflet | 3:a8c249046181 | 149 | void vPortFree( void *pv ) |
dflet | 3:a8c249046181 | 150 | { |
dflet | 3:a8c249046181 | 151 | /* Memory cannot be freed using this scheme. See heap_2.c, heap_3.c and |
dflet | 3:a8c249046181 | 152 | heap_4.c for alternative implementations, and the memory management pages of |
dflet | 3:a8c249046181 | 153 | http://www.FreeRTOS.org for more information. */ |
dflet | 3:a8c249046181 | 154 | ( void ) pv; |
dflet | 3:a8c249046181 | 155 | |
dflet | 3:a8c249046181 | 156 | /* Force an assert as it is invalid to call this function. */ |
dflet | 3:a8c249046181 | 157 | configASSERT( pv == NULL ); |
dflet | 3:a8c249046181 | 158 | } |
dflet | 3:a8c249046181 | 159 | /*-----------------------------------------------------------*/ |
dflet | 3:a8c249046181 | 160 | |
dflet | 3:a8c249046181 | 161 | void vPortInitialiseBlocks( void ) |
dflet | 3:a8c249046181 | 162 | { |
dflet | 3:a8c249046181 | 163 | /* Only required when static memory is not cleared. */ |
dflet | 3:a8c249046181 | 164 | xNextFreeByte = ( size_t ) 0; |
dflet | 3:a8c249046181 | 165 | } |
dflet | 3:a8c249046181 | 166 | /*-----------------------------------------------------------*/ |
dflet | 3:a8c249046181 | 167 | |
dflet | 3:a8c249046181 | 168 | size_t xPortGetFreeHeapSize( void ) |
dflet | 3:a8c249046181 | 169 | { |
dflet | 3:a8c249046181 | 170 | return ( configADJUSTED_HEAP_SIZE - xNextFreeByte ); |
dflet | 3:a8c249046181 | 171 | } |
dflet | 3:a8c249046181 | 172 | |
dflet | 3:a8c249046181 | 173 | |
dflet | 3:a8c249046181 | 174 | |
dflet | 3:a8c249046181 | 175 |