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

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

  1. static  void  AppTaskStacks (void *p_arg)
  2. {
  3.     CPU_INT08U  i;
  4.     CPU_INT16U  green1;
  5.     CPU_INT16U  green2;
  6.     CPU_INT16U  green3;
  7.     CPU_INT16U  black;
  8.     CPU_INT16U  stk_pct;
  9.     CPU_INT32U  stk_sz;
  10.     CPU_INT32U  stk_use;
  11.     CPU_INT32U  stk_max;
  12.     OS_TCB     *ptcb;     
  13.     CPU_INT08U  s[10];
  14.      
  15.       
  16.     green1  = AppFormatColor(0, 31, 0);
  17.     green2  = AppFormatColor(0, 17, 0);
  18.     green3  = AppFormatColor(0,  8, 0);
  19.     black   = AppFormatColor(0,  0, 0);

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

  24.     ptcb    = &OSTCBTbl[0];
  25.     i       = 0;

  26.     while (DEF_TRUE) {
  27.         OSTimeDlyHMSM(0, 0, 0, 25);
  28.          
  29.         if (ptcb != NULL) {
  30.             stk_sz      = ptcb->OSTCBStkSize * sizeof (OS_STK);
  31.             stk_use     = (CPU_INT32U)(ptcb->OSTCBStkBase) - (CPU_INT32U)(ptcb->OSTCBStkPtr);
  32.             stk_max     = ptcb->OSTCBStkUsed;
  33.             
  34.             if (stk_sz != 0) {            
  35.                 stk_pct     = 100 * stk_use / stk_sz;
  36.                 LCD_DispStr   (32 + i * 2,     0, ptcb->OSTCBTaskName,      black);
  37.                 if (stk_sz / 5 < 256) {
  38.                     LCD_DispHorBar(32 + i * 2 + 1, 3, stk_sz  / 5, 200,         green1);
  39.                 }
  40.                 if (stk_max / 5 < 256) {
  41.                     LCD_DispHorBar(32 + i * 2 + 1, 3, stk_max / 5, stk_max / 5, green2);
  42.                 }
  43.                 if (stk_use / 5 < 256) {
  44.                     LCD_DispHorBar(32 + i * 2 + 1, 3, stk_use / 5, stk_use / 5, green3);
  45.                 }
  46.                  
  47.                 AppFormatDec(s, stk_pct, 2);
  48.                 s[2] = '%';
  49.                 LCD_DispStr   (32 + i * 2 + 1,(stk_sz / 40) + 1, s,          black);  
  50.             }
  51.             
  52.             ptcb        = ptcb->OSTCBPrev;
  53.             i++;
  54.         } else {
  55.             ptcb        = &OSTCBTbl[0];   
  56.             i           = 0;            
  57.         }
  58.     }
  59. }



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
fe07fe 发表于 2012-2-7 15:27 | 显示全部楼层
好厉害!
john_lee 发表于 2012-2-7 17:04 | 显示全部楼层
本帖最后由 john_lee 于 2012-2-7 17:05 编辑

µVision4可以支持第3方的RTOS,楼主自己去看看keil的µVision Application Notes。
billchian 发表于 2015-4-11 16:09 | 显示全部楼层
john_lee 发表于 2012-2-7 17:04
µVision4可以支持第3方的RTOS,楼主自己去看看keil的µVision Application Notes。

大哥!具体怎么操作的呢,有没有相关的文档可以借鉴了,小弟正需要这个
您需要登录后才可以回帖 登录 | 注册

本版积分规则

i55
个人签名:诸葛一生唯补肾 吕端房事不糊涂 虽然我不是基督徒,但你可以用身体传福音给我,我必有所感动。

28

主题

750

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部