[mw_shl_code=c,true]这个是主任务,当程序只运行服务器任务和客户端任务时,没有问题,但是我添加下面四个任
务后,服务器任务就会出错,我用电脑TCP客户端连接板子服务器(端口8888)是,就会报错,报错代码
在lwip中的sys_arch.c中,申请消息队列的那一句,也就是说,申请消息队列失败,
请教大家,是什么原因?
主任务代码
void start_task(void *pdata)
{
OS_CPU_SR cpu_sr;
pdata = pdata ;
OSStatInit();
OS_ENTER_CRITICAL();
//服务器任务
while(tcp_server_init())
{
printf("TCP Server failed !\r\n");
delay_ms(500);
}
printf("TCP server Success !\r\n"); //Assertion "OSQCreate" failed at line 67
in ..\LWIP\arch\sys_arch.c
//客户端任务
OSTaskCreate(tcp_client_thread,(void*)0,(OS_STK*)&TCPCLIENT_TASK_STK
[TCPCLIENT_STK_SIZE-1],TCPCLIENT_PRIO);
//串口解析任务
OSTaskCreate(decode_usart_task,(void *)0,(OS_STK*)&DECODE_USART_TASK_STK
[DECODE_USART_SIZE-1],DECODE_USART_TASK_PRO;
//获取时间任务
OSTaskCreate(get_time_task,(void*)0,(OS_STK*)&GET_TIME_TASK_STK[GET_TIME_SIZE-
1],GET_TIME_TASK_PRO);
//身份识别任务
OSTaskCreate(man_identify_task,(void*)0,(OS_STK*)&MAN_IDENTIFY_TASK_STK
[MAN_IDENTIFY_SIZE-1],MAN_IDENTIFY_TASK_PRIO;
//监视U盘,寻卡任务
OSTaskCreate(watch_task,(void *)0,(OS_STK*)&UDISK_TASK_STK[UDISK_STK_SIZE-
1],UDISK_TASK_PRIO);
OSTaskSuspend(OS_PRIO_SELF);
OS_EXIT_CRITICAL();
}
运行出错的地方
err_t sys_mbox_new( sys_mbox_t *mbox, int size)
{
(*mbox)=mymalloc(SRAMIN,sizeof(TQ_DESCR));
mymemset((*mbox),0,sizeof(TQ_DESCR));
if(*mbox)
{
if(size>MAX_QUEUE_ENTRIES)size=MAX_QUEUE_ENTRIES;
(*mbox)->pQ=OSQCreate(&((*mbox)->pvQEntries[0]),size); // 这里返回了NULL?为什么?
LWIP_ASSERT("OSQCreate",(*mbox)->pQ!=NULL);
if((*mbox)->pQ!=NULL)return ERR_OK;
else
{
myfree(SRAMIN,(*mbox));
return ERR_MEM;
}
}else return ERR_MEM;
}
我的主任务代码只创建了一个事件标识组,和一个信号量
OS_EVENT *outputLogFileSem;
OS_FLAG_GRP *flag;
等待高手解答,第一次发帖希望大家给予帮助,谢谢各位!
[/mw_shl_code]
[mw_shl_code=c,true][/mw_shl_code]
[mw_shl_code=c,true][/mw_shl_code]
[mw_shl_code=c,true][/mw_shl_code]
|