我的要求是建立 WiFi 到 UART 桥接器。 我使用了 TCP IP 套接字 SDK 代码、并在两个不同的任务中使用 FreeRTOS 对其进行了修改、如下所示:
//主代码中添加的部分代码
OSI_TaskCreate (UART_TO_WiFi、"WiFi_Tx"、\
OSI_STACK_SIZE、NULL、3、NULL);
/*为从 WiFi 到 UART 的数据创建任务*/
OSI_TaskCreate (WiFi_to_uart、"WiFi_Rx"、\
OSI_STACK_SIZE、NULL、2、NULL);
/*启动调度程序*/
OSI_START();
//uart_to_WiFi 代码
静态 void uart_to_WiFi (void *pvParameters)
{
/*局部变量*/
字符 TX_buffer [1024];
INT 索引= 0;
字符;
while (1)
{
/*清除数据*/
memset (TX_BUFFER、'\0'、sizeof (TX_BUFFER));
/*从 UART 读取数据*/
for (;;)
{
chr = UartGetChar();
如果(CHR ='\n')
{
tx_buffer[index]= chr;
索引= 0;
中断;
}
方案
{
tx_buffer[index]= chr;
索引++;
}
}
如果(strlen (TX_BUFFER)> 0)
{
/*通过 WiFi 发送数据*/
int err = sl_Send (sock、TX_buffer、strlen (TX_buffer)、0);
if (err < 0)
{
uart_print ("发送数据时出错\n\r\n);
}
}
/*任务延迟*/
OSI_SLEEP (12);
}
}
//WiFi_to_uart 代码
静态空 WiFi_to_uart (void * pvParameters)
{
/*局部变量*/
字符 rx_buffer [1024];
INT 索引= 0;
while (1)
{
/*清除数据*/
memset (rx_Buffer、'\0'、sizeof (rx_Buffer));
/*通过 WIFI 接收数据*/
int err = sl_Recv (sock、Rx_buffer、sizeof (Rx_buffer)、0);
if (err > 0)
{
/*将数据写入 UART */
while (index < strlen (rx_buffer))
{
UartPutChar (rx_buffer[index]);
索引++;
}
索引= 0;
}
/*任务延迟*/
OSI_SLEEP (15);
}
}
问题是数据通过 WiFi 传输,但第一次 recv()函数不工作。 因此、数据不匹配、即2个 Tx 数据是1Rx 数据、第3个 Tx 数据是2个 Rx 数据、以此类推。
能否说明问题出在哪里?
谢谢。
德瓦哈帕