收藏官网首页
查看: 1421|回复: 0

[经验分享] harmonyos liteos-m 任务堆栈相关函数

106

主题

107

帖子

7261

积分

论坛元老

Rank: 8Rank: 8

积分
7261
跳转到指定楼层
楼主
 楼主| 发表于 2023-9-4 21:16:44 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
免费使用STM32、APP自动代码生成工具
    任务运行的时候,我们需要使用堆栈来储存任务相关的变量和数据。因此堆栈关系到我们的程序能否正常运行。如果栈的空间不足,可能会发生内存越界,当越界的内存区域涉及系统区或者其他函数相关内存区域的时候,可能会导致系统的崩溃或者未知的错误产生。因此,我们有必要关注堆栈的使用情况,通过得到的数据来优化堆栈分配或者调整代码功能。
在harmonyos liteos-m内,华为已经为我们提供了用于监测堆栈使用的函数。如LOS_TaskInfoGet();

通过这个函数,我们可以获取任务的相关情况,通过los_task.h我们可以发现,任务的相关数据中就有堆栈的数据。



因此,我们再创建一个任务,用于数组主任务的堆栈使用。

任务创建函数: 0x500相当于1k多的内存。
  1. TSK_INIT_PARAM_S stTask={0};
  2.     stTask.pfnTaskEntry = (TSK_ENTRY_FUNC)task2;
  3.     stTask.uwStackSize  = 0X500;
  4.     stTask.pcName       = "task2";
  5.     stTask.usTaskPrio   = 6;

  6.     uwRet = LOS_TaskCreate(&task2ID, &stTask);
复制代码


任务功能函数:


通过主线程的taskid我们可以获取到任务信息。

我们运行一下,看看情况。


通过串口,我们可以看到,目前任务使用了180个字节的栈大小。

harmonyos-liteos 默认启用了堆栈溢出监测,在内存溢出,或者任务使用堆栈超过分配大小的时候,会从串口输出溢出信息,下面我们调小分配内存来查看溢出情况。

这里调小task2的分配内存


如图,可以看到,提示我们栈空间溢出。









您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

快速回复 返回顶部 返回列表