Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
MaJerle committed Dec 30, 2024
2 parents 0f79742 + 1653247 commit 1750478
Show file tree
Hide file tree
Showing 16 changed files with 114 additions and 14 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

## Develop

## v2.2.1

- Fix the wrong variable to reduce the size of the region in case of unaligned address or size

## v2.2.0

- Rework library CMake with removed INTERFACE type
Expand Down
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ else()
${CMAKE_CURRENT_LIST_DIR}/dev/main.cpp
${CMAKE_CURRENT_LIST_DIR}/tests/lwmem_test.c
${CMAKE_CURRENT_LIST_DIR}/tests/lwmem_test_simple.c
${CMAKE_CURRENT_LIST_DIR}/tests/lwmem_test_region.c

# win32 port
${CMAKE_CURRENT_LIST_DIR}/lwmem/src/system/lwmem_sys_win32.c
Expand Down
2 changes: 1 addition & 1 deletion dev/lwmem_opts.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,6 @@
#define LWMEM_CFG_OS_MUTEX_HANDLE HANDLE
#define LWMEM_CFG_ENABLE_STATS 0
#define LWMEM_CFG_CLEAN_MEMORY 1
#define LWMEM_CFG_FULL 0
#define LWMEM_CFG_FULL 1

#endif /* LWMEM_HDR_OPTS_H */
3 changes: 3 additions & 0 deletions dev/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,15 @@
extern "C" void lwmem_test_run(void);
extern "C" void lwmem_test_simple_run(void);
extern "C" void lwmem_test_memory_structure(void);
extern "C" void lwmem_test_region(void);

/* Setup manager */
static Lwmem::LwmemLight<1024> manager;

int
main(void) {
lwmem_test_region();
return 0;
#if LWMEM_CFG_FULL
lwmem_test_memory_structure();
//lwmem_test_run();
Expand Down
2 changes: 1 addition & 1 deletion library.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "LwMEM",
"version": "2.2.0",
"version": "2.2.1",
"description": "Lightweight dynamic memory manager optimized for embedded systems",
"keywords": "lwmem, memory, dynamic, heap, malloc, calloc, realloc, free, lightweight, manager, embedded, stm32, win32",
"repository": {
Expand Down
5 changes: 3 additions & 2 deletions lwmem/src/include/lwmem/lwmem.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
* This file is part of LwMEM - Lightweight dynamic memory manager library.
*
* Author: Tilen MAJERLE <tilen@majerle.eu>
* Version: v2.2.0
* Version: v2.2.1
*/
#ifndef LWMEM_HDR_H
#define LWMEM_HDR_H
Expand Down Expand Up @@ -144,8 +144,9 @@ size_t lwmem_get_size(void* ptr);
unsigned char lwmem_debug_create_regions(lwmem_region_t** regs_out, size_t count, size_t size);
void lwmem_debug_save_state(void);
void lwmem_debug_restore_to_saved(void);

void lwmem_debug_print(unsigned char print_alloc, unsigned char print_free);
void lwmem_debug_test_region(void* region_start, size_t region_size, uint8_t** region_start_calc,
size_t* region_size_calc);
#endif /* defined(LWMEM_DEV) && !__DOXYGEN__ */

/**
Expand Down
2 changes: 1 addition & 1 deletion lwmem/src/include/lwmem/lwmem.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
* This file is part of LwMEM - Lightweight dynamic memory manager library.
*
* Author: Tilen MAJERLE <tilen@majerle.eu>
* Version: v2.2.0
* Version: v2.2.1
*/
#ifndef LWMEM_HDR_HPP
#define LWMEM_HDR_HPP
Expand Down
2 changes: 1 addition & 1 deletion lwmem/src/include/lwmem/lwmem_opt.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
* This file is part of LwMEM - Lightweight dynamic memory manager library.
*
* Author: Tilen MAJERLE <tilen@majerle.eu>
* Version: v2.2.0
* Version: v2.2.1
*/
#ifndef LWMEM_OPT_HDR_H
#define LWMEM_OPT_HDR_H
Expand Down
2 changes: 1 addition & 1 deletion lwmem/src/include/lwmem/lwmem_opts_template.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
* This file is part of LwMEM - Lightweight dynamic memory manager library.
*
* Author: Tilen MAJERLE <tilen@majerle.eu>
* Version: v2.2.0
* Version: v2.2.1
*/
#ifndef LWMEM_OPTS_HDR_H
#define LWMEM_OPTS_HDR_H
Expand Down
2 changes: 1 addition & 1 deletion lwmem/src/include/system/lwmem_sys.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
* This file is part of LwMEM - Lightweight dynamic memory manager library.
*
* Author: Tilen MAJERLE <tilen@majerle.eu>
* Version: v2.2.0
* Version: v2.2.1
*/
#ifndef LWMEM_SYS_HDR_H
#define LWMEM_SYS_HDR_H
Expand Down
13 changes: 11 additions & 2 deletions lwmem/src/lwmem/lwmem.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
* This file is part of LwMEM - Lightweight dynamic memory manager library.
*
* Author: Tilen MAJERLE <tilen@majerle.eu>
* Version: v2.2.0
* Version: v2.2.1
*/
#include "lwmem/lwmem.h"
#include <limits.h>
Expand Down Expand Up @@ -206,7 +206,7 @@ prv_get_region_addr_size(const lwmem_region_t* region, uint8_t** msa, size_t* ms
}

/* Check region size and align it to config bits */
mem_size = region->size & ~LWMEM_ALIGN_BITS; /* Size does not include lower bits */
mem_size &= ~LWMEM_ALIGN_BITS; /* Align the size to lower bits */
if (mem_size < (2 * LWMEM_BLOCK_MIN_SIZE)) {
return 0;
}
Expand Down Expand Up @@ -1427,4 +1427,13 @@ lwmem_debug_restore_to_saved(void) {
printf(" -- > State restored to last saved!\r\n");
}

void
lwmem_debug_test_region(void* region_start, size_t region_size, uint8_t** region_start_calc, size_t* region_size_calc) {
lwmem_region_t region = {
.start_addr = region_start,
.size = region_size,
};
prv_get_region_addr_size(&region, region_start_calc, region_size_calc);
}

#endif /* defined(LWMEM_DEV) && !__DOXYGEN__ */
2 changes: 1 addition & 1 deletion lwmem/src/lwmem/lwmem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,5 +29,5 @@
* This file is part of LwMEM - Lightweight dynamic memory manager library.
*
* Author: Tilen MAJERLE <tilen@majerle.eu>
* Version: v2.2.0
* Version: v2.2.1
*/
2 changes: 1 addition & 1 deletion lwmem/src/system/lwmem_sys_cmsis_os.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
* This file is part of LwMEM - Lightweight dynamic memory manager library.
*
* Author: Tilen MAJERLE <tilen@majerle.eu>
* Version: v2.2.0
* Version: v2.2.1
*/
#include "system/lwmem_sys.h"

Expand Down
2 changes: 1 addition & 1 deletion lwmem/src/system/lwmem_sys_threadx.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
* This file is part of LwMEM - Lightweight dynamic memory manager library.
*
* Author: Tilen MAJERLE <tilen@majerle.eu>
* Version: v2.2.0
* Version: v2.2.1
*/
#include "system/lwmem_sys.h"

Expand Down
2 changes: 1 addition & 1 deletion lwmem/src/system/lwmem_sys_win32.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
* This file is part of LwMEM - Lightweight dynamic memory manager library.
*
* Author: Tilen MAJERLE <tilen@majerle.eu>
* Version: v2.2.0
* Version: v2.2.1
*/
#include "system/lwmem_sys.h"

Expand Down
82 changes: 82 additions & 0 deletions tests/lwmem_test_region.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
#include <stdio.h>
#include "lwmem/lwmem.h"

#if LWMEM_CFG_ALIGN_NUM != 4
#error "Test shall run with LWMEM_CFG_ALIGN_NUM == 4"
#endif

/* Test assert information */
#define TEST_ASSERT(condition) \
do { \
if (!(condition)) { \
printf("Assert failed on the line %d\r\n", __LINE__); \
return; \
} \
} while (0)

typedef struct {
uint8_t* region_start;
size_t region_size;
uint8_t* region_start_exp;
size_t region_size_exp;
} test_region_t;

#define TEST_ENTRY(_region_start_, _region_size_, _region_start_exp_, _region_size_exp_) \
{ \
.region_start = (void*)(_region_start_), \
.region_size = (_region_size_), \
.region_start_exp = (void*)(_region_start_exp_), \
.region_size_exp = (_region_size_exp_), \
}

/* List of test cases */
static const test_region_t test_cases[] = {
TEST_ENTRY(0x00000000, 0x00000000, 0x00000000, 0x00000000),
TEST_ENTRY(0x00000000, 0x00004000, 0x00000000, 0x00004000),
TEST_ENTRY(0x00000000, 0x00004001, 0x00000000, 0x00004000),
TEST_ENTRY(0x00000000, 0x00004002, 0x00000000, 0x00004000),
TEST_ENTRY(0x00000000, 0x00004003, 0x00000000, 0x00004000),
TEST_ENTRY(0x00000000, 0x00004004, 0x00000000, 0x00004004),
TEST_ENTRY(0x00000000, 0x00004005, 0x00000000, 0x00004004),

/* Start is not always aligned, but length input is aligned */
TEST_ENTRY(0x00000000, 0x00004000, 0x00000000, 0x00004000),

/* Start must advance to next aligned value, size reduced to next lower aligned value */
TEST_ENTRY(0x00000001, 0x00004000, 0x00000004, 0x00003FFC),
TEST_ENTRY(0x00000002, 0x00004000, 0x00000004, 0x00003FFC),
TEST_ENTRY(0x00000003, 0x00004000, 0x00000004, 0x00003FFC),
TEST_ENTRY(0x00000003, 0x00004003, 0x00000004, 0x00004000),
TEST_ENTRY(0x00000003, 0x00004004, 0x00000004, 0x00004000),
TEST_ENTRY(0x00000003, 0x00004005, 0x00000004, 0x00004004),
TEST_ENTRY(0x00000001, 0x00004003, 0x00000004, 0x00004000),
TEST_ENTRY(0x00000002, 0x00004005, 0x00000004, 0x00004000),
TEST_ENTRY(0x00000002, 0x00004006, 0x00000004, 0x00004004),
TEST_ENTRY(0x00000002, 0x00004007, 0x00000004, 0x00004004),
TEST_ENTRY(0x00000003, 0x00004006, 0x00000004, 0x00004004),
TEST_ENTRY(0x00000003, 0x00004005, 0x00000004, 0x00004004),
TEST_ENTRY(0x00000004, 0x00004006, 0x00000004, 0x00004004),
};

/* Start is aligned, length is not always aligned */

void
lwmem_test_region(void) {
uint8_t* region_start = NULL;
size_t region_size = 0;

for (size_t idx = 0; idx < sizeof(test_cases) / sizeof(test_cases[0]); ++idx) {
const test_region_t* test = &test_cases[idx];
lwmem_debug_test_region(test->region_start, test->region_size, &region_start, &region_size);

if (region_start != test->region_start_exp) {
printf("Region start test failed. Idx: %u, input: 0x%08p, expected: 0x%08p, output: 0x%08p\r\n",
(unsigned)idx, test->region_start, test->region_start_exp, region_start);
} else if (region_size != test->region_size_exp) {
printf("Region size test failed. Idx: %u, input: 0x%08X, expected: 0x%08X, output: 0x%08X\r\n",
(unsigned)idx, (unsigned)test->region_size, (unsigned)test->region_size_exp, (unsigned)region_size);
}
}

printf("Done\r\n");
}

0 comments on commit 1750478

Please sign in to comment.