4456|1

849

帖子

0

TA的资源

纯净的硅(高级)

楼主
 

RT_THREAD 静态内存管理 [复制链接]

 

 

下面给出静态内存池管理实验程序。。

在这个程序中,首先向系统中申请了一个内存池,初始化两个静态线程。

 在线程1中申请48个内存块和线程2中主要完成内存块的释放。。。。

 

大家可以自己调试一下观察一下内存管理机制的实现过程。。。。。

源码请大家下载Rt_thread mailbox lab工程包。

 

 

下面给出源程序,加入到工程包里就行了。

#include <rtthread.h>

/* 两个线程用到的TCB和栈 */
struct rt_thread thread1;
struct rt_thread thread2;

char thread1_stack[512];
char thread2_stack[512];

/* 内存池数据存放区 */
char mempool[4096];

/* 内存池TCB */
struct rt_mempool mp;

/* 测试用指针分配头 */
char *ptr[48];


/* 线程1的入口函数 */
static void thread1_entry(void * parameter){
 int i;
 char *block;

 while(1){
  /* 分配48个内存块 */
  for(i=0;i<48;i++){
   rt_kprintf("thread1:allocate No.%d\n",i);

   ptr=rt_mp_alloc(&mp,RT_WAITING_FOREVER);
  }

  /* 再分配一个内存块 */
  block=rt_mp_alloc(&mp,RT_WAITING_FOREVER);
  rt_kprintf("allocate the block mem\n");
  rt_mp_free(block);
  block=RT_NULL;
 }
}

/* 线程2的入口函数 */
static void thread2_entry(void* parameter){
 int i;
 while(1){
  rt_kprintf("try to release block\n");
  /* 释放48个已经分配了的内存块 */
  for(i=0;i<48;i++){
   if(ptr!=RT_NULL) {// 非空才释放
    rt_kprintf("thread2: release block %d\n",i);
    rt_mp_free(ptr);

    /* 释放完将指针清零 */
    ptr=RT_NULL;
   }
  }
 } 
}


int mp_simple_init(void){
 int i;
 for(i=0;i<48;i++) ptr=RT_NULL;

 /* 初始化一个内存池对象,每个内存块的大小为80Byte */
 rt_mp_init(&mp,"mpt",&mempool[0],sizeof(mempool),80);

 /* 初始化线程1 */
 rt_thread_init(&thread1,"thread1",thread1_entry,RT_NULL,
       &thread1_stack[0],sizeof(thread1_stack),20,10);

 /* 初始化线程2 */
 rt_thread_init(&thread2,"thread2",
     thread2_entry, RT_NULL,
     &thread2_stack[0], sizeof(thread2_stack),25,7);

 rt_thread_startup(&thread1);
 rt_thread_startup(&thread2);

 return 0;

}

int rt_application_init()
{
 mp_simple_init();

 return 0;
}

最新回复

顶! 静态内存是一种极快的内存管理方式,这个从RT-Thread的实现也可以看出来,那么RT-Thread的实现方式是什么样的呢?为什么这样实现就快了,而且能够满足实时要求?  详情 回复 发表于 2011-4-20 16:25
点赞 关注
个人签名只有想不到,没有做不到。

回复
举报

117

帖子

0

TA的资源

一粒金砂(高级)

沙发
 
顶!

静态内存是一种极快的内存管理方式,这个从RT-Thread的实现也可以看出来,那么RT-Thread的实现方式是什么样的呢?为什么这样实现就快了,而且能够满足实时要求?
 
个人签名RT-Thread:启动下一代RTOS演化
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表