|
任务运行的时候,我们需要使用堆栈来储存任务相关的变量和数据。因此堆栈关系到我们的程序能否正常运行。如果栈的空间不足,可能会发生内存越界,当越界的内存区域涉及系统区或者其他函数相关内存区域的时候,可能会导致系统的崩溃或者未知的错误产生。因此,我们有必要关注堆栈的使用情况,通过得到的数据来优化堆栈分配或者调整代码功能。
在harmonyos liteos-m内,华为已经为我们提供了用于监测堆栈使用的函数。如LOS_TaskInfoGet();
通过这个函数,我们可以获取任务的相关情况,通过los_task.h我们可以发现,任务的相关数据中就有堆栈的数据。
因此,我们再创建一个任务,用于数组主任务的堆栈使用。
任务创建函数: 0x500相当于1k多的内存。
- TSK_INIT_PARAM_S stTask={0};
- stTask.pfnTaskEntry = (TSK_ENTRY_FUNC)task2;
- stTask.uwStackSize = 0X500;
- stTask.pcName = "task2";
- stTask.usTaskPrio = 6;
- uwRet = LOS_TaskCreate(&task2ID, &stTask);
复制代码
任务功能函数:
通过主线程的taskid我们可以获取到任务信息。
我们运行一下,看看情况。
通过串口,我们可以看到,目前任务使用了180个字节的栈大小。
harmonyos-liteos 默认启用了堆栈溢出监测,在内存溢出,或者任务使用堆栈超过分配大小的时候,会从串口输出溢出信息,下面我们调小分配内存来查看溢出情况。
这里调小task2的分配内存
如图,可以看到,提示我们栈空间溢出。
|
|