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/TM4C1294NCPDT:将 TM4C1294配置为客户端的 TCP 套接字、传输停止

Guru**** 2466550 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/662602/rtos-tm4c1294ncpdt-tcp-socket-with-tm4c1294-configured-as-a-client-transmission-stops

器件型号:TM4C1294NCPDT

工具/软件:TI-RTOS

您好!

我正在尝试将以太网通信添加到我的现有项目中。 我在 TI-RTOS 中使用 TCP IP 堆栈。 当我的 MCU 配置为服务器并且我的远程设备是客户端通信时、通信工作正常。 我以3kHz 的速率流式传输大约24个字节。 我正在尝试将 MCU 用作客户端来实现相反的情况。 但是、在几秒钟的传输停止后、我能够建立连接。 我使用了 Wireshark 来查看传输通信。 我始终使 TCP Window Full (TCP 窗口已满)、TCP 重新传输几次、最后以 TCP 零通信结束。 TCP 客户端(MCU)停止传输,即使 send()命令位于 tcpHandler()任务中,while (1) loop 和信标或 ctr1变量(取决于我释放 loop()的方式)正由中断设置。 我使用了登录信息来检查它。

我在下面附上我的代码片段。 我当前正在从计时器中断触发 tcp_task (我尝试使用信标和虚拟控制变量来触发任务循环)。  

空 tcpHandler (UARg arg0、UARg arg1)// TCP 任务
{
套接字 lSocket;
struct saddr_in sLocalAddr;

fdOpenSession (TaskSelf());

lSocket = socket (AF_iNet、SOCK_STREAM、IPPROTO_TCP);
if (lSocket < 0){
System_printf ("tcpHandler:套接字失败\n");
Task_exit();
返回;
}

memset ((char *)&sLocalAddr、0、sizeof (sLocalAddr));
sLocalAddr.Sin_Family = AF_iNet;
sLocalAddr.sin addr.s_addr = inet_addr ("18.62.20.135");//htonl (INADDR_ANY);
sLocalAddr.Sin_port = htons (5000);



System_printf ("已连接!");
TimerDisable (TIMER2_base、timer_A); //启用计时器2
system_flush();

while (connect (lSocket、(struct sockaddr *)和 sLocalAddr、sizeof (sLocalAddr))< 0){
SysCtlDelay (g_ui32SysClock/200);
}


int nbytes = 3*8;
TimerEnable (TIMER2_base、TIMER_A); //启用计时器2
while (true){
if (ctr1==1){
// RES=Semaphore_pend (tcp_semaphore、BIOS_wait_forever);
LOG_Info1 ("TOGGLED2 [%u]次"、切换计数); //将切换计数发送到 UIA
char temp[24]=data_to_transmit;
SEND (lSocket、(char *)&temp、nbytes、0);
ctr1=0;
}
}



void ISRTimer(void){

TimerIntClear (TIMER2_base、TIMER_TINA_TIMEOUT); //必须清除计时器的计时器标志
log_info1 ("切换[%u]次"、切换计数); //将切换计数发送到 UIA
切换计数+= 1; //跟踪#togsnoges
// semaphore_post (tcp_semaphore);
ctr1=1;
} 



我还尝试将静态 IP 分配给 PC 和 Tiva、并直接与交换机连接。 结果相同。

提前感谢。

CCS7.3
TI-RTOS 2.16.1.14
XDC 3.32.0.06

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

    您是否检查了器件的整体运行状况? 例如、ROV 中的任务和系统堆栈使用情况如何? 此外、tcpHandler 的优先级是多少? 由于您没有使用信标、因此它正在占用其他同等和较低优先级的任务。

    Todd
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这是否得到了解决? 如果是、我想关闭这个。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢你。 很抱歉不承认这一点。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    没问题。