打印
[STM32F1]

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

[复制链接]
916|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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 | 只看该作者
这个配置是系统的堆栈大小吧?不是单片机的堆栈配置吧。

使用特权

评论回复
板凳
kaif2n9j| | 2024-7-11 20:43 | 只看该作者
在嵌入式系统中,UCOS(MicroC/OS)是一个流行的实时操作系统,用于管理任务、内存、时间和其他系统资源

使用特权

评论回复
地板
b5z1giu| | 2024-7-11 21:48 | 只看该作者
在UCOS中,检测任务堆栈使用大小是一个重要的调试和优化步骤,因为它可以帮助你确保每个任务都有足够的堆栈空间,同时避免堆栈空间的浪费

使用特权

评论回复
5
suw12q| | 2024-7-11 22:50 | 只看该作者
UCOS提供了一些函数来帮助检查任务堆栈的使用情况。OS_TaskStkChk():这个函数可以用来检查所有任务的堆栈使用情况。OSTaskStkChk():这个函数可以用来检查特定任务的堆栈使用情况。这些函数会返回堆栈的已使用大小和未使用大小。你可以通过这些信息来判断堆栈的使用情况

使用特权

评论回复
6
w2nme1ai7| | 2024-7-11 23:57 | 只看该作者
如果你没有使用UCOS提供的堆栈检查函数,或者你想更深入地了解堆栈的使用情况,你可以手动检查堆栈。这通常涉及到在堆栈的未使用部分填充一个特定的值(如0x55或0xAA),然后在运行时检查这些值是否被覆盖。如果这些值被覆盖,说明堆栈已经被使用

使用特权

评论回复
7
q1d0mnx| | 2024-7-12 08:20 | 只看该作者
大多数现代的嵌入式开发环境都提供了强大的调试器,可以用来检查内存和堆栈的使用情况。你可以使用调试器来查看堆栈的实际使用情况,并计算已使用和未使用的堆栈大小

使用特权

评论回复
8
p0gon9y| | 2024-7-12 09:23 | 只看该作者
UCOS支持堆栈溢出检测,你可以在创建任务时启用这个功能。当堆栈溢出发生时,UCOS会触发一个错误处理函数,你可以在这个函数中记录堆栈溢出的信息,从而了解堆栈的使用情况。

使用特权

评论回复
9
lix1yr| | 2024-7-12 10:12 | 只看该作者
通过分析任务的代码和行为,你可以估计任务所需的堆栈大小。这通常涉及到考虑任务的局部变量、函数调用深度、递归调用等因素

使用特权

评论回复
10
g0d5xs| | 2024-7-12 11:30 | 只看该作者
在检查堆栈使用情况时,确保系统处于稳定状态,避免在任务切换或中断处理期间进行检查,以免得到不准确的结果

使用特权

评论回复
11
ex7s4| | 2024-7-12 12:30 | 只看该作者
堆栈使用情况的检查通常需要在调试阶段进行,一旦系统稳定运行,堆栈大小通常不会频繁变化

使用特权

评论回复
12
zhizia4f| | 2024-7-12 14:05 | 只看该作者
确保在检查堆栈使用情况时,系统有足够的资源来执行检查操作,避免因为资源不足导致检查失败

使用特权

评论回复
13
wang6623| | 2024-7-30 20:38 | 只看该作者
要加上OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR

使用特权

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

本版积分规则

41

主题

1336

帖子

0

粉丝