搜索
bottom↓
回复: 11

使用MDK调试uc/OS-II显示任务栈使用情况的代码。

[复制链接]

出0入0汤圆

发表于 2012-2-6 17:50:48 | 显示全部楼层 |阅读模式
MDK是个封闭的IDE,不支持别人的RTOS,这样使用uc/OS-II无法显示任务栈使用情况,相比IAR就成了一个很鸡肋的开发工具,但是你可以在程序里面自己添加任务栈检查程序,如下所述:

static  void  AppTaskStacks (void *p_arg)
{
    CPU_INT08U  i;
    CPU_INT16U  green1;
    CPU_INT16U  green2;
    CPU_INT16U  green3;
    CPU_INT16U  black;
    CPU_INT16U  stk_pct;
    CPU_INT32U  stk_sz;
    CPU_INT32U  stk_use;
    CPU_INT32U  stk_max;
    OS_TCB     *ptcb;   
    CPU_INT08U  s[10];
   
      
    green1  = AppFormatColor(0, 31, 0);
    green2  = AppFormatColor(0, 17, 0);
    green3  = AppFormatColor(0,  8, 0);
    black   = AppFormatColor(0,  0, 0);

    LCD_DispStr(27, 0, "Stack Size Demo:                ", green3);
    LCD_DispStr(28, 0, "The stack size, current stack   ", green2);
    LCD_DispStr(29, 0, "use and max stack use are shown ", green2);
    LCD_DispStr(30, 0, "for each task.                  ", green2);

    ptcb    = &OSTCBTbl[0];
    i       = 0;

    while (DEF_TRUE) {
        OSTimeDlyHMSM(0, 0, 0, 25);
        
        if (ptcb != NULL) {
            stk_sz      = ptcb->OSTCBStkSize * sizeof (OS_STK);
            stk_use     = (CPU_INT32U)(ptcb->OSTCBStkBase) - (CPU_INT32U)(ptcb->OSTCBStkPtr);
            stk_max     = ptcb->OSTCBStkUsed;
            
            if (stk_sz != 0) {            
                stk_pct     = 100 * stk_use / stk_sz;
                LCD_DispStr   (32 + i * 2,     0, ptcb->OSTCBTaskName,      black);
                if (stk_sz / 5 < 256) {
                    LCD_DispHorBar(32 + i * 2 + 1, 3, stk_sz  / 5, 200,         green1);
                }
                if (stk_max / 5 < 256) {
                    LCD_DispHorBar(32 + i * 2 + 1, 3, stk_max / 5, stk_max / 5, green2);
                }
                if (stk_use / 5 < 256) {
                    LCD_DispHorBar(32 + i * 2 + 1, 3, stk_use / 5, stk_use / 5, green3);
                }
               
                AppFormatDec(s, stk_pct, 2);
                s[2] = '%';
                LCD_DispStr   (32 + i * 2 + 1,(stk_sz / 40) + 1, s,          black);
            }
            
            ptcb        = ptcb->OSTCBPrev;
            i++;
        } else {
            ptcb        = &OSTCBTbl[0];   
            i           = 0;            
        }
    }
}


(原文件名:arm-arm1176-rtsm.jpg)

出0入0汤圆

发表于 2012-4-21 20:54:00 | 显示全部楼层
IAR还有这个功能啊,谢谢楼主了!!

出0入10汤圆

发表于 2014-12-6 21:00:22 | 显示全部楼层
问下:下面的这个窗口是怎么出来的?

出0入0汤圆

发表于 2014-12-6 21:16:44 | 显示全部楼层
好贴没人顶啊...不过楼上的问题+1

出0入0汤圆

发表于 2014-12-6 21:26:48 | 显示全部楼层
不是mdk不支持其他RTOS,而是没有人给mdk开发这样的插件,mdk本身是有这样的接口给去开发的。

出0入0汤圆

发表于 2014-12-9 14:20:25 | 显示全部楼层
跟着楼主涨姿势了

出0入0汤圆

发表于 2014-12-9 14:35:49 | 显示全部楼层
OS_TCB *pTCB;
OS_STK_DATA stk;
pTCB=&OSTCBTbl[0];
OSTaskStkChk(pTCB->OSTCBPrio, &stk);
pTCB=pTCB->OSTCBPrev;
一般都是通过打印信息获取OSTaskStkChk

出0入0汤圆

发表于 2015-1-29 15:16:08 | 显示全部楼层
长知识了。。。。

出50入0汤圆

发表于 2015-1-29 16:31:14 | 显示全部楼层
收藏了,谢谢分享!

出0入0汤圆

发表于 2015-1-29 19:39:24 | 显示全部楼层
窗口是怎么回事

出0入0汤圆

发表于 2015-1-30 16:30:41 | 显示全部楼层
窗口是怎么搞出来的?

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-5-10 02:59

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

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