木子剑
生命不熄,学习不止!

这个内存管理比较简单容易,因为与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);
}

经下载和测试发现也是正常的,其他细节不想在重复写出来了,不清楚的回读去最前面几章的随记。

posted on 2021-08-28 21:09  木子剑  阅读(92)  评论(0编辑  收藏  举报