1 /* --------------------------------------------------------------------------
2 * Copyright (c) 2013-2019 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
32 #define MPOOL_SEM StaticSemaphore_t
34 /* Memory Block header */
36 void *next; /* Pointer to next block */
39 /* Memory Pool control block */
40 typedef struct MemPoolDef_t {
41 MPOOL_BLOCK *head; /* Pointer to head block */
42 MPOOL_SEM sem; /* Pool semaphore object */
43 uint8_t *mem_arr; /* Pool memory array */
44 uint32_t mem_sz; /* Pool memory array size */
46 char *name; /* Pointer to name string */
47 uint32_t bl_sz; /* Size of a single block */
48 uint32_t bl_cnt; /* Number of blocks */
49 uint32_t n; /* Block allocation index */
51 uint32_t status; /* Object status flags */
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_ */