这个内存管理比较简单容易,因为与CONTIKI NG系统类似的,分别动态内存,静态内存。
我试了一下动态内存例子,在TencentOS-tiny\board\SWM320_DISCOVERY\BSP\Src下
新建tOS_mmheap.c文件,其内容如下:
#include "tos_k.h" #include "mcu_init.h" // 任务栈大小 #define STK_SIZE_TASK_DEMO 512 k_stack_t stack_task_demo[STK_SIZE_TASK_DEMO]; // 任务名柄 k_task_t task_demo; // 任务回调函数 extern void entry_task_demo(void *arg); /*--------测试task任务-----------------------------------------*/ void entry_task_demo(void *arg) { void *p = K_NULL, *p_aligned = K_NULL; int i = 0; while (K_TRUE) { if (i == 1) { p = tos_mmheap_alloc(0x30); if (p) { printf("alloc: %x\n", (cpu_addr_t)p); } } else if (i == 2) { if (p) { printf("free: %x\n", p); tos_mmheap_free(p); } } else if (i == 3) { p = tos_mmheap_alloc(0x30); if (p) { printf("alloc: %x\n", (cpu_addr_t)p); } } else if (i == 4) { p_aligned = tos_mmheap_aligned_alloc(0x50, 16); if (p_aligned) { printf("aligned alloc: %x\n", (cpu_addr_t)p_aligned); if ((cpu_addr_t)p_aligned % 16 == 0) { printf("%x is 16 aligned\n", (cpu_addr_t)p_aligned); } else { printf("should not happen\n"); } } } else if (i == 5) { p = tos_mmheap_realloc(p, 0x40); if (p) { printf("realloc: %x\n", (cpu_addr_t)p); } } else if (i == 6) { if (p) { tos_mmheap_free(p); } if (p_aligned) { tos_mmheap_free(p_aligned); } } tos_task_delay(1000); ++i; } } /*-------------------------测试的应用函数入口--------------------------------*/ void application_mmheap(void *arg) // mmheap的测试 { (void)tos_task_create(&task_demo, "receiver_higher_prio", entry_task_demo, NULL, 4, stack_task_demo, STK_SIZE_TASK_DEMO, 0); }
经下载和测试发现也是正常的,其他细节不想在重复写出来了,不清楚的回读去最前面几章的随记。