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

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

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

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

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

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










arm-arm1176-rtsm.jpg
arm-arm1176-rtsm.jpg
cumt_123456 发表于 2013-8-1 23:02 | 显示全部楼层
你好,请教下,AppFormatDec()这个函数在哪里了?什么意思?其它的子函数哪里找呢?我想验证下程序,谢谢。从***电子追你到这里了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

28

主题

750

帖子

6

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