Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Exception NodeMCU在使用Strtok()解析字符串时重新启动_Exception_Arduino_Esp8266_Strtok_Nodemcu - Fatal编程技术网

Exception NodeMCU在使用Strtok()解析字符串时重新启动

Exception NodeMCU在使用Strtok()解析字符串时重新启动,exception,arduino,esp8266,strtok,nodemcu,Exception,Arduino,Esp8266,Strtok,Nodemcu,我正在尝试编写一个代码,解析从一个反相器接收的字符串,用逗号“,”分隔,我正在使用strtok()。每当控制器到达解析例程的末尾时,它都会引发异常并重新启动ESP8266 这是我运行串行监视器时得到的结果: .........Connected IP address: 192.168.0.103 ESP8266_2512899799 Connecting to broker mqtt.thingspeak.com MQTT Broker Conne

我正在尝试编写一个代码,解析从一个反相器接收的字符串,用逗号“,”分隔,我正在使用strtok()。每当控制器到达解析例程的末尾时,它都会引发异常并重新启动ESP8266

这是我运行串行监视器时得到的结果:


    .........Connected
    IP address: 192.168.0.103

    ESP8266_2512899799

    Connecting to broker mqtt.thingspeak.com

    MQTT Broker Connected

    Sending Command: ^P005GSX


    ^D1062521,498,2521,498,0756,0667,015,483,000,000,000,000,061,036,000,000,0000,0000,0000,0000,1,0,0,1,0,0,1,0⸮

    I am in updateNewData

    2521,498,2521,498,0756,0667,015,483,000,000,000,000,061,036,000,000,0000,0000,0000,0000,1,0,0,1,0,0,1,0

    V_grid (V): 2521
    0F_grid (Hz): 498
    1V_out (V): 2521
    2F_out (Hz): 498
    3KVA_out: 756
    4KW_out: 667
    5load_percentage: 15
    6V_bat (V): 483
    7V_bat_SCC (V): 0
    8V_bat_SCC2 (V): 0
    9bat_dis_cur (A): 0
    10bat_cha_cur (A): 0
    11bat_cap: 61
    12HS_temp: 36
    13MPPT1_temp: 0
    14MPPT2_temp: 0
    15PV1_watts: 0
    16PV2_watts: 0
    17V_PV1: 0
    18V_PV2: 0
    19s_val_conf_state: 1
    20MPPT1_status: 0
    21MPPT2_status: 0
    22load_status: 1
    23bat_pow_dir: 0
    24DCAC_pow_dir: 0
    25line_pow_dir: 1
    26power_direction: 0
    27
    Exception (28):
    epc1=0x40209912 epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000000 depc=0x00000000

    >>>stack>>>

    ctx: cont
    sp: 3ffffcf0 end: 3fffffc0 offset: 01a0
    3ffffe90:  00000000 00000001 3ffe8304 40203788  
    3ffffea0:  3fffff56 3ffee60a 3ffee990 0000001b  
    3ffffeb0:  3fffff56 0000001b 3ffee990 0000001b  
    3ffffec0:  00000000 3ffee60a 3ffee990 40209a74  
    3ffffed0:  3fffff56 3ffee60a 3ffee990 4020745c  
    3ffffee0:  3fffff56 3ffee60a 3ffee990 40201103  
    3ffffef0:  31323532 38393400 32353200 39340031  
    3fffff00:  37300038 30003635 00373636 00353130  
    3fffff10:  00333834 00303030 00303030 00303030  
    3fffff20:  00303030 00313630 00363330 00303030  
    3fffff30:  00303030 30303030 30303000 30300030  
    3fffff40:  30003030 00303030 00300031 00310030  
    3fffff50:  00300030 00300031 4010054c 40203a25  
    3fffff60:  0000001c 00000036 3ffee788 40203ab0  
    3fffff70:  3fffdad0 00000000 3ffee990 3ffeeab0  
    3fffff80:  3fffdad0 00000000 3ffee7a0 4020115e  
    3fffff90:  3fffdad0 00000000 3ffee82c 402013fe  
    3fffffa0:  3fffdad0 00000000 3ffeea80 402043d0  
    3fffffb0:  feefeffe feefeffe 3ffe8544 40100bcd  
    <<<stack<<<

     ets Jan  8 2013,rst cause:2, boot mode:(3,6)

    load 0x4010f000, len 1384, room 16 
    tail 8
    chksum 0x2d
    csum 0x2d
    v8b899c12
    ~ld
    Connecting to Freedom
    .....Connected
    IP address: 192.168.0.103
    ESP8266_6698254931
    Connecting to broker mqtt.thingspeak.com
    MQTT Broker Connected

我知道这可能是由于程序试图打印最后一个空值造成的,但我不知道如何解决这个问题。我使用arduino Uno开发了代码,同样的代码工作得很好。 我检查了没有这个解析函数的程序,代码在ESP8266上运行良好,它告诉我问题在于这个函数

这是导致问题的我的函数:


    char receivedChars[] = "^D1062399,502,2399,502,1703,1673,034,482,000,000,000,000,060,038,000,000,0000,0000,0000,0000,0,0,0,1,0,0,1,0je";

    unsigned int para_var[29];

    void parsedata()
    {
      char* valPosition; 
      char temp1[103];
      int i = 0; 

      strncpy(temp1, &receivedChars[5],103);
      Serial.println(temp1);
      valPosition = strtok(temp1,",");
      para_var[i] = atoi(valPosition); 

      while (valPosition != NULL)
       {
          Serial.print(parameters[i]); 
          Serial.print(": "); 
          Serial.println(para_var[i]);
          Serial.print(i++); 
          valPosition = strtok(NULL, ",");
          para_var[i] = atoi(valPosition); 
       }
       Serial.println("I am in parseData");
    }

我不是一个程序员,我只是从网络上的资源中学习,并尝试构建一些东西,但我对这段代码不了解。我将非常感激能得到的一切帮助

谢谢

PS:我正在使用以下库

ESP8266WiFi.h
PubSubClient.h
SoftwareSerial.h

首先在atoi中使用valPosition,然后在while条件中测试它是否为NULL。do
para_var[i]=atoi(valPosition)作为
中的第一个,而
哦,伙计,非常感谢你。这就解决了问题。非常感谢你花时间阅读这篇文章并帮助我。我永远无法解决这个问题。非常感谢你。
ESP8266WiFi.h
PubSubClient.h
SoftwareSerial.h