主题中讨论的其他器件:CC3200
我的要求是建立 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 数据、以此类推。
此外、套接字功能如下所示:
void socket_connect()
{
/*套接字变量*/
Int iStatus;
SlSockAddrIn_t sAddr;
int iAddrSize;
/*将值分配给变量*/
sAddr.sin_family = SL_AF_INET;
sAddr.sin_port = sl_Htons ((unsigned short) g_uiPortNum);
sAddr.sin_addr.s_addr = sl_Htonl ((unsigned int) g_ulDestinationIp);
iAddrSize = sizeof (SlSockAddrIn_t);
while (1)
{
/*套接字创建*/
SOCk = SL_Socket (SL_AF_INET、SL_SOCK_STREAM、0);
if (sock < 0)
{
uart_print ("套接字未创建\r\n ");
}
方案
{
uart_print ("套接已创建\r\n ");
}
/*套接字连接*/
iStatus = sl_Connect (sock、(SlSockAddr_t *)&sAddr、iAddrSize);
if (iStatus < 0)
{
uart_print ("套接字已断开连接... \r\n");
}
方案
{
uart_print ("套接字已成功连接\r\n ");
/*成功创建插槽时显示绿色 LED */
GPIO_IF_LedOn (MCU_GREEN_LED_GPIO);
中断;
}
}
}
上面,我已经尝试了非阻塞的方法,客户端连接到 WiFi 和套接字,但在发送功能期间,我收到错误代码为-1
能否说明问题出在哪里?
谢谢。
德瓦哈帕