os_task_stack

所属模块:内存管理 | 类型:状态查询函数

函数简介

os_task_stack 用于查询指定任务对应的栈空间或内存池大小, 是 HRTOS 中用于任务资源监控的重要接口。

该函数支持普通任务与快速任务两种类型, 通过不同的数据结构解析其内存占用情况, 可用于调试、优化与系统监控。

函数原型

U8 os_task_stack(u8 id);

参数说明

参数 说明
id 任务ID

返回值

返回任务对应的栈大小或内存池大小;
返回 -1 表示参数非法。

核心机制解析

1. 参数合法性判断

if(id > OS_JINCHENG_MAX + 1) { return (U8)-1; }

判断任务ID是否越界,防止非法访问。

2. 普通任务解析

size = (OS_PEOCESS_OK[id] >> 3) & 0x0F;

从任务状态字中提取内存池信息(bit3~bit6), 该字段记录了任务分配的栈空间大小。

3. 快速任务解析

id -= OS_JINCHENG_MAX; size = OS_SP_KUAI_BEI[id] << 1;

快速任务使用独立的存储表, 栈大小通过表值左移计算得到。

使用示例

void main() { unsigned char size; size = os_task_stack(0); // 可用于调试输出 printf("stack size = %d\n", size); while(1) { } }

典型使用场景

注意事项

返回值为无符号类型,需注意与 -1 比较时的类型转换问题。
不同任务类型的计算方式不同,需确保ID分类正确。

相关推荐