1 /* --------------------------------------------------------------------------
2 * Copyright (c) 2013-2020 Arm Limited. All rights reserved.
4 * SPDX-License-Identifier: Apache-2.0
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
10 * www.apache.org/licenses/LICENSE-2.0
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.
18 * Name: freertos_mpool.h
19 * Purpose: CMSIS RTOS2 wrapper for FreeRTOS
21 *---------------------------------------------------------------------------*/
23 #ifndef FREERTOS_MPOOL_H_
24 #define FREERTOS_MPOOL_H_
30 /* Memory Pool implementation definitions */
31 #define MPOOL_STATUS 0x5EED0000U
33 /* Memory Block header */
35 void *next; /* Pointer to next block */
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 */
54 /* No need to hide static object type, just align to coding style */
55 #define StaticMemPool_t MemPool_t
57 /* Define memory pool control block size */
58 #define MEMPOOL_CB_SIZE (sizeof(StaticMemPool_t))
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))
63 #endif /* FREERTOS_MPOOL_H_ */