请选择 进入手机版 | 继续访问电脑版

安富莱电子论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 392|回复: 0
收起左侧

内存池使用

[复制链接]

19

主题

94

帖子

152

积分

初级会员

积分
152
QQ
发表于 2018-7-10 22:55:25 | 显示全部楼层 |阅读模式
本帖最后由 雷鹏 于 2018-7-10 22:58 编辑

#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入口 */
void thread1_entry( void* parameter )
{
  int i;
  char *block;
  while( 1 )
  {
    /* 分配48个内存块 */
    for ( i = 0; i < 48; i++ )
    {
      rt_kprintf( "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;
  rt_thread_delay(300);        
  }
}
/* 测试线程2入口 */
void thread2_entry( void *parameter )
{
  int i;
  while( 1 )
  {
   
    /* 释放48个已经分配的内存块 */
    for ( i = 0 ; i < 48; i ++ )
    {
      /* 非空才释放 */
      if ( ptr != RT_NULL )

      {
                          rt_kprintf( "try to release block\n" );
        rt_kprintf( "release block %d\n", i );
        rt_mp_free( ptr );

        /* 释放完成,把指针清零 */
        ptr = RT_NULL;

      }
    }
  rt_thread_delay(300);
               
  }
}
int rt_application_init()
{
  int i;
  for ( i = 0; i < 48; i ++ ) ptr = RT_NULL;

  /* 初始化一个内存池对象,每个内存块的大小是80个字节 */
  rt_mp_init( &mp, "mp1", &mempool[0],
              sizeof( mempool ), 80 );
  /* 初始化两个测试线程对象 */
  rt_thread_init( &thread1,
                  "thread1",
                  thread1_entry, RT_NULL,
                  &thread1_stack[0], sizeof( thread1_stack ),
                  20, 10 );
  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;
}


承接嵌入式项目开发,相关技术交流。STM32,物联网,工业控制方向。QQ/微信/手机   13554527850
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|安富莱电子论坛 ( 鄂ICP备09023347号,公安机关备案号42010602000201 )

GMT+8, 2019-7-16 02:19 , Processed in 0.155562 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表