UINT _tx_byte_pool_create(
//指向内存池控制块的指针
TX_BYTE_POOL *pool_ptr,
//指向内存池名称的指针
CHAR *name_ptr,
//内存池的起始地址。 起始地址必须与 ULONG 数据类型的大小一致
VOID *pool_start,
//内存池可用的总字节数
ULONG pool_size);
局部变量:
初始化内存池,把内存池插入created list
流程:
1.内存池大小 4字节对齐
2.初始化参数,保存内存池起始地址和内存大小
3.设置内存链表首地址,内存池搜索起始地址
4.
5.初始化mutex指针
6.huge memory water mark = pool size
//当内存大小大于这个值,就从底部开始分配内存,否则从顶部开始分配内存
7.设置可用内存大小,总的大小减去控制字段
内存池最开始初始化为两块,一个大的块用于分配内存,一个小的固定块仅用于内存分配算法计算
8.内存池最后一块
(1) block_ptr指向内存池尾部,huge_memory_start指向内存池尾部
(2) 最后4字节存储TX_BYTE_BLOCK_ALLOC
(3) 前4字节存储pool_start内存池起始地址
9.内存池第一块
最前面4字节存储第二块内存的首地址,随后4字节存储TX_BLOCK_FREE,指示为空闲块
10.清除owner
11.禁止中断
12.设置内存池ID使内存池有效
13.把内存池插入_tx_byte_pool_created_ptr list
14.created count++
15.恢复中断
16.返回SUCCESS