程序运行,创建一个内存池,一个申请内存任务,一个释放内存任务,
usb串口CN3打印内存分配和释放的信息,串口波特率115200
工程参考例程在:
RT-Thread物联网操作系统介绍
//创建内存池
Sample_mp = rt_mp_create("Sample_mp",
20, /* 内存块数量 */
30); /* 内存块大小 */
if (Sample_mp != RT_NULL)
rt_kprintf("静态内存池创建成功!\n\n");
rt_kprintf("正在向内存池申请内存...........\n");
p_Sample = rt_mp_alloc(Sample_mp,0);
if(RT_NULL == p_Sample)/* 没有申请成功 */
rt_kprintf("静态内存申请失败!\n");
else
rt_kprintf("静态内存申请成功,地址为%d!\n\n",p_Sample);
rt_kprintf("正在向p_test写入数据...........\n");
*p_Sample = i;
rt_kprintf("已经写入p_test地址的数据\n");
rt_kprintf("*p_test = %.4d ,地址为:%d \n\n", *p_Sample,p_Sample);
rt_err_t uwRet = RT_EOK;
rt_kprintf("正在释放内存...........\n");
rt_mp_free(p_Sample);
rt_kprintf("释放内存成功!\n\n");
rt_kprintf("正在删除内存...........\n");
uwRet = rt_mp_delete(Sample_mp);
if(RT_EOK == uwRet)
rt_kprintf("删除内存成功!\n");
#include "MyIncludes.h"
/* 定义内存池控制块 */
static rt_mp_t Sample_mp = RT_NULL;
/* 定义申请内存的指针 */
static rt_uint32_t *p_Sample = RT_NULL;
static rt_thread_t TASK1_Thread = RT_NULL;
/*******************************************************************************
* Function Name : TASK1_Thread_Process
* Description : 任务1线程函数
* Input : None
* Output : None
* Return : None
* Note : None
*******************************************************************************/
static void TASK1_Thread_Process(void* parameter)
{
rt_kprintf("正在向内存池申请内存...........\n");
p_Sample = rt_mp_alloc(Sample_mp,0);
if(RT_NULL == p_Sample)/* 没有申请成功 */
rt_kprintf("静态内存申请失败!\n");
else
rt_kprintf("静态内存申请成功,地址为%d!\n\n",p_Sample);
rt_kprintf("正在向p_test写入数据...........\n");
*p_Sample = 1234;
rt_kprintf("已经写入p_test地址的数据\n");
rt_kprintf("*p_test = %.4d ,地址为:%d \n\n", *p_Sample,p_Sample);
while(1)
{
LED_Toggle(LED_R); //翻转LED
rt_thread_delay(1000); //每1000ms扫描一次
}
}
static rt_thread_t TASK2_Thread = RT_NULL;
/*******************************************************************************
* Function Name : TASK2_Thread_Process
* Description : 任务2线程函数
* Input : None
* Output : None
* Return : None
* Note : None
*******************************************************************************/
static void TASK2_Thread_Process(void* parameter)
{
rt_err_t uwRet = RT_EOK;
rt_kprintf("正在释放内存...........\n");
rt_mp_free(p_Sample);
rt_kprintf("释放内存成功!\n\n");
rt_kprintf("正在删除内存...........\n");
uwRet = rt_mp_delete(Sample_mp);
if(RT_EOK == uwRet)
rt_kprintf("删除内存成功!\n");
while (1)
{
LED_Toggle(LED_B); //翻转LED
rt_thread_mdelay(500); //每500ms扫描一次
}
}
int main(void)
{
/*
* 开发板硬件初始化,RTT系统初始化已经在main函数之前完成,
* 即在component.c文件中的rtthread_startup()函数中完成了。
* 所以在main函数中,只需要创建线程和启动线程即可。
*/
//创建内存池
Sample_mp = rt_mp_create("Sample_mp",
20, /* 内存块数量 */
30); /* 内存块大小 */
if (Sample_mp != RT_NULL)
rt_kprintf("静态内存池创建成功!\n\n");
//申请内存线程
TASK1_Thread = /* 线程控制块指针 */
rt_thread_create("TASK1", /* 线程名字 */
TASK1_Thread_Process, /* 线程入口函数 */
RT_NULL, /* 线程入口函数参数 */
512, /* 线程栈大小 */
12, /* 线程的优先级 */
20); /* 线程时间片 */
/* 启动线程,开启调度 */
if (TASK1_Thread != RT_NULL)
rt_thread_startup(TASK1_Thread);
else
return -1;
//释放内存线程
TASK2_Thread = /* 线程控制块指针 */
rt_thread_create("TASK2", /* 线程名字 */
TASK2_Thread_Process, /* 线程入口函数 */
RT_NULL, /* 线程入口函数参数 */
512, /* 线程栈大小 */
15, /* 线程的优先级 */
20); /* 线程时间片 */
/* 启动线程,开启调度 */
if (TASK2_Thread != RT_NULL)
rt_thread_startup(TASK2_Thread);
else
return -1;
}
版权声明:本文为weixin_43352501原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。