μC/OS-II如何检测任务堆栈实际使用情况——即如何设置ucosii任务堆栈大小

来源:互联网 发布:战地4网络对战 编辑:程序博客网 时间:2024/06/06 00:47

详解μC/OS-II

如何检测任务堆栈实际使用情况——即如何设置

ucosii

任务堆

栈大小

不少屌丝同学都有类似经历吧,在使用

ucosii

创建任务时,关于任务堆栈

大小设为多大合适搞的不清不楚,郁闷之下就随便整个数,比如就

1024

吧,呵

呵,反正也没见得出问题,那就不多想了。

我想大多数同学都是这样做的吧。

这样只是因为在一般情况下,

1024

确实已

经足够大了,

堆栈溢出的可能性很小而已。

那么,

如果你任务实际使用率只有很

小的百分之几,一旦被你知道了,你会痛心不?我想你不痛心,μC/OS-II

也会

痛心的,它会觉得这个

coder

真是浪费啊,哈哈!顺便提醒下大家,堆和栈是完

全不同的两个概念,出于国内习惯,还是称之为堆栈罢了!

下面,我就来告诉大家怎么知道运行中任务的堆栈实际使用情况,然后就知

道应该分配多少堆栈大小合适了!开始正题。

1、首先需要知道,μC/OS-II

中创建任务的函数有两个:

OSTaskCreate()

OSTaskCreateExt()

(1)OSTaskCreate()

//创建普通任务

由于重点在下面的创建扩展任务函数,故本函数就不多说了!确实,要想实

现检测目标任务栈实际使用情况的功能,是不能使用这个函数来创建目标任务

的,必须使用

OSTaskCreateExt()

(2)OSTaskCreateExt()

//创建扩展任务

函数接口原型为:

#if

OS_TASK_CREATE_EXT_EN

>

0

INT8U

OSTaskCreateExt

(

void

(*task)(void

*pd),

//建立扩展任务(任务代码指针

void

*pdata,

//传递参数指针

OS_STK

*ptos,

//分配任务堆栈栈顶指针

INT8U

prio,

//分配任务优先级

INT16U

id,

//(未来的)优先级标识(与优先级相同)

OS_STK

*pbos,

//分配任务堆栈栈底指针

INT32U

stk_size,

//指定堆栈的容量(检验用)

void

*pext,

//指向用户附加的数据域的指针

INT16U

opt

//建立任务设定选项

)

#endif

2、其次需要知道μC/OS-II

中有这么个函数:OSTaskStkChk()

不错,检测任务堆栈实际使用情况正是用的这个函数,下面来本函数的接口

原型:

INT8U

OSTaskStkChk

(

INT8U

prio,

//待测任务的优先级

OS_STK_DATA

*pdata

//指向一个类型为

OS_STK_DATA

的结构体

)

3、再次需要知道一个结构体:

#if

OS_TASK_CREATE_EXT_EN

>

0

typedef

struct

{

INT32U

OSFree;

//堆栈中未使用的字节数

INT32U

OSUsed;

//堆栈中已使用的字节数

}

OS_STK_DATA;

#endif

参数:

prio

为指定要获取堆栈信息的任务优先级,也可以指定参数

OS_PRIO_SELF,获取调用任务本身的

信息。

pdata

指向一个类型为

OS_STK_DATA

的数据结构,其中包含如下信息:

INT32U

OSFree;

//

堆栈中未使用的字节数

INT32U

OSUsed;

//

堆栈中已使用的字节数

4、有了上述三个知识点后就可以啦,具体方法为:

(1)将函数的最后一个参数

opt

设置为:OS_TASK_OPT_STK_CHK

|

OS_TASK_OPT_STK_CLR

(2)定义一个变量:OS_STK_DATA

StackBytes;

(3)调用函数

OSTaskStkChk(TestTaskPRIO,

&StackBytes)

(4)StackBytes.OSFree

的值即为被测任务堆栈未使用的字节数,

StackBytes.OSUsed

的值即为被测任务堆栈已使用的字节数。

5、需要设置宏:OS_TASK_OPT_STK_CLR

1

6、最后一点建议:

(1)将被测任务经历最坏的堆栈使用状态,测出来的使用率才可靠

(2)堆栈使用率最好在%50~%80

之间,太小浪费空间,太大不安全

(3)最好在工程中单独建立一个优先级较低延时较长的任务来测试其它任

务的堆栈使用情况,不用时可以挂起该任务。

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 音响一直嗡嗡响怎么办 泰国入境卡填错了怎么办 泰国入境卡丢失怎么办 倒车时路人摔倒怎么办 皮肤嗮伤刺痛怎么办 亡灵杀手玩不了怎么办 倒刺发炎化脓了怎么办 一热身上起水泡怎么办 婴儿手上起倒刺怎么办 孩子手上长倒刺怎么办 怀孕手上起倒刺怎么办 饥荒疯狗疯狂追怎么办? 激活码忘记了怎么办 传奇密码忘了怎么办 传奇说不了话怎么办 ps工具栏隐藏了怎么办 c盘不能格式化怎么办 来大姨妈洗屁屁怎么办 戒指带上容易掉怎么办 中油好客e站闪退怎么办 感觉记忆力越来越差怎么办 30后记忆力减退怎么办 win10交互式登录失败怎么办 微信钱突然没了怎么办 qq被禁用了怎么办 w7本地连接禁用了怎么办 w7账户禁用了怎么办 猪得了高热病怎么办 qq聊天记录没了怎么办 每天6颗利培酮嗜睡怎么办? 吃了利培酮嗜睡怎么办 6岁儿童蛀牙怎么办 3岁蛀牙严重怎么办 dnf退不了公会怎么办 开机密码忘了怎么办 传奇霸业合区打不过怎么办 电脑出现花屏怎么办 电脑一直花屏怎么办 高考300多点点怎么办 媳妇说嗓子疼怎么办 dnf深渊打不过怎么办