ucos检测任务堆栈使用大小的方法

     今天调试公司前人留下的程序,发现在使用ucos系统时程序一直进入HardFault_Handler硬件中断,经过排查,猜测可能是因为任务堆栈溢出导致,于是想使用ucos自身任务堆栈检测功能测量一下任务堆栈使用情况,虽然网上查询到了很多检测方法的博客,但是毕竟他有你有不如咱自己也有,所以将测试的方法梳理在本博客,如下:

1、首先要知道一点,ucos有两种创建任务的方法,分为OSTaskCreate()和OSTaskCreateExt()、两者都可以创建任务,OSTaskCreateExt()比前者特点就是允许用户设置更多的细节,如果想测量任务的堆栈大小,必须使用OSTaskCreateExt()创建任务,OSTaskCreate是无法测量的;

2、将需要测量堆栈任务的创建函数后面,要加上OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR,也就是OSTaskCreateExt()函数的最后一个opt参数,截图如下:

3、在需要测量堆栈任务的函数里面调用OSTaskStkChk()函数,例如下图所示:

其中:“ucErr”:为函数返回状态

                 “2”:为调用该函数的任务优先级(也就是需要测量堆栈使用大小的优先级)

      “stk_data”:为存储结果的结构体(需提前定义,定义方法:OS_STK_DATA  stk_data;)

4、 OS_STK_DATA结构体包含两个参数,"OSFree"为堆栈中未使用的字节数,"OSUsed“为堆栈中已使用的字节数;

 5、还要注意,要将以下宏定义设置为1

        #define  OS_TASK_CREATE_EXT_EN    1 

        #define  OS_TASK_OPT_STK_CLR         1

6、 读取后根据自己习惯选择读取方法,debug打断点窗口看或串口打印出来都可以,我的读取结果如下(单位:字节):

 建议堆栈使用率在50%~80%,太小了浪费空间,太大了有些危险,像我这种28%( 0x484 / ( 0x484 + 0xB7C )  ≈ 28%)目前就很浪费~

瑞思拜~

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值