搜索
bottom↓
回复: 7

ucos,为什么我使用堆栈检验功能得到的结果不正确呢?

[复制链接]

出0入0汤圆

发表于 2011-6-29 08:29:55 | 显示全部楼层 |阅读模式
ucos,为什么我使用堆栈检验功能得到的结果不正确呢?

typedef struct os_stk_data
{   
  INT32U  OSFree;                     
  INT32U  OSUsed;           
} OS_STK_DATA;

OS_STK_DATA  SPACE_KBD;
OS_STK_DATA  *p_kbd;

p_kbd = &SPACE_KBD;
OSTaskStkChk(TASK_KBD_PRIO, p_kbd);

单步调试发现SPACE_KBD里面,OSUsed始终为0x2000;即使屏蔽掉该任务的其他内容只保留延时也是这样!
另外一个任务则总是0x1000.这是为什么呀?

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

 楼主| 发表于 2011-6-29 08:34:05 | 显示全部楼层
顶!

出0入0汤圆

发表于 2011-6-29 08:36:43 | 显示全部楼层
因为它是检查 任务栈里面的使用的最大深度。它是以任务栈基地址为起点检测,检查到不为0,此时的计数值就是Free,用总的任务栈大小减去Free就是Use的,所以ucos的堆栈检查只是检查最大深度,不能检查动态的内存使用情况

出0入0汤圆

 楼主| 发表于 2011-6-29 08:46:12 | 显示全部楼层
回复【2楼】fengyuganyu
因为它是检查 任务栈里面的使用的最大深度。它是以任务栈基地址为起点检测,检查到不为0,此时的计数值就是free,用总的任务栈大小减去free就是use的,所以ucos的堆栈检查只是检查最大深度,不能检查动态的内存使用情况
-----------------------------------------------------------------------

不是吧?看书上,它的检查应该是动态的。况且,即便只是检查最大深度这个数字也不对呀,我设置的堆栈是2048呀!

出0入0汤圆

 楼主| 发表于 2011-6-29 09:05:01 | 显示全部楼层
哪位高人指点一下?问题出在哪里呢?

出0入0汤圆

 楼主| 发表于 2011-6-29 09:39:59 | 显示全部楼层
问题应该是这个检验函数只是检验到栈底了,没有检验到空余的空间。为什么呢?

出0入0汤圆

 楼主| 发表于 2011-6-29 10:33:41 | 显示全部楼层
搞定,原来是建立任务时把栈底写成栈顶了!

出0入0汤圆

发表于 2011-6-29 17:02:16 | 显示全部楼层
你可以看先ucos源码中 关于这个函数的构成,其实现方式,就是由栈底一个个的判断值是否为0, 如果不为0则表示被占用“过”,注意此时是“被占用过”,因为当SP运行到此处时,对其地址读写了,那么此地址上的值一般不会为0,当你调度一个函数后,虽然PC回来了,SP也释放了,但是,地址上的数据被使用了一次之后不为0,并且也没有对其主动清零,那么你此时检查的栈使用情况只能是你任务运行到“此时”最大深度.

例如:1.你有一个任务 堆栈 1024bytes
      2.你在任务中调用函数 或者 一直运行到最大深度,使其SP被指到了1020的位置上,并使1020位置上的数据不为0
      4.执行完后SP恢复到某一地址 100
      3.此时利用ucos的堆栈检查,检查出此时1023-1021 为Free,其余为USE

#if OS_STK_GROWTH == 1
    while (*pchk++ == (OS_STK)0) {                    /* Compute the number of zero entries on the stk */
        free++;
    }

这是我的理解
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-4 11:09

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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