This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] RTOS:RTOS/TM4C1294NCPDT:具有 TCP/IP 问题的 UART

Guru**** 2330830 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/592846/rtos-rtos-tm4c1294ncpdt-uart-with-tcp-ip-issue

Thread 中讨论的其他器件:SYSBIOS

工具/软件: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);

请提供一些 建议

谢谢你

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你有什么问题?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好

    我需要 UART 和 TCP/IP 之间的双向通信