硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5439|回复: 12
收起左侧

[μCOS-III] printf 任务信息

[复制链接]

11

主题

59

回帖

11

积分

初级会员

积分
11
发表于 2014-10-28 14:04:09 | 显示全部楼层 |阅读模式
while (DEF_TRUE)                                             /* Task body, always written as an infinite loop.       */
  {
    GPIOF->ODR ^= 0x0040;
    OSTimeDly(5000,OS_OPT_TIME_DLY,&err);
   
    CPU_CRITICAL_ENTER();
   
    /* 打印标题 */
    printf("  Prio   Used  Free  Per  CPU    Taskname\r\n");
   
    p_tcb = OSTaskDbgListPtr;
    /* 遍历任务控制块列表(TCB list),打印所有的任务的优先级和名称 */
    while (p_tcb != (OS_TCB *)0)
    {
      CPU = (float)p_tcb->CPUUsage / 100;
      printf("   %2d  %5d  %5d  %02d%%   %5.2f%%   %s\r\n",
             p_tcb-&gtrio,
             p_tcb->StkUsed,
             p_tcb->StkFree,
             (p_tcb->StkUsed * 100) / (p_tcb->StkUsed + p_tcb->StkFree),
             CPU,
             p_tcb->NamePtr);        
      
      
      p_tcb = p_tcb->DbgNextPtr;
      
    }   
    CPU_CRITICAL_EXIT();
  }

第一次打印出来的信息是正常的,以后每次打印第一个任务的任务名都没有、其它的正常,然后本任务堆栈每次增加18个字节,直到溢出。
1.jpg
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115694
QQ
发表于 2014-10-28 14:06:28 | 显示全部楼层
这种情况暂时还没有遇到过,楼主是跑的那个例子。
回复

使用道具 举报

11

主题

59

回帖

11

积分

初级会员

积分
11
 楼主| 发表于 2014-10-28 14:11:48 | 显示全部楼层
自己写的程序,打印信息那一段是在第五期:STemWin5.20+uCOS-III+FatFS这里找的,用的IAR
回复

使用道具 举报

11

主题

59

回帖

11

积分

初级会员

积分
11
 楼主| 发表于 2014-10-29 10:28:58 | 显示全部楼层
开了FPU之后,好了。问题可能出在浮点数计算上面。(CPU = (float)p_tcb->CPUUsage / 100;)
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115694
QQ
发表于 2014-10-29 13:36:51 | 显示全部楼层
恩,好的。
回复

使用道具 举报

11

主题

59

回帖

11

积分

初级会员

积分
11
 楼主| 发表于 2014-10-29 15:40:32 | 显示全部楼层
xSize = WM_GetWindowSizeX(0);
  ySize = WM_GetWindowSizeY(0);
我的是7寸屏,设置的是800*480,怎么这两个返回的都是4095呢
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115694
QQ
发表于 2014-10-29 15:41:41 | 显示全部楼层

回 magusss 的帖子

magusss:  xSize = WM_GetWindowSizeX(0);
  ySize = WM_GetWindowSizeY(0);
我的是7寸屏,设置的是800*480,怎么这两个返回的都是4095呢 (2014-10-29 15:40) 
确定调用前emWin已经初始化好。
回复

使用道具 举报

11

主题

59

回帖

11

积分

初级会员

积分
11
 楼主| 发表于 2014-10-29 15:48:10 | 显示全部楼层
创建窗口什么的都没问题,就是想自动计算尺寸才发现这个值不对
回复

使用道具 举报

11

主题

59

回帖

11

积分

初级会员

积分
11
 楼主| 发表于 2014-10-29 16:25:10 | 显示全部楼层
xSize = LCD_GetXSize();
ySize = LCD_GetYSize(); 这个还是对的
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115694
QQ
发表于 2014-10-29 16:35:51 | 显示全部楼层

回 magusss 的帖子

magusss:  xSize = WM_GetWindowSizeX(0);
  ySize = WM_GetWindowSizeY(0);
我的是7寸屏,设置的是800*480,怎么这两个返回的都是4095呢 (2014-10-29 15:40) 
参数要填窗口的句柄:
int WM_GetWindowSizeX(WM_HWIN hWin);
int WM_GetWindowSizeY(WM_HWIN hWin);
回复

使用道具 举报

11

主题

59

回帖

11

积分

初级会员

积分
11
 楼主| 发表于 2014-10-29 18:40:21 | 显示全部楼层

回 eric2013 的帖子

eric2013:参数要填窗口的句柄:
int WM_GetWindowSizeX(WM_HWIN hWin);
int WM_GetWindowSizeY(WM_HWIN hWin); (2014-10-29 16:35) 
这个我试过了,填0和填WM_HBKWIN是一样的。
说明里有:如果给定窗口的句柄为0,则函数返回桌面窗口的尺寸。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115694
QQ
发表于 2014-10-30 21:33:15 | 显示全部楼层

回 magusss 的帖子

magusss:这个我试过了,填0和填WM_HBKWIN是一样的。
说明里有:如果给定窗口的句柄为0,则函数返回桌面窗口的尺寸。 (2014-10-29 18:40) 
我记得emWin的综合Demo是不是就用的这个函数,可以用。
回复

使用道具 举报

11

主题

59

回帖

11

积分

初级会员

积分
11
 楼主| 发表于 2014-10-31 09:24:54 | 显示全部楼层
DEMO里有用这两个函数的,但是没有用0或WM_HBKWIN做参数的。
另外,使用其它窗口句柄的时候返回值是正确的,只有使用0或WM_HBKWIN的时候是不对的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-12 12:03 , Processed in 0.500645 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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