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.

[参考译文] EK-TM4C1294XL:更改 TM4C1294的 IP 并重新引导以太网

Guru**** 2482105 points
Other Parts Discussed in Thread: ENERGIA

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/708955/ek-tm4c1294xl-changing-ip-of-tm4c1294-and-rebooting-ethernet

器件型号:EK-TM4C1294XL
主题中讨论的其他器件:Energia

大家好!

我在 TM4C1294上启动了 TCP 服务器。 我想更改以太网的 IP 并使用新 IP 重新启动服务器。 因此、我尝试了以下代码...

<

serial.println ("\n 服务器正在重新启动-1");

server.available ().stop ();
serial.println ("\n 服务器正在重新启动-2");
延迟(100);

Ethernet.begin(mac、ip_arr、dns_arr、gw_arr、mask_arr);

延迟(100);
serial.println ("\n 服务器正在重新启动-3");
server.begin();

>

遗憾的是、该程序滞留在"Ethernet.begin"中。  

是否有任何措施可以使用新 IP 重新启动以太网和 TCP 服务器?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能告诉我您的示例代码来自哪里、以便我可以将您的问题直接发送给正确的人吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Bob:

    我自己编码了代码。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很抱歉、我的问题不清楚。 您是否正在使用 Energia? 如果不是、"server.begin()"函数来自哪里?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Bob:
    由此给您带来的不便、我们深表歉意。 我使用的是 Energia。
    我首先使用设置中的默认 IP、网关和子网初始化以太网服务器。
    从串行端口获取新的 IP、新的 GW 和子网值。 获取 IP、GW、子网和 DNS 的新值后、我将尝试使用新值重新启动以太网连接。

    感谢您的观看!

    以下是我的整个代码:

    //
    //库
    #include
    #include
    #include "inc/hw_memmap.h"
    #include "driverlib/debug.h"
    #include
    #include
    #include "driverlib/pin_map.h"
    #include "driverlib/gpio.h"
    #include "driverlib/sysctl.h"
    #include "driverlib/i2c.h"
    #include "inc/hw_i2c.h"
    #include "inc/hw_types.h"
    #include "xio.h"
    #include "string.h"


    字节 MAC[]={0x00、0x1A、0xB6、0x02、0xF0、 0x80};

    int PortNumber = 1234;
    字节 IP_arr[]={162、98、0、06};
    字节 DNS_ARR[]={162、98、1、1};
    字节 Gw_arr[]={162、98、1、1};
    字节 MASK_ARR[]={255、0、0、0};
    EthernetServer 服务器= EthernetServer (PortNumber);

    // IO 扩展器 PCA9698类将 U1定义为 U7芯片
    XiO tempU[7];//{U1、U2、U3、U4、U5、 U6、U7};

    int IOselect [5][8]{//初始化为零
    {0x00、0x01、0x02、0x03、0x04、0x05、0x06、0x07}、
    {0x10、0x11、0x12、0x13、0x14、0x15、0x16、0x17}、
    {0x20、0x21、0x22、0x23、0x24、0x25、0x26、0x27}、
    {0x30、0x31、0x32、0x33、0x34、0x35、0x36、0x37}、
    {0x40、0x41、0x42、0x43、0x44、0x45、0x46、0x47}、
    };


    void setup(){
    Serial.begin(19200);
    Ethernet.begin(mac、ip_arr、dns_arr、gw_arr、mask_arr);
    server.begin();
    延迟(100);


    int serial_read_data[25];
    int serial_index = 0;
    void get_serial_data (字符串 serial_data)

    unsigned char incomingByte;
    char * SR_data =&serial_data[0];
    字符 str[40];
    //char * tab2 = new char [serial_data.length ()+1];
    字节 IP1 = 0;
    字节 IP2 = 0;
    字节 IP3 = 0;
    字节 ip4 = 0;

    if (serial_data ="show")

    serial.print ("ip =");
    serial.println (ethernet.localip());
    serial.print ("Subnet =");
    serial.println (ethernet.subnetmask ());
    serial.print ("网关=");
    serial.println (ethernet.gatewayip());
    serial.print ("Port =");
    serial.println (PortNumber、DEC);

    否则 if (serial_data ="U")


    serial.println ("\n 服务器正在重新启动-1");
    server.available ().stop ();
    serial.println ("\n 服务器正在重新启动-2");
    延迟(100);

    Ethernet.begin(mac、ip_arr、dns_arr、gw_arr、mask_arr);//STUCKS!!!!!!!!!!



    延迟(100);
    serial.println ("\n 服务器正在重新启动-3");
    server.begin();
    serial.println ("\n 服务器已重新启动...");
    serial.print ("ip =");
    serial.println (ethernet.localip());
    serial.print ("Subnet =");
    serial.println (ethernet.subnetmask ());
    serial.print ("网关=");
    serial.println (ethernet.gatewayip());
    serial.print ("Port =");
    serial.println (PortNumber、DEC);

    其他

    //char serial_data[serial_data.length ()];
    //strcpy (Tab2、serial_data.c_str());
    memset (str、'\0'、sizeof (str));
    strncpy (str、SR_data、3);
    if (strcmp (str、"ip=")=0)

    serial.println ("\n 正在更改!!!");
    IP1 = 100 *(SR_DATA[3]- 0x30)+ 10 *(SR_DATA[4]- 0x30)+(SR_DATA[5]- 0x30);
    IP2 = 100 *(SR_DATA[7]- 0x30)+ 10 *(SR_DATA[8]- 0x30)+(SR_DATA[9]- 0x30);
    IP3 = 100 *(SR_DATA[11]- 0x30)+ 10 *(SR_DATA[12]- 0x30)+(SR_DATA[13]- 0x30);
    IP4 = 100 *(SR_DATA[15]- 0x30)+ 10 *(SR_DATA[16]- 0x30)+(SR_DATA[17]- 0x30);
    serial.println (IP1、DEC);
    serial.println (IP2、DEC);
    serial.println (IP3、DEC);
    serial.println (ip4、DEC);
    ip_arr[0]= IP1;
    ip_arr[1]= IP2;
    ip_arr[2]= IP3;
    ip_arr[3]= ip4;

    否则 if (strcmp (str、"sn="")=0)

    serial.println ("\n 子网更改!");
    IP1 = 100 *(SR_DATA[3]- 0x30)+ 10 *(SR_DATA[4]- 0x30)+(SR_DATA[5]- 0x30);
    IP2 = 100 *(SR_DATA[7]- 0x30)+ 10 *(SR_DATA[8]- 0x30)+(SR_DATA[9]- 0x30);
    IP3 = 100 *(SR_DATA[11]- 0x30)+ 10 *(SR_DATA[12]- 0x30)+(SR_DATA[13]- 0x30);
    IP4 = 100 *(SR_DATA[15]- 0x30)+ 10 *(SR_DATA[16]- 0x30)+(SR_DATA[17]- 0x30);
    serial.println (IP1、DEC);
    serial.println (IP2、DEC);
    serial.println (IP3、DEC);
    serial.println (ip4、DEC);
    MASK_ARR[0]= IP1;
    MASK_ARR[1]= IP2;
    MASK_ARR[2]= IP3;
    MASK_ARR[3]= ip4;

    否则 if (strcmp (str、"gw=")=0)

    serial.println ("\ngw 正在更改!!!");
    IP1 = 100 *(SR_DATA[3]- 0x30)+ 10 *(SR_DATA[4]- 0x30)+(SR_DATA[5]- 0x30);
    IP2 = 100 *(SR_DATA[7]- 0x30)+ 10 *(SR_DATA[8]- 0x30)+(SR_DATA[9]- 0x30);
    IP3 = 100 *(SR_DATA[11]- 0x30)+ 10 *(SR_DATA[12]- 0x30)+(SR_DATA[13]- 0x30);
    IP4 = 100 *(SR_DATA[15]- 0x30)+ 10 *(SR_DATA[16]- 0x30)+(SR_DATA[17]- 0x30);
    serial.println (IP1、DEC);
    serial.println (IP2、DEC);
    serial.println (IP3、DEC);
    serial.println (ip4、DEC);
    gw_arr[0]= IP1;
    gw_arr[1]= IP2;
    gw_arr[2]= IP3;
    gw_arr[3]= ip4;

    其他

    strncpy (str、SR_data、5);
    if (strcmp (str、"Port=")=0)

    serial.println ("\n 端口更改!!!");
    端口号= 10000 *(SR_DATA[5]- 0x30)+ 1000 *(SR_DATA[6]- 0x30)
    + 100 *(SR_DATA[7]- 0x30)+ 10 *(SR_DATA[8]- 0x30)
    +(SR_DATA[9]-0x30);
    serial.println (PortNumber、DEC);





    //int i=0;
    void loop(){

    如果(Serial.Available ()>0){
    //读取传入字节:
    string incomingByte = Serial.readString();


    get_serial_data (incomingByte);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Oguzhan、
    在 E2E 论坛上、我们并不真正支持 TM4C 的 Energia。 现在、"Energia"已添加到标签中、其他一些用户可能会加入进来并提供帮助。 此外、您还可以访问 Energia 支持论坛以获得有关此问题的帮助:
    forum.43oh.com/.../
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的。 感谢你能抽出时间。

    BR、

    奥古扎罕