]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_LM3S811_KEIL/heap/heap_1.c
Update version number in readiness for V10.3.0 release. Sync SVN with reviewed releas...
[freertos] / FreeRTOS / Demo / CORTEX_LM3S811_KEIL / heap / heap_1.c
1 /*\r
2  * FreeRTOS Kernel V10.3.0\r
3  * Copyright (C) 2020 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
4  *\r
5  * Permission is hereby granted, free of charge, to any person obtaining a copy of\r
6  * this software and associated documentation files (the "Software"), to deal in\r
7  * the Software without restriction, including without limitation the rights to\r
8  * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r
9  * the Software, and to permit persons to whom the Software is furnished to do so,\r
10  * subject to the following conditions:\r
11  *\r
12  * The above copyright notice and this permission notice shall be included in all\r
13  * copies or substantial portions of the Software.\r
14  *\r
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r
17  * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r
18  * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
19  * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
20  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
21  *\r
22  * http://www.FreeRTOS.org\r
23  * http://aws.amazon.com/freertos\r
24  *\r
25  * 1 tab == 4 spaces!\r
26  */\r
27 \r
28 \r
29 \r
30 /*\r
31  * The simplest possible implementation of pvPortMalloc().  Note that this\r
32  * implementation does NOT allow allocated memory to be freed again.\r
33  *\r
34  * See heap_2.c and heap_3.c for alternative implementations, and the memory\r
35  * management pages of http://www.FreeRTOS.org for more information.\r
36  */\r
37 #include <stdlib.h>\r
38 #include "FreeRTOS.h"\r
39 #include "task.h"\r
40 \r
41 \r
42 /* Allocate the memory for the heap.  The struct is used to force byte\r
43 alignment without using any non-portable code. */\r
44 extern struct xRTOS_HEAP\r
45 {\r
46         unsigned long ulDummy;\r
47         unsigned char ucHeap[ configTOTAL_HEAP_SIZE ];\r
48 } xHeap;\r
49 \r
50 static size_t xNextFreeByte = ( size_t ) 0;\r
51 /*-----------------------------------------------------------*/\r
52 \r
53 void *pvPortMalloc( size_t xWantedSize )\r
54 {\r
55 void *pvReturn = NULL; \r
56 \r
57         /* Ensure that blocks are always aligned to the required number of bytes. */\r
58         #if portBYTE_ALIGNMENT != 1\r
59                 if( xWantedSize & portBYTE_ALIGNMENT_MASK )\r
60                 {\r
61                         /* Byte alignment required. */\r
62                         xWantedSize += ( portBYTE_ALIGNMENT - ( xWantedSize & portBYTE_ALIGNMENT_MASK ) );\r
63                 }\r
64         #endif\r
65 \r
66         vTaskSuspendAll();\r
67         {\r
68                 /* Check there is enough room left for the allocation. */\r
69                 if( ( ( xNextFreeByte + xWantedSize ) < configTOTAL_HEAP_SIZE ) &&\r
70                         ( ( xNextFreeByte + xWantedSize ) > xNextFreeByte )     )/* Check for overflow. */\r
71                 {\r
72                         /* Return the next free byte then increment the index past this\r
73                         block. */\r
74                         pvReturn = &( xHeap.ucHeap[ xNextFreeByte ] );\r
75                         xNextFreeByte += xWantedSize;                   \r
76                 }       \r
77         }\r
78         xTaskResumeAll();\r
79 \r
80         return pvReturn;\r
81 }\r
82 /*-----------------------------------------------------------*/\r
83 \r
84 void vPortFree( void *pv )\r
85 {\r
86         /* Memory cannot be freed using this scheme.  See heap_2.c and heap_3.c \r
87         for alternative implementations, and the memory management pages of \r
88         http://www.FreeRTOS.org for more information. */\r
89         ( void ) pv;\r
90 }\r
91 /*-----------------------------------------------------------*/\r
92 \r
93 void vPortInitialiseBlocks( void )\r
94 {\r
95         /* Only required when static memory is not cleared. */\r
96         xNextFreeByte = ( size_t ) 0;\r
97 }\r
98 \r
99 \r