heap_realloc.c 2.1 KB
Newer Older
1 2 3 4 5 6 7 8 9
/*
 * Copyright (c) 2006-2021, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 *
 */

B
Bernard Xiong 已提交
10 11 12 13 14 15 16 17 18
#include <rtthread.h>
#include "tc_comm.h"

/*
 * This is an example for heap malloc
 */

static rt_bool_t mem_check(rt_uint8_t *ptr, rt_uint8_t value, rt_uint32_t len)
{
G
Grissiom 已提交
19 20 21
    while (len)
    {
        if (*ptr != value) return RT_FALSE;
B
Bernard Xiong 已提交
22

G
Grissiom 已提交
23 24 25
        ptr ++;
        len --;
    }
B
Bernard Xiong 已提交
26

G
Grissiom 已提交
27
    return RT_TRUE;
B
Bernard Xiong 已提交
28 29 30 31
}

static void heap_realloc_init()
{
G
Grissiom 已提交
32 33
    rt_uint8_t res = TC_STAT_PASSED;
    rt_uint8_t *ptr1, *ptr2, *ptr3, *ptr4, *ptr5;
B
Bernard Xiong 已提交
34

G
Grissiom 已提交
35 36 37 38 39
    ptr1 = rt_malloc(1);
    ptr2 = rt_malloc(13);
    ptr3 = rt_malloc(31);
    ptr4 = rt_malloc(127);
    ptr5 = rt_malloc(0);
B
Bernard Xiong 已提交
40

G
Grissiom 已提交
41 42 43 44
    memset(ptr1, 1, 1);
    memset(ptr2, 2, 13);
    memset(ptr3, 3, 31);
    memset(ptr4, 4, 127);
B
Bernard Xiong 已提交
45

G
Grissiom 已提交
46
    if (mem_check(ptr1, 1, 1)   == RT_FALSE)
G
Grissiom 已提交
47 48 49 50
    {
        res = TC_STAT_FAILED;
        goto _free;
    }
G
Grissiom 已提交
51
    if (mem_check(ptr2, 2, 13)  == RT_FALSE)
G
Grissiom 已提交
52 53 54 55
    {
        res = TC_STAT_FAILED;
        goto _free;
    }
G
Grissiom 已提交
56
    if (mem_check(ptr3, 3, 31)  == RT_FALSE)
G
Grissiom 已提交
57 58 59 60
    {
        res = TC_STAT_FAILED;
        goto _free;
    }
G
Grissiom 已提交
61
    if (mem_check(ptr4, 4, 127) == RT_FALSE)
G
Grissiom 已提交
62 63 64 65
    {
        res = TC_STAT_FAILED;
        goto _free;
    }
B
Bernard Xiong 已提交
66

G
Grissiom 已提交
67 68 69 70 71 72 73 74 75 76
    ptr1 = rt_realloc(ptr1, 13);
    ptr2 = rt_realloc(ptr2, 31);
    ptr3 = rt_realloc(ptr3, 127);
    ptr4 = rt_realloc(ptr4, 1);
    ptr5 = rt_realloc(ptr5, 0);
    if (ptr5)
    {
        rt_kprintf("realloc(ptr, 0) should return NULL\n");
        res = TC_STAT_FAILED;
    }
B
Bernard Xiong 已提交
77

G
Grissiom 已提交
78
    if (mem_check(ptr1, 1, 1)   == RT_FALSE)
G
Grissiom 已提交
79
        res = TC_STAT_FAILED;
G
Grissiom 已提交
80
    if (mem_check(ptr2, 2, 13)  == RT_FALSE)
G
Grissiom 已提交
81
        res = TC_STAT_FAILED;
G
Grissiom 已提交
82
    if (mem_check(ptr3, 3, 31)  == RT_FALSE)
G
Grissiom 已提交
83
        res = TC_STAT_FAILED;
G
Grissiom 已提交
84
    if (mem_check(ptr4, 4, 1)    == RT_FALSE)
G
Grissiom 已提交
85
        res = TC_STAT_FAILED;
B
Bernard Xiong 已提交
86

G
Grissiom 已提交
87
_free:
G
Grissiom 已提交
88 89 90 91
    rt_free(ptr4);
    rt_free(ptr3);
    rt_free(ptr2);
    rt_free(ptr1);
B
Bernard Xiong 已提交
92

G
Grissiom 已提交
93
    tc_done(res);
B
Bernard Xiong 已提交
94 95 96 97 98
}

#ifdef RT_USING_TC
int _tc_heap_realloc()
{
G
Grissiom 已提交
99
    heap_realloc_init();
B
Bernard Xiong 已提交
100

G
Grissiom 已提交
101
    return 0;
B
Bernard Xiong 已提交
102 103 104 105 106
}
FINSH_FUNCTION_EXPORT(_tc_heap_realloc, a heap re-malloc test);
#else
int rt_application_init()
{
G
Grissiom 已提交
107
    heap_realloc_init();
B
Bernard Xiong 已提交
108

G
Grissiom 已提交
109
    return 0;
B
Bernard Xiong 已提交
110 111
}
#endif