初级会员
- 积分
- 105
- 金钱
- 105
- 注册时间
- 2013-4-3
- 在线时间
- 2 小时
|
5金钱
最近在看STM32中UCOS+LWIP的例程。有几点疑问?
1:LWIP扩展例程\网络实验8\NETCONN_TCP客户端例程中,创建了static void tcp_client_thread(void *arg)这个线程,
怎么没有在这个函数中看见延时函数,不是说要有延时函数才能让出CPU使用权吗?
while(1)
{
if((tcp_client_flag & LWIP_SEND_DATA) == LWIP_SEND_DATA) //????????·???
{
err = netconn_write(tcp_clientconn ,tcp_client_sendbuf,strlen((char*)tcp_client_sendbuf),NETCONN_COPY); //·???tcp_server_sentbuf????????
if(err != ERR_OK)
{
printf("·????§°?\r\n");
}
tcp_client_flag &= ~LWIP_SEND_DATA;
}
if((recv_err = netconn_recv(tcp_clientconn,&recvbuf)) == ERR_OK) //??????????
{
OS_ENTER_CRITICAL(); //??????
memset(tcp_client_recvbuf,0,TCP_CLIENT_RX_BUFSIZE); //??????????????????
for(q=recvbuf->p;q!=NULL;q=q->next) //±é?ú?ê????pbuf??±í
{
//????????±???TCP_CLIENT_RX_BUFSIZE??????????·??ó??TCP_CLIENT_RX_BUFSIZE?????à???????????ó??
//???°??????±?TCP_CLIENT_RX_BUFSIZE?????à?¤??????????·??ò???°????±??ù????????
if(q->len > (TCP_CLIENT_RX_BUFSIZE-data_len)) memcpy(tcp_client_recvbuf+data_len,q->payload,(TCP_CLIENT_RX_BUFSIZE-data_len));//??±?????
else memcpy(tcp_client_recvbuf+data_len,q->payload,q->len);
data_len += q->len;
if(data_len > TCP_CLIENT_RX_BUFSIZE) break; //????TCP???§????????×é,????
}
OS_EXIT_CRITICAL(); //??????
data_len=0; //?????ê???ódata_len????????
printf("%s\r\n",tcp_client_recvbuf);
netbuf_delete(recvbuf);
}else if(recv_err == ERR_CLSD) //??±?????
{
netconn_close(tcp_clientconn);
netconn_delete(tcp_clientconn);
printf("·????÷%d.%d.%d.%d????????\r\n",lwipdev.remoteip[0],lwipdev.remoteip[1], lwipdev.remoteip[2],lwipdev.remoteip[3]);
break;
}
}
2:任务中的延时函数,延时时长,是怎么确定的?有什么要求?
比如OSTimeDlyHMSM(0,0,0,500); //
刚看UCOS这块,看了原子哥的教程, 现在还在学习,希望大家能帮忙解答一下。 |
最佳答案
查看完整内容[请看2#楼]
让出CPU的使用权并不一定要调用OSTimeDlyHMSM()这个函数,等待信号量、等待消息邮箱都可以的让出CPU的使用权。的。在这个例程中netconn_recv()函数就是一个在指定时间内等待消息的函数,在等待消息的时候就会让出CPU使用权!
|