新手入门
- 积分
- 5
- 金钱
- 5
- 注册时间
- 2026-9-4
- 在线时间
- 0 小时
|
/* USER CODE END Header_UDP_Recv_Task */
void UDP_Recv_Task(void *argument)
{
/* init code for LWIP */
MX_LWIP_Init();
/* USER CODE BEGIN UDP_Recv_Task */
struct netbuf *udp_rx_buf = NULL;
err_t err;
udp_command_t udp_data_buf;
memset((uint8_t *)¶meter, 0, sizeof(para_t));
udp_conn = netconn_new(NETCONN_UDP);
netconn_bind(udp_conn, IP_ADDR_ANY, UDP_PORT_LOCAL);//绑定本机端口
/* Infinite loop */
for(;;)
{
//阻塞等待UDP数据包
err = netconn_recv(udp_conn, &udp_rx_buf);
if (err == ERR_OK)
{
if (UDP_COMMAND_LENGTHS == netbuf_len(udp_rx_buf))
{
memcpy((uint8_t *)&udp_data_buf, (uint8_t *)udp_rx_buf->p->payload, UDP_COMMAND_LENGTHS);
//投递到业务队列
osMessageQueuePut(UDP_Command_QueueHandle, &udp_data_buf, 0, 0U);
memset((uint8_t *)&udp_data_buf, 0, UDP_COMMAND_LENGTHS);
}
//释放缓存
netbuf_delete(udp_rx_buf);
udp_rx_buf = NULL;
}
else
{
osDelay(2);
}
}
哪位大侠,帮看看上面的代码中的消息队列哪里有问题?我第一次发送udp指令没有问题,第二次发送指令就被消息队列put函数卡死。
|
|