中级会员
 
- 积分
- 368
- 金钱
- 368
- 注册时间
- 2019-10-24
- 在线时间
- 153 小时
|
20金钱
void malloc_task(void *pvParameters)
{
BaseType_t err1=pdFALSE;
while(1)
{
if(ifd_socket2->tcppcb->BinarySemaphore!=NULL)
{
err1=xSemaphoreTake(ifd_socket2->tcppcb->BinarySemaphore,portMAX_DELAY); //获取信号量
if(err1==pdTRUE)
{
//TCP1网口发送和接收
ifd_socket2->Send(SocketType_TcpClient,tcp_client_send,30);
Receive_resu=ifd_socket2->Recevie(SocketType_TcpClient,Tcp_Receive);
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_1);
vTaskDelay(10);
}
}
}
}
这一段任务函数运行正常(二值信号是在接收回调函数释放的)
while(1)
{
if(ifd_socket2->tcppcb->state==CLOSED)
{
vSemaphoreDelete(ifd_socket2->tcppcb->BinarySemaphore);
ifd_socket2->Close_Connect(ifd_socket2->tcppcb,SocketType_TcpClient);
res_tcp=ifd_socket2->Creat(SocketType_TcpClient,0,0);
if(res_tcp == 0)
{
vSemaphoreDelete(ifd_socket2->tcppcb->BinarySemaphore);
ifd_socket2->tcppcb->BinarySemaphore=xSemaphoreCreateBinary(); //创建TCP2二值信号
res_concet=ifd_socket2->Connect(SocketType_TcpClient,Set_remoteip,TCP_CLIENT_PORT);
}
}
}
这里添加了一段重连机制,TCP删除重建->连接都没问题,但此时二值信号已经无效,二值信号删前删后地址一致
typedef void * flag_turn;
while(1)
{
if(ifd_socket2->tcppcb->state==CLOSED)
{
flag_turn=ifd_socket2->tcppcb->BinarySemaphore; //先提取信号地址
ifd_socket2->Close_Connect(ifd_socket2->tcppcb,SocketType_TcpClient);
res_tcp=ifd_socket2->Creat(SocketType_TcpClient,0,0);
if(res_tcp == 0)
{
ifd_socket2->tcppcb->BinarySemaphore=xSemaphoreCreateBinary(); //创建TCP2二值信号
ifd_socket2->tcppcb->BinarySemaphore=flag_turn; //把删tcp块前的信号地址再赋给新建的信号值
res_concet=ifd_socket2->Connect(SocketType_TcpClient,Set_remoteip,TCP_CLIENT_PORT);
}
}
}
这一段试验二值信号有效,第二段和第三段的二值信号地址一致,为什么第二段无效呢,求解
|
|