1 2 Previous Next 20 Replies Latest reply on Aug 22, 2015 12:33 AM by rohitsay89

    ** B0100000063f694 error

    conor100

      Hi guys,

       

      I am hoping that you could perhaps help me with an ** B0100000063f694 error in the arduino console.

       

      I am learning how to stream some sensor data from the galileo to the Xively cloud website. I am following a tutorial designed for arduino available below

       

      https://xively.com/dev/tutorials/arduino_wi-fi/

       

      I set up the little circuit with a photcell and LED, downloaded the Xively libraries and uploaded the code at the bottom of the page. It connects to the wifi but it crashes somewhere after line 72.

       

      I'd appreciate any advice or insight into what is causing this.


      Many thanks





      c.jpg



      /*
      ##Xively WiFi Sensor Tutorial##
      This sketch is designed to take sensors (from photocell) and upload the values to Xively
      at consistant intervals. At the same time it gets a setable value from Xively to adjust the brigthness
      of an LED. This sketch is reusable and can be adapted for use with many different sensors.
      Derived from Xively Ardino Sensor Client by Sam Mulube.
      
      By Calum Barnes 3-4-2013
      BSD 3-Clause License - [http://opensource.org/licenses/BSD-3-Clause]
      Copyright (c) 2013 Calum Barnes
      */
      #include <SPI.h>
      #include <WiFi.h>
      #include <HttpClient.h>
      #include <Xively.h>
      
      char ssid[] = "galileowifi"; //  your network SSID (name)
      char pass[] = "0858232116";    // your network password (use for WPA, or use as key for WEP)
      int keyIndex = 0;            // your network key Index number (needed only for WEP)
      
      int status = WL_IDLE_STATUS;
      
      // Your Xively key to let you upload data
      char xivelyKey[] = "aBzfpTFv48FAZ2KYYoz9LN9kXTdsJYeuMhJfVfSCYodJKkmY";
      //your xively feed ID
      #define xivelyFeed 1896114380
      //datastreams
      char sensorID[] = "Light";
      char ledID[] = "LED";
      
      // Analog pin which we're monitoring (0 and 1 are used by the Ethernet shield)
      #define sensorPin A2
      //led connected pin
      #define ledPin 9
      
      // Define the strings for our datastream IDs
      XivelyDatastream datastreams[] = {
        XivelyDatastream(sensorID, strlen(sensorID), DATASTREAM_FLOAT),
        XivelyDatastream(ledID, strlen(ledID), DATASTREAM_FLOAT),
      };
      // Finally, wrap the datastreams into a feed
      XivelyFeed feed(xivelyFeed, datastreams, 2 /* number of datastreams */);
      
      WiFiClient client;
      XivelyClient xivelyclient(client);
      
      void printWifiStatus() {
        // print the SSID of the network you're attached to:
        Serial.print("SSID: ");
        Serial.println(WiFi.SSID());
      
        // print your WiFi shield's IP address:
        IPAddress ip = WiFi.localIP();
        Serial.print("IP Address: ");
        Serial.println(ip);
      
        // print the received signal strength:
        long rssi = WiFi.RSSI();
        Serial.print("signal strength (RSSI):");
        Serial.print(rssi);
        Serial.println(" dBm \n");
      }
      void setup() {
        // put your setup code here, to run once:
        Serial.begin(9600);
      
        //pin setup
        pinMode(sensorPin, INPUT);
        pinMode(ledPin, OUTPUT);
      
        Serial.println("Starting single datastream upload to Xively...");
        Serial.println();
      
        // attempt to connect to Wifi network:
        while ( status != WL_CONNECTED) {
          Serial.print("Attempting to connect to SSID: ");
          Serial.println(ssid);
          status = WiFi.begin(ssid, keyIndex, pass);
          // wait 10 seconds for connection:
          delay(10000);
        }
        Serial.println("Connected to wifi");
        printWifiStatus();
      }
      
      void loop() {
        //adjust LED level. set from Xively
        int getReturn = xivelyclient.get(feed, xivelyKey);    //get data from xively
        if(getReturn > 0){
          Serial.println("LED Datastream");
          Serial.println(feed[1]);
        }else Serial.println("HTTP Error");
      
        //write value to LED - change brightness
        int level = feed[1].getFloat();
        if(level < 0){
          level = 0;
        }else if(level > 255){
          level = 255;
        }
        //actually write the value
        digitalWrite(ledPin, level);
      
      ///////////////////////////////////////////////////////
        //read sensor values
        int sensorValue = analogRead(sensorPin);
        datastreams[0].setFloat(sensorValue);
      
        //print the sensor valye
        Serial.print("Read sensor value ");
        Serial.println(datastreams[0].getFloat());
      
        //send value to xively
        Serial.println("Uploading it to Xively");
        int ret = xivelyclient.put(feed, xivelyKey);
        //return message
        Serial.print("xivelyclient.put returned ");
        Serial.println(ret);
        Serial.println("");
      
      
        //delay between calls
        delay(15000);
      }
      
        • 1. Re: ** B0100000063f694 error
          Clayton Hofrock

          I don't think the string "** B0100000063f694" is an error. I think this is printed out for every sketch. I had thought it was printed out when the sketch started, but it does not seem to be doing that for your sketch.

           

          So, if we ignore that, then it looks like your sketch is making it all the way through the setup function, that is good. It appears that the Wifi is connected, that is also good. The first thing it does in the loop function is to connect to Xlively. To me, it looks like this might be your problem?

           

          I would add a print statement before and after the function call to see if it is make it is actually getting to there, and if the function ever returns.

          • 2. Re: ** B0100000063f694 error
            LarsR

            Oh I do believe that ** B0100000063f694 is indeed a crash error.

             

            Funny enough, a 10 second Google search led me right back to here:

            https://communities.intel.com/message/211555#211555

             

            Sounds to me like you've been hit by the exact same bug that AlexT documented already.

            Try to implement his suggestions and let us know if it works out for you.

            • 3. Re: ** B0100000063f694 error
              mechalas

              This appears to be a bug in the Galileo core libraries, specifically in Stream.cpp from arduino-1.5.3/hardware/arduino/x86/cores/arduino. Inside the Xively library, the get() function calls:

               

              http.find(const char *string)

               

              Which inherits from the Client class, which inherits from Stream. The Galileo libraries have overloads for find() that are not implemented correctly in Stream.cpp:

               

              // find returns true if the target string is found
              bool  Stream::find(char *target)
              {
                return findUntil(target, NULL);
              }
              
              // reads data from the stream until the target string of given length is found
              // returns true if target string is found, false if timed out
              bool Stream::find(char *target, size_t length)
              {
                return findUntil(target, length, NULL, 0);
              }
              
              
              

               

              Those NULLs need to be empty strings, "", because findUntil() does this:

               

              bool  Stream::findUntil(char *target, char *terminator)
              {
                return findUntil(target, strlen(target), terminator, strlen(terminator));
              }
              
              


              Calling strlen() on a NULL pointer is considered hazardous unless you like segmentation faults. To fix this, change the above find() overloads to:


              // find returns true if the target string is found
              bool  Stream::find(char *target)
              {
                return findUntil(target, "");
              }
              
              // reads data from the stream until the target string of given length is found
              // returns true if target string is found, false if timed out
              bool Stream::find(char *target, size_t length)
              {
                return findUntil(target, length, "", 0);
              }
              
              

               

              and the crashes will go away.

              • 4. Re: ** B0100000063f694 error
                rwaldron

                I'm not using any libraries, this is my sketch:

                 

                void setup() {

                }

                void loop() {

                }

                 

                And the only thing that happens is

                 

                ** B0100000063f694

                 

                In the serial monitor.

                • 5. Re: ** B0100000063f694 error
                  brian722

                  do you have solved the question? I have the same question. can you help me how to solve the question? I have trie some ways (AlexT_Intel  method), but I can't solve it.

                  • 6. Re: ** B0100000063f694 error
                    AlexT_Intel

                    have you tried the solution mechalas has provided above? That looks very plausible to me.

                    • 7. Re: ** B0100000063f694 error
                      brian722

                      I try your method, the network have been waiting, nothing respond.  can you tell me why I encounter the block situaiton?

                      • 8. Re: ** B0100000063f694 error
                        AlexT_Intel

                        Well, it's hard to say from this brief description, but let's see first if at least that original problem with sketch crashing is fixed now. Is it? It looks to me like yes, if it's not crashing but just waiting for something. If that's teh case - I strongly recommend you to start a new thread on this, as it's not directly related to the problem discussed in this one.

                        • 9. Re: ** B0100000063f694 error
                          anhtuanhoang

                          dear everyone,

                          i also have this error code B0100000063f694 with my galileo gen 2, so can anyone have solve it aldready, please help me to solve it.

                          i don't have wifi, i only use serial and sd card.

                          • 10. Re: ** B0100000063f694 error
                            AlexT_Intel

                            What do you mean by "I have this error code"? Does your sketch actually crash or you just see this string in the Serial Monitor? If the former - please attach your sketch and describe the exact sequence of steps to reproduce your error - that will help people help you. Right now it's a bit too generic to be able to advise anything meaningful. In the past this error was caused by specific code path in Ethernet and WiFi libraries, so if you don't use either of them, your case is different.

                            • 11. Re: ** B0100000063f694 error
                              tingxuan

                              Hi all,

                               

                              i also see the crash error **B0100000063f694 in my serial console. I am only using the softwareserial library.

                               

                              below is my sketch for the setup and loop.

                               

                              //Init

                              void setup() 

                              {

                                delay(5000);

                                Serial.begin(9600);

                                delay(5000);

                                Serial.println("13.56MHz SM130 Reader(s) Initialized");

                                Serial.println("Place Tags within Antenna Field and Press 'S' followed by Enter");

                               

                               

                              }

                              //Main

                              void loop()                

                              {

                                 // check for command from serial port

                                if(Serial.available() > 0)

                                {

                                  switch(Serial.read())

                                  {

                                  case 's':

                                  case 'S':     

                                    //rfid = rfid1;

                                    seekingMode = 1;

                                    rfid1.begin(19200);

                                    onAntennaPower1();

                                    tagsString1 = seeking1();

                                    offAntennaPower1();

                                    rfid1.end();

                                   

                                    //rfid = rfid2;

                                    seekingMode = 1;

                                    rfid2.begin(19200);

                                    onAntennaPower2();    

                                    tagsString2 = seeking2();

                                    offAntennaPower2();

                                    rfid2.end();

                                   

                                    Serial.println(tagsString1);

                                    Serial.println(tagsString2);

                                    tagsString1 = "";

                                    tagsString2 = "";

                                   

                                    break;

                                  case 'x':

                                  case 'X':

                                    //rfid = rfid1;

                                    rfid1.begin(19200);

                                    rfidReset1();

                                    rfid1.end();

                                   

                                    //rfid = rfid2;

                                    rfid2.begin(19200);

                                    rfidReset2();

                                    rfid2.end();

                                    break;

                                  default:

                                    Serial.println("Invalid Command");

                                  }

                                }

                              }

                              • 12. Re: ** B0100000063f694 error
                                mechalas

                                When you see **B0100000063f694 in your console, that is a generic crash. The reasons are varied, but a typical explanation would be a segmentation fault for the typical reasons in UNIX, such as referencing NULL pointers and so on.


                                The original poster in this thread had a specific problem that was traced to a bug in the WiFi library. Without seeing all of your sketch, or knowing when your program crashes, it's anyone's guess as to what is causing yours to crash. Just looking at snippets of your sketch which are calling other subroutines that you haven't included is only minimally helpful. We really need more information to debug it.


                                When does your program crash? Right away? After it prints to the console? Before? When you hit X? Or S? Both? Before you get that far?

                                • 13. Re: ** B0100000063f694 error
                                  tingxuan

                                  hi mechalas,

                                   

                                  the program crashes as soon as i open the serial console, so i assume that something went wrong before the void loop() hence i did not include the rest of my coding.

                                  • 14. Re: ** B0100000063f694 error
                                    mechalas

                                    Whenever you have a situation like this, where the program is crashing instantly before the setup() loop is even called, that means that the crash has to occur somewhere in the declarations. Specifically, in the object creation, since that's the only place where code is really being executed. In your case, these two lines are causing the crash:

                                     

                                    SoftwareSerial rfid1(7, 8);

                                    SoftwareSerial rfid2(5, 6);

                                     

                                    If you write a sketch that does nothing but initialize a SoftwareSerial object like this, it causes a crash.


                                    SoftwareSerial only works on pins 2/3 for Galileo 2 boards and does not work at all on Galileo 1. The original library as written has a lot of AVR code in it in order to obtain the performance it needs, and the Galileo 1 board does not have the I/O speed to do it. Galileo 2 has much faster I/O but on pins 2 and 3 only, hence the restriction.

                                     

                                    Here's the souce code for the constructor in the SoftwareSerial library for x86:

                                     

                                    SoftwareSerial::SoftwareSerial(uint8_t receivePin, uint8_t transmitPin, bool inverse_logic /* = false */) :

                                      _tty(LINUX_SOFTSERIAL_TTY_OBJ)

                                      // If LINUX_SOFTSERIAL_TTY_OBJ is not defined, SoftwareSerial is unsupported on this platform variant

                                    {

                                      // This SoftwareSerial implementation supports pins 2/3 only

                                      assert(receivePin == 2 && transmitPin == 3);

                                     

                                     

                                      // This SoftwareSerial implementation supports non-inverted logic only

                                      assert(!inverse_logic);

                                    }

                                     

                                    So your application, which requires two software serial ports, is not going to work as-is on Galileo since only one is available to you.

                                    1 2 Previous Next