]> begriffs open source - cmsis-freertos/blob - CMSIS/RTOS2/FreeRTOS/Include/freertos_mpool.h
Correct memory allocation and access in osMemoryPoolNew (#142)
[cmsis-freertos] / CMSIS / RTOS2 / FreeRTOS / Include / freertos_mpool.h
1 /* --------------------------------------------------------------------------
2  * Copyright (c) 2013-2020 Arm Limited. All rights reserved.
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  * Licensed under the Apache License, Version 2.0 (the License); you may
7  * not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  * www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an AS IS BASIS, WITHOUT
14  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *
18  *      Name:    freertos_mpool.h
19  *      Purpose: CMSIS RTOS2 wrapper for FreeRTOS
20  *
21  *---------------------------------------------------------------------------*/
22
23 #ifndef FREERTOS_MPOOL_H_
24 #define FREERTOS_MPOOL_H_
25
26 #include <stdint.h>
27 #include "FreeRTOS.h"
28 #include "semphr.h"
29
30 /* Memory Pool implementation definitions */
31 #define MPOOL_STATUS              0x5EED0000U
32
33 /* Memory Block header */
34 typedef struct {
35   void *next;                   /* Pointer to next block  */
36 } MemPoolBlock_t;
37
38 /* Memory Pool control block */
39 typedef struct MemPoolDef_t {
40   MemPoolBlock_t    *head;      /* Pointer to head block   */
41   SemaphoreHandle_t  sem;       /* Pool semaphore handle   */
42   uint8_t           *mem_arr;   /* Pool memory array       */
43   uint32_t           mem_sz;    /* Pool memory array size  */
44   const char        *name;      /* Pointer to name string  */
45   uint32_t           bl_sz;     /* Size of a single block  */
46   uint32_t           bl_cnt;    /* Number of blocks        */
47   uint32_t           n;         /* Block allocation index  */
48   volatile uint32_t  status;    /* Object status flags     */
49 #if (configSUPPORT_STATIC_ALLOCATION == 1)
50   StaticSemaphore_t  mem_sem;   /* Semaphore object memory */
51 #endif
52 } MemPool_t;
53
54 /* No need to hide static object type, just align to coding style */
55 #define StaticMemPool_t         MemPool_t
56
57 /* Define memory pool control block size */
58 #define MEMPOOL_CB_SIZE         (sizeof(StaticMemPool_t))
59
60 /* Define size of the byte array required to create count of blocks of given size */
61 #define MEMPOOL_ARR_SIZE(bl_count, bl_size) (((((bl_size) + (4 - 1)) / 4) * 4)*(bl_count))
62
63 #endif /* FREERTOS_MPOOL_H_ */