static void
udpecho_thread(void *arg)
{
int sock = -1;
char *recv_data;
struct sockaddr_in udp_addr,seraddr;
int recv_data_len;
socklen_t addrlen;
DEBUG_P("±¾µØ¶Ë¿ÚºÅÊÇ%d\n\n",LOCAL_PORT);
while(1)
{
recv_data = (char *)pvPortMalloc(RECV_DATA);
if (recv_data == NULL)
{
DEBUG_P("No memory\n");
goto __exit;
}
sock = socket(AF_INET, SOCK_DGRAM, 0);
if (sock < 0)
{
DEBUG_P("Socket error\n");
goto __exit;
}
udp_addr.sin_family = AF_INET; //IPv4
udp_addr.sin_addr.s_addr = INADDR_ANY;
udp_addr.sin_port = htons(LOCAL_PORT);
memset(&(udp_addr.sin_zero), 0, sizeof(udp_addr.sin_zero));
if (bind(sock, (struct sockaddr *)&udp_addr, sizeof(struct sockaddr)) == -1)
{
DEBUG_P("Unable to bind\n");
goto __exit;
}
while(1)
{
recv_data_len=recvfrom(sock,recv_data,
RECV_DATA,0,
(struct sockaddr*)&seraddr,
&addrlen);
DEBUG_P("receive from %s\n",inet_ntoa(seraddr.sin_addr));
#if UDP_SPEED_UP
SetSpeedUpInfo(&SpeedUpInfo, LOCAL_PORT);
#endif
sendto( sock,recv_data,
recv_data_len,0,
(struct sockaddr*)&seraddr,
addrlen);
}
__exit:
if (sock >= 0) closesocket(sock);
if (recv_data) free(recv_data);
}
}
请问这个UDP回显实验的任务,它没有延时的话会一直执行下去,那么比它优先级低的任务怎么执行?
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
庆竹难书 2024-04-26 17:16关注不管是什么rtos,首先任务调度是通过任务调度器执行,在多个任务中,如果你该任务的while中含有os_delay类似的系统延迟函数,就会触调度器去查看就绪任务列表 ,然后再就绪任务列表中把优先级最高的找到并且执行,当你的os_delay函数时间到了之后 之前的那个任务就又变成了就绪态 等待你去调用
解决 无用评论 打赏 举报