初级会员

- 积分
- 57
- 金钱
- 57
- 注册时间
- 2016-8-3
- 在线时间
- 29 小时
|
1金钱
板子为探索者F407,在TCP Client的例程上想添加一个monitor task监控其他task状态,monitor task优先级为6,高于TCP,LEDtask。
monitor task函数代码如下。但我不想monitor task刷新太快,所以在循环中添加一个延时500ms。但经过测试发现一加延时程序就挂了,而且网络也ping不同服务器。
哪位大神指点指点?
void monitor_task(void *pdata)
{
u8 i = 0;
u8 j = 0;
char sMsg[300];
printf("Enter monitor Task, the size of sMsg = %d\r\n", sizeof(sMsg));
while(1)
{
printf("j = %d\r\n", j++);
sprintf(sMsg + strlen(sMsg), "TaskName TaskPriority State Stack(Byte)\r\n");
for(i = 6; i < 10; i++)
{
u8 err = 0;
u8 TaskState = 0;
OS_TCB tempOsTcp;
OS_STK_DATA tempSTKData;
u32 nTotalSTK;
err = OSTaskQuery(i, &tempOsTcp);
if (err != OS_ERR_NONE)
{
delay_ms(50);
continue;
}
if(strlen(tempOsTcp.OSTCBTaskName) >= 8)
sprintf(sMsg + strlen(sMsg), "%s\t%d\t", tempOsTcp.OSTCBTaskName, i);
else
sprintf(sMsg + strlen(sMsg), "%s\t\t%d\t", tempOsTcp.OSTCBTaskName, i);
TaskState = tempOsTcp.OSTCBStat;
switch(TaskState)
{
case OS_STAT_RDY:
strcat(sMsg, "Ready\t");
break;
case OS_STAT_MBOX:
strcat(sMsg, "WaitMailBox");
break;
case OS_STAT_SEM:
strcat(sMsg, "WaitSemaphore");
break;
case OS_STAT_SUSPEND:
strcat(sMsg, "Suspend\t");
break;
case OS_STAT_MUTEX:
strcat(sMsg, "MutexSemaphore");
break;
case OS_STAT_FLAG:
strcat(sMsg, "WaitEventFlag");
break;
case OS_STAT_MULTI:
strcat(sMsg, "WaitMultiEvent");
break;
default:
sprintf(sMsg + strlen(sMsg), "ErrorState: %d", TaskState);
// reCreate_task(LED_TASK_PRIO);
break;
}
strcat(sMsg, "\t");
err = OSTaskStkChk(i, &tempSTKData);
if(err != OS_ERR_NONE)
{
strcat(sMsg, "StackError\r\n");
continue;
}
nTotalSTK = tempSTKData.OSUsed + tempSTKData.OSFree;
sprintf(sMsg + strlen(sMsg), "%d %d \r\n\t", tempSTKData.OSUsed, nTotalSTK);
}
printf("%s\r\n", sMsg);
memset(sMsg, 0, sizeof(sMsg));
//delay_ms(500);
OSTimeDlyHMSM(0,0,0, 200);
}
}
|
|