0 源码实现
void printf_tx_bytepool(void)
{
ULONG i;
TX_BYTE_POOL *tx_bytepool_ptr;
double usage_rate;
if (_tx_byte_pool_created_count == 0)
{
printf("don't have any byte pool!\r\n");
return 0;
}
tx_bytepool_ptr = _tx_byte_pool_created_ptr;
printf("idx pool_start pool_search pool_seg buff_size pool_avl usage_rate(%%) pool_name\r\n");
for (i = 0; i < _tx_byte_pool_created_count; i++)
{
usage_rate = 100.0f * (double)(tx_bytepool_ptr->tx_byte_pool_size - tx_bytepool_ptr->tx_byte_pool_available) / tx_bytepool_ptr->tx_byte_pool_size;
printf("%-3d 0x%08X 0x%08X %-10d %-10d %-10d %-8.4f %s\r\n",
i + 1,
tx_bytepool_ptr->tx_byte_pool_start,
tx_bytepool_ptr->tx_byte_pool_search,
tx_bytepool_ptr->tx_byte_pool_fragments,
tx_bytepool_ptr->tx_byte_pool_size,
tx_bytepool_ptr->tx_byte_pool_available,
usage_rate,
tx_bytepool_ptr->tx_byte_pool_name);
tx_bytepool_ptr = tx_bytepool_ptr->tx_byte_pool_created_next;
}
}
说明:
ThreadX使用双向链表管理字节内存池,头尾相连。这里根据字节内存池数量_tx_byte_pool_created_count,从链表头遍历_tx_byte_pool_created_count次打印所有的字节内存池信息。
tx_byte_pool_start:内存池传入buffer起始地址
tx_byte_pool_search:内存池当前搜索地址
tx_byte_pool_fragments:内存池当前段数量
tx_byte_pool_size:内存池总字节大小(传入buffer大小)
tx_byte_pool_available:内存池可用字节数
usage_rate:内存池使用率
tx_byte_pool_name:内存池名称
1 测试结果
正确显示了内存池各项信息,测试OK。