/* memslab.c */ /* * Copyright (c) 2020, Nordic Semiconductor ASA * * SPDX-License-Identifier: Apache-2.0 */ #include "syskernel.h" #define MEM_SLAB_BLOCK_SIZE (8) #define MEM_SLAB_BLOCK_CNT (NUMBER_OF_LOOPS) #define MEM_SLAB_BLOCK_ALIGN (4) K_MEM_SLAB_DEFINE_STATIC(my_slab, MEM_SLAB_BLOCK_SIZE, MEM_SLAB_BLOCK_CNT, MEM_SLAB_BLOCK_ALIGN); /* Array contains pointers to allocated regions. */ static void *slab_array[MEM_SLAB_BLOCK_CNT]; /** * * @brief Memslab allocation test function. * This test allocates available memory space. * * @param no_of_loops Amount of loops to run. * @param test_repeats Amount of test repeats per loop. * * @return NUmber of done loops. */ static int mem_slab_alloc_test(int no_of_loops) { int i; for (i = 0; i < no_of_loops; i++) { if (k_mem_slab_alloc(&my_slab, &slab_array[i], K_NO_WAIT) != 0) { return i; } } return i; } /** * * @brief Memslab free test function. * This test frees memory previously allocated in * @ref mem_slab_alloc_test. * * @param no_of_loops Amount of loops to run. * @param test_repeats Amount of test repeats per loop. * * @return NUmber of done loops. */ static int mem_slab_free_test(int no_of_loops) { int i; for (i = 0; i < no_of_loops; i++) { k_mem_slab_free(&my_slab, &slab_array[i]); } return i; } int mem_slab_test(void) { uint32_t t; int i = 0; int return_value = 0; /* Test k_mem_slab_alloc. */ fprintf(output_file, sz_test_case_fmt, "Memslab #1"); fprintf(output_file, sz_description, "\n\tk_mem_slab_alloc"); printf(sz_test_start_fmt); t = BENCH_START(); i = mem_slab_alloc_test(number_of_loops); t = TIME_STAMP_DELTA_GET(t); return_value += check_result(i, t); /* Test k_mem_slab_free. */ fprintf(output_file, sz_test_case_fmt, "Memslab #2"); fprintf(output_file, sz_description, "\n\tk_mem_slab_free"); printf(sz_test_start_fmt); t = BENCH_START(); i = mem_slab_free_test(number_of_loops); t = TIME_STAMP_DELTA_GET(t); /* Check if all slabs were freed. */ if (k_mem_slab_num_used_get(&my_slab) != 0) { i = 0; } return_value += check_result(i, t); return return_value; }