工具/软件:TI-RTOS
Helio
我在 TI-RTOS 上工作
我想通过以太网发送和接收数据、我使用 TCP 回显示例作为参考、并将其与 UART 代码结合使用。
从 UART 读取数据并通过以太网发送数据成功工作 我想从 UART 读取数据并通过以太网发送数据以及从以太网接收数据并将其写入 UART
代码如下所示
/*
*==== tcpEcho.c ====
*包含 BSD 套接字代码。
*
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
/* NDK BSD 支持*/
#include
/*示例/板头文件*/
#include "Board.h"
#define TCPPACKETSIZE 256
#define NUMTCPWORKERS 3.
字符 charinput[100]={0};
int32_t i32Logindex=0;
/*
*==== tcpWorker ====
*处理 TCP 连接的任务。 可以是多个正在运行的任务
*此函数。
*
空 tcpWorker (UARg arg0、UARg arg1)
{
int32_t i32Clientfd =(int32_t) arg0;
UART_Handle UART;
UART_Params uartParams;
/***** UART 0参数初始化******* /
UART_PARAMS_INIT (uartParams);
uartParams.writeDataMode = UART_DATA_BINARY;
uartParams.readDataMode = UART_DATA_BINARY;
uartParams.readReturnMode = UART_return_full;
uartParams.readEcho = UART_ECHO_OFF;
uartParams.baudrate = 9600;
/********* 打开 UART 0 ********* /
UART = UART_OPEN (Board_UART0、uartParams);
System_printf ("tcpWorker:start clientfd = 0x%x\n"、i32Clientfd);
// while (1)
//{
/***** 读取 UART 0上的数据********* /
UART_READ (UART、charinput、sizeof (charinput));
/***** 通过以太网发送数据******** /
send(i32Clientfd, charinput, sizeof (charinput),0);
//}
}
/*
*==== tcpHandler ====
*创建新任务以处理新的 TCP 连接。
*
空 tcpHandler (UARg arg0、UARg arg1)
{
int32_t i32Status;
int32_t i32Clientfd;
int32_t i32Server;
struct sockaddr_in localAddr;
struct sockaddr_in clientAddr;
int32_t i32optval;
int32_t i32Optlen = sizeof (i32Optval);
socklen_t addrlen = sizeof (clientAddr);
Task_handle taskHandle;
Task_Params taskParams;
ERROR_Block EB;
i32Server =套接字(AF_iNet、SOCK_STREAM、IPPROTO_TCP);
if (i32Server =-1){
System_printf ("错误:未创建套接字。\n");
转到关断;
}
memset (localAddr、0、sizeof (localAddr));
localAddr.Sin_Family = AF_iNet;
localAddr.sin_addr.s_addr = htonl (INADDR_ANY);
localAddr.sin 端口= htons (arg0);
i32Status = bind (i32Server、(struct socaddr *)&localAddr、sizeof (localAddr));
if (i32Status =-1){
System_printf ("错误:绑定失败。\n");
转到关断;
}
i32Status = Listen (i32Server、NUMTCPWORKERS);
if (i32Status =-1){
System_printf ("错误:侦听失败。\n");
转到关断;
}
i32Optval = 1;
if (setsockopt (i32Server、SOL_Socket、SO_KEEPALIVE、&i32Optval、i32Optlen)< 0){
System_printf ("错误:setsockopt 失败\n");
转到关断;
}
while ((i32Clientfd =
接受(i32Server、(struct sockaddr *)&clientAddr、&addrlen)!=-1){
System_printf ("tcpHandler:创建线程客户机 fd =%d\n"、i32Clientfd);
/* Init the Error_Block */
ERROR_INIT (&EB);
/*初始化默认值并设置参数。 *
Task_Params_init (&taskParams);
taskParams.arg0 =(UArg)i32Clientfd;
taskParams.STACKSIZE = 1280;
taskHandle = Task_create ((Task_FuncPtr) tcpWorker、&taskParams、&EB);
if (taskHandle == NULL){
System_printf ("错误:创建新任务失败\n");
close (i32Clientfd);
}
/* addrlen 是一个值结果参数,必须重置为下一个接受呼叫*/
addrlen = sizeof (clientAddr);
}
System_printf ("错误:接受失败。\n");
关断:
if (i32Server >0){
Close (i32Server);
}
}
/*
*==== main ====
*
int main (空)
{
/*呼叫板初始化函数*/
Board_initGeneral();
Board_initGPIO();
Board_initEMAC();
Board_initUART();
system_printf ("启动 TCP 回显示例\n 系统提供程序设置为"
"SysMin。 停止目标以查看中的任何 SysMin 内容"
" ROV.\n");
/* SysMin 仅在您调用 flush 或 exit 时才会打印到控制台*/
system_flush();
/*启动 BIOS */
BIOS_start();
返回(0);
}
请提供一些 建议
谢谢你