#include <rtthread.h>
#include <rtdevice.h>
#include <board.h>
static rt_uint8_t *ptr[50];
static rt_uint8_t mempool[4096];
static struct rt_mempool mp;
#define THREAD_PRIORITY 25
#define THREAD_TIMESLICE 5
#define THREAD_STACK_SIZE 512
static rt_thread_t thread1=RT_NULL;
static rt_thread_t thread2=RT_NULL;
static void thread1_mp_alloc(void *parameter)
{
int i;
for(i = 0;i<50;i++)
{
if(ptr[i] == RT_NULL)
{
ptr[i]=rt_mp_alloc(&mp,RT_WAITING_FOREVER);
if(ptr[i] != RT_NULL)
rt_kprintf("allocate No.%d\n",i);
}
}
}
static void thread2_mp_release(void *parameter)
{
int i;
rt_kprintf("thread2 try to release block\n");
for(i = 0;i<50;i++)
{
if(ptr[i] != RT_NULL)
{
rt_kprintf("release block %d\n",i);
rt_mp_free(ptr[i]);
ptr[i] = RT_NULL;
}
}
}
void mempool_init(void)
{
int i;
for(i = 0;i<50;i++) ptr[i] = RT_NULL;
rt_mp_init(&mp,"mp1",&mempool[0],sizeof(mempool),80);
thread1=rt_thread_create(
"thread1",
thread1_mp_alloc,
RT_NULL,
THREAD_STACK_SIZE,
THREAD_PRIORITY,
THREAD_TIMESLICE);
if(thread1!=RT_NULL) rt_thread_startup(thread1);
thread2=rt_thread_create(
"thread2",
thread2_mp_release,
RT_NULL,
THREAD_STACK_SIZE,
THREAD_PRIORITY+1,
THREAD_TIMESLICE);
if(thread2!=RT_NULL) rt_thread_startup(thread2);
}
int main(void)
{
mempool_init();
return RT_EOK;
}
MSH_CMD_EXPORT(mempool_init,mempool_init);
转载请注明原文地址:https://blackberry.8miu.com/read-44814.html