summaryrefslogtreecommitdiff
path: root/examples/kernel/heap_realloc.c
diff options
context:
space:
mode:
Diffstat (limited to 'examples/kernel/heap_realloc.c')
-rw-r--r--examples/kernel/heap_realloc.c83
1 files changed, 83 insertions, 0 deletions
diff --git a/examples/kernel/heap_realloc.c b/examples/kernel/heap_realloc.c
new file mode 100644
index 0000000000..5fa96c7f30
--- /dev/null
+++ b/examples/kernel/heap_realloc.c
@@ -0,0 +1,83 @@
+#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)
+{
+ while (len)
+ {
+ if (*ptr != value) return RT_FALSE;
+
+ ptr ++;
+ len --;
+ }
+
+ return RT_TRUE;
+}
+
+static void heap_realloc_init()
+{
+ rt_uint8_t *ptr1, *ptr2, *ptr3, *ptr4, *ptr5;
+
+ ptr1 = rt_malloc(1);
+ ptr2 = rt_malloc(13);
+ ptr3 = rt_malloc(31);
+ ptr4 = rt_malloc(127);
+ ptr5 = rt_malloc(0);
+
+ memset(ptr1, 1, 1);
+ memset(ptr2, 2, 13);
+ memset(ptr3, 3, 31);
+ memset(ptr4, 4, 127);
+
+ if (mem_check(ptr1, 1, 1) != RT_FALSE) goto _failed;
+ if (mem_check(ptr2, 2, 13) != RT_FALSE) goto _failed;
+ if (mem_check(ptr3, 3, 31) != RT_FALSE) goto _failed;
+ if (mem_check(ptr4, 4, 127) != RT_FALSE) goto _failed;
+
+ 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 (mem_check(ptr1, 1, 1) != RT_FALSE) goto _failed;
+ if (mem_check(ptr2, 2, 13) != RT_FALSE) goto _failed;
+ if (mem_check(ptr3, 3, 31) != RT_FALSE) goto _failed;
+ if (mem_check(ptr4, 4, 1) != RT_FALSE) goto _failed;
+
+ rt_free(ptr4);
+ rt_free(ptr3);
+ rt_free(ptr3);
+ rt_free(ptr1);
+
+ if (ptr5 != RT_NULL)
+ {
+ rt_free(ptr5);
+ }
+
+ tc_done(TC_STAT_PASSED);
+
+_failed:
+ tc_done(TC_STAT_FAILED);
+}
+
+#ifdef RT_USING_TC
+int _tc_heap_realloc()
+{
+ heap_realloc_init();
+
+ return 0;
+}
+FINSH_FUNCTION_EXPORT(_tc_heap_realloc, a heap re-malloc test);
+#else
+int rt_application_init()
+{
+ heap_realloc_init();
+
+ return 0;
+}
+#endif