RT-Thread设计与实现(十)内存池管理

    科技2026-03-06  5

    #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);
    Processed: 0.014, SQL: 10