打印
[STM32F1]

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

[复制链接]
115|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tifmill|  楼主 | 2024-6-27 04:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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%)目前就很浪费~

瑞思拜~


使用特权

评论回复
沙发
shenxiaolin| | 2024-6-27 17:26 | 只看该作者
这个配置是系统的堆栈大小吧?不是单片机的堆栈配置吧。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

39

主题

1201

帖子

0

粉丝