硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1901|回复: 0
收起左侧

内存池使用

[复制链接]

82

主题

399

回帖

665

积分

金牌会员

积分
665
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  408137104
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-23 21:47 , Processed in 0.143039 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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