初级会员
- 积分
- 118
- 金钱
- 118
- 注册时间
- 2015-9-7
- 在线时间
- 8 小时
|
10金钱
1.系统有数个任务,开机运行正常,但是运行一段时间(偶发不确定具体时间,反正至少好几个小时~1天),有一个显示任务Dis_task不运行了,其他任务(优先级有比显示任务高的,也有低的)正常。2.显示任务Dis_task调用OSPendMulti()请求多个内核对象:一个是RTC中断发送的时间消息队列Dis_TASK_RTC;一个是按键扫描任务发送的按键消息队列Dis_TASK_KEY。注:串口任务 UART_DEAL_task没有使用。
3.在统计任务的钩子函数中print所有任务的任务控制块的相关成员变量和消息队列的使用情况:
//打印所有任务的相关信息(下边的代码与任务数量一样多)
p = &(任务控制块);
printf("\r\n %s \r\n",p->NamePtr); //打印任务名称
printf(" #CtxSw: %d \r\n",p->CtxSwCtr); //任务执行次数
printf(" #任务的CPU使用率: %.2f \r\n",((float)p->CPUUsage)/100); //任务CPU使用率
printf("Core_Pageused/sum/free:%d/%d/%d usage:%d %% .任务状态:%d \r\n",p->StkUsed,p->StkSize, p->StkFree,(p->StkUsed*100)/p->StkSize,p->TaskState); //打印堆栈使用情况
//CPU总使用率
printf("\r\n\r\n");
printf("CPU总使用率:%f%%\r\n",(float) OSStatTaskCPUUsage / 100); //CPU使用率
printf(" CPU Speed: %ld MHz \r\n",BSP_CPU_ClkFreq() / 1000000L); //主频
printf("\r\n\r\n"); //插入换行
//消息队列
printf("总消息池剩余/已使用/最大使用量:%d/%d/%d \r\n",OSMsgPool.NbrFree,OSMsgPool.NbrUsed,OSMsgPool.NbrUsedMax);
printf("RTC实时中断的消息池总量/已使用/最大使用量:%d/%d/%d \r\n",Dis_TASK_RTC.MsgQ.NbrEntriesSize,Dis_TASK_RTC.MsgQ.NbrEntries,Dis_TASK_RTC.MsgQ.NbrEntriesMax);
printf("按键扫描任务的消息池总量/已使用/最大使用量:%d/%d/%d \r\n",Dis_TASK_KEY.MsgQ.NbrEntriesSize,Dis_TASK_KEY.MsgQ.NbrEntries,Dis_TASK_KEY.MsgQ.NbrEntriesMax);
4.通过查看print打印的内容发现的现象:
4.1开机运行正常,运行一段时间(偶发不确定具体时间,反正至少好几个小时~1天)后,仅仅显示任务Dis_task不运行,就像不存在一样。其他任务都正常。由于显示任务Dis_task不运行了,但RTC中断不断的发送消息队列,当消息队列满了之后进入while死循环并打印“消息队列已满”。
4.2所有任务的堆栈都有很大余量,应该不是堆栈问题。
5.请求
希望给点bug排查的思路或手段。多谢!!!
/*****************正常打印情况***********************
串口任务 UART_DEAL_task
#CtxSw: 62
#任务的CPU使用率: 0.00
Core_Pageused/sum/free:36/128/92 usage:28 %
显示任务 Dis_task
#CtxSw: 49920
#任务的CPU使用率: 1.43
Core_Pageused/sum/free:74/128/54 usage:57 %
按键扫描任务 KEY task
#CtxSw: 1231178
#任务的CPU使用率: 0.30
Core_Pageused/sum/free:32/128/96 usage:25 %
定时任务 uC/OS-III Timer Task
#CtxSw: 133110
#任务的CPU使用率: 0.11
Core_Pageused/sum/free:54/128/74 usage:42 %
空闲任务 uC/OS-III Idle Task
#CtxSw: 2223574
#任务的CPU使用率: 88.02
Core_Pageused/sum/free:18/128/110 usage:14 %
统计任务 uC/OS-III Stat Task
#CtxSw: 237821
#任务的CPU使用率: 9.23
Core_Pageused/sum/free:129/256/127 usage:50 %
时钟节拍任务 uC/OS-III Tick Task
#CtxSw: 2495831
#任务的CPU使用率: 0.42
Core_Pageused/sum/free:37/128/91 usage:28 %
CPU总使用率:16.290001%
CPU Speed: 72 MHz
总消息池剩余/已使用/最大使用量:200/0/0
RTC实时中断的消息池总量/已使用/最大使用量:50/0/0
按键扫描任务的消息池总量/已使用/最大使用量:50/0/0
*****************************************************/
/******************异常时************************
**********************************/
|
-
|