Pages: [1]   Go Down
Author Topic: "AWT-EventQueue-0" java.lang.StackOverflowError  (Read 3355 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 9
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hey People,

started making some real progress on my project and then compiling it I get:

Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
      at java.util.Stack.push(Stack.java:67)
      at com.oroinc.text.regex.Perl5Matcher._pushState(Perl5Matcher.java)
      at com.oroinc.text.regex.Perl5Matcher._pushState(Perl5Matcher.java)
      at com.oroinc.text.regex.Perl5Matcher._pushState(Perl5Matcher.java)


where the last line occurs about 100 times  :smiley

This is an arduino/processing problem, but I dont know why! Ive tried remove the *.o files and retrying without any luck.

Building any arduino example works, but my sketch dont.

Is there a limit to the size of a *.pde file it can process? Mines 437 lines.

Oh yeh, this is version 17.

Thanks,
Ryan
Logged

Seattle, WA USA
Offline Offline
Brattain Member
*****
Karma: 601
Posts: 48543
Seattle, WA USA
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Stacks are used for many things by compilers. Function arguments are pushed onto a stack, then popped off the stack by the called function. Return addresses are pushed onto a stack, then popped off as the functions return.

Having a function call itself can generate a stack overflow, if there is no way to terminate the call. However, this is generally a run-time issue, not a compile-time issue.

Without seeing your code, there is no way to guess what the problem is. Can you post it?

437 lines of code may be a lot of code, or it might not. It all depends on what the code is doing.
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 9
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

By the way Im using the asynclabs Wishield Library
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 9
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

#include "WiServer.h"
#include <EEPROM.h>
#include <Wire.h>

#define enableWifi 0

#define TRUE 1
#define FALSE 0
#define on 1
#define off 0

#define I2C_Write(a) (a&0x0xFEU)
#define I2C_Read(a) (a|0x01U)

#define MCP9802  72U
#define MCP9802_R 0b10010001
#define MCP9802_W 0b10010000


#define M41T81_R 0b11010001
#define M41T81_W 0b11010000

#define ledPin 9

boolean bLed = on;

#if enableWifi == TRUE
// Wireless configuration parameters ----------------------------------------

#define WIRELESS_MODE_INFRA      1
#define WIRELESS_MODE_ADHOC      2

unsigned char local_ip[] = {192,168,0,10};      // IP address of WiShield
unsigned char gateway_ip[] = {192,168,0,1};      // router or gateway IP address
unsigned char subnet_mask[] = {255,255,255,0};      // subnet mask for the local network
const prog_char ssid[] PROGMEM = {"thegrannybashers"};            // max 32 bytes

unsigned char serialBufIdx = 0U;
#define serialBufMax sizeof(serialBuf)

unsigned char security_type = 2;      // 0 - open; 1 - WEP; 2 - WPA; 3 - WPA2

// WPA/WPA2 passphrase
const prog_char security_passphrase[] PROGMEM = {"QSPELQJP"};      // max 64 characters

// WEP 128-bit keys
// sample HEX keys
prog_uchar wep_keys[] PROGMEM = {      0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d,      // Key 0
                                                      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,      0x00,      // Key 1
                                                      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,      0x00,      // Key 2
                                                      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,      0x00      // Key 3
                                                };

// setup the wireless mode
// infrastructure - connect to AP
// adhoc - connect to another WiFi device
unsigned char wireless_mode = WIRELESS_MODE_INFRA;

unsigned char ssid_len;
unsigned char security_passphrase_len;
#endif

/* Meter declarations */
unsigned int impCount = 0U;

unsigned char kwhTotalDay = 0U;

/* Cost of KW-Hr */
#define penceKWH 12U

/* How many pulses to one KWH */
#define impPerKWH 5U

/* How many days to cache in eeprom */
#define numDaysCache 30U

unsigned char eepromIdx = 0U;

#if enableWifi == TRUE
boolean processHTMLReq ( char* URL );
#endif

void processBlip ( void );

void resetDevice( void );

boolean getTemperature ( void );

boolean getTime ( void );

#if enableWifi == TRUE
void serialPrintEnv ( void )
{
          Serial.print("\nWifi-Status:");
          
          Serial.print("\nLocal Ip: ");
          Serial.print(local_ip[0], DEC);
          Serial.print(".");
          Serial.print(local_ip[1], DEC);
          Serial.print(".");
          Serial.print(local_ip[2], DEC);
          Serial.print(".");
          Serial.print(local_ip[3], DEC);

          Serial.print("\nGateway Ip: ");
          Serial.print(gateway_ip[0], DEC);
          Serial.print(".");
          Serial.print(gateway_ip[1], DEC);
          Serial.print(".");
          Serial.print(gateway_ip[2], DEC);
          Serial.print(".");
          Serial.print(gateway_ip[3], DEC);
          
          Serial.print("\nSubnet Ip: ");
          Serial.print(subnet_mask[0], DEC);
          Serial.print(".");
          Serial.print(subnet_mask[1], DEC);
          Serial.print(".");
          Serial.print(subnet_mask[2], DEC);
          Serial.print(".");
          Serial.print(subnet_mask[3], DEC);
          
          Serial.print("\nSSID: ");
          Serial.print(&ssid[0]);
          
          Serial.print(", Passphrase: ");
          Serial.print(&security_passphrase[0]);

          Serial.print(", SECURITY-");
          switch (security_type)
          {
            case 0:
              Serial.print("OPEN");
              break;
            case 1:
              Serial.print("WEP");
              break;
            case 2:
              Serial.print("WPA");
              break;
            case 3:
              Serial.print("WPA2");
              break;
            defualt:
              Serial.print("UNKOWN");
              break;
          }
          
          Serial.print("\n\n");
}
#endif

void resetDevice ( void )
{
  unsigned char i = 0U;
  
  /* Reset eeprom values */
  for(i=0U;i<=numDaysCache;i++)
  {
    EEPROM.write(i,0U);
  }
  
  EEPROM.write(255U,0);
  
  impCount = 0U;
  kwhTotalDay = 0U;
}

void processBlip ( void )
{
  impCount = impCount + 1U;

  if ( impCount >= impPerKWH )
  {
    impCount = 0U;
    
    /* Increment totalKWH */
    kwhTotalDay = kwhTotalDay + 1U;
    EEPROM.write(eepromIdx,kwhTotalDay);
  }

}

boolean getTime ( void )
{
  Wire.beginTransmission(M41T81_R);
  Wire.send(0x02);
  Wire.endTransmission();
  
  Wire.requestFrom(M41T81_R,1);
  
  while(Wire.available())
  {
    Serial.println(Wire.receive(),DEC);
  }
  
  return false;
}

boolean getTemperature ( void )
{
  unsigned char tempVal = 0;
  unsigned char tempRead1 = 0U;
  unsigned char tempRead2 = 0U;
  boolean tempNegative = false;
  bReturnVal=false;
  
  /* Begin transmission to MCP9800X */
  Wire.beginTransmission((int)MCP9802_R);
  
  /* Request temperature register */
  Wire.send(0x00);
  
  Wire.endTransmission();

  Wire.requestFrom((int)MCP9802_R,2);
  
    
  if (Wire.available() > 0 )
  {
    Serial.println("Data available");
  }
  else
  {
    Serial.println("NO data available");
  }
  
  if(Wire.available())
  {
    tempRead1 = (unsigned char)Wire.receive();

    if(Wire.available())
    {
      tempRead2 = Wire.receive();
      
      bReturnVal=true;
    }

  }

  
  if (tempRead2 & 0b10000000)
  {
    tempNegative = true;
  }
  
  tempVal = (tempRead2 & 0b10000000) >> 7;
  
  tempVal = (tempRead1 << 1) | tempVal;
  
  Serial.print("Temperature: ");
  if (tempNegative)
  {
    Serial.print("-");
  }
  
  Serial.print(tempVal,DEC);
  Serial.println("");
  
  return bReturnVal;
}
void setup()
{
  bInitStatus=true;
  
  Serial.begin(9600);
#if enableWifi == TRUE
  Serial.println("Initializing Wifi");
  WiServer.init(processHTMLReq);
#else
  Serial.println("NO Wifi enabled");
#endif

  Serial.println("Retrieving values from eeprom");
  eepromIdx = EEPROM.read(255);
  kwhTotalDay = EEPROM.read(eepromIdx);
  
  Serial.println("Setting up Phototransistor");
#if 0
  pinMode(3, INPUT);
  digitalWrite(3, HIGH);

  pinMode(4, OUTPUT);
  digitalWrite(4, HIGH);
  
  pinMode(5, INPUT);
  digitalWrite(5, LOW);
#endif

  Serial.println("connecting to I2C bus");  
  
  
  Serial.println("Retrieving temperature");
  Wire.begin();
    
  if (getTemperature())
  {
    bInitStatus=false;
    Serial.println("Failed to get the temperature, I2C connected?");
  }

  Serial.println("Retrieving time");
  
  if (getTime())
  {
    bInitStatus=false;
    Serial.println("Failed to get the time, I2C connected?);
  }

  Serial.println("Initializing complete\n");
  
#if enableWifi == TRUE
  Serial.println("Wifi enabled to:");
  serialPrintEnv();
#endif  

  if (!bInitStatus)
  {
    while(1)
    {
      Serial.println("\n\nERROR: Failed to initiliaze some components!\nHALTING !!!\n");
      delay(1000);
    }
  }
    
}

void loop()
{

#if enableWifi == TRUE
  /* Keep the webpage alive */
  WiServer.server_task();
#endif

  if (digitalRead(3) == HIGH)
  {
    digitalWrite(ledPin, HIGH);
  }
  else
  {
    digitalWrite(ledPin, LOW);
  }

  if ( Serial.available() > 0U )
  {
    char serialChar = Serial.read();
    
    switch (serialChar)
    {
      case '1':
      //fake electric meter blip
      processBlip();
      break;
      
      case '9':
        //increment the day        
        eepromIdx += 1U;
      
        if (eepromIdx > numDaysCache)
        {
          eepromIdx = 0U;
        }
      
        /* Reset the KWH count */
        EEPROM.write(eepromIdx,0U);
        kwhTotalDay = 0U;

        break;
        
      case 'R':
        /* Reset device */
        Serial.println("Resetting device");
        resetDevice();
        Serial.println("done!");
    }
  }
}

#if enableWifi == TRUE
boolean processHTMLReq ( char* URL )
{
  unsigned char i = 0U;
  unsigned char day = 0U;
  unsigned char cacheMinusIdx = numDaysCache - eepromIdx;
  unsigned char kwhRead = 0U;
  unsigned int kwhTotalMonth = 0U;
  
  WiServer.print("<html>");
  
  /* Auto-refresh page every 60 seconds */
  WiServer.print("<head><meta http-equiv=\"refresh\" content=\"60\"></head>");
  
  for(i=eepromIdx;i>0;i--)
  {
    WiServer.print("Days-ago: ");
    WiServer.print(day,DEC);
    WiServer.print(", usage: <b>");
    kwhRead = EEPROM.read(i);
    WiServer.print(kwhRead,DEC);
    WiServer.print(" KW-Hours</b><br>");
    kwhTotalMonth += kwhRead;
    day += 1;
  }

  for(i=numDaysCache;i>eepromIdx;i--)
  {
    WiServer.print("Days-ago: ");
    WiServer.print(day,DEC);
    WiServer.print(", usage: <b>");
    kwhRead = EEPROM.read(i);
    WiServer.print(kwhRead,DEC);
    WiServer.print(" KW-Hours</b><br>");
    kwhTotalMonth += kwhRead;
    day += 1;
  }

  WiServer.print("<hr>KWH cost today: <b>");
  WiServer.print((penceKWH*kwhTotalDay)/100, DEC);
  WiServer.print(".");
  WiServer.print(((penceKWH*kwhTotalDay)%100), DEC);
  WiServer.print("p</b>,  Past month: <b>");
  WiServer.print(((penceKWH*kwhTotalMonth)/100), DEC);
  WiServer.print(".");
  WiServer.print(((penceKWH*kwhTotalMonth)%100), DEC);
  WiServer.print("p</b>,  Cost per KWH: <b>0.");
  WiServer.print(penceKWH, DEC);
  WiServer.print("p</b>,  KWH used past hour: <b>");
  WiServer.print("NOT IMPLEMENTED");
  WiServer.print("</b>,  Blips Counted: ");
  WiServer.print(impCount,DEC);
  
  WiServer.print("</html>");

  return true;
}
#endif
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 9
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ive just fixed this.

But read on:

There are a few bugs in the code (undeclared variables, strings quotes not terminated)

But the processing does return them. Does the ide do some preprocessing before passing it to gcc?

Can an arduino ide developer confirm if the above is a known bug.

Thanks
Ryan
Logged

Seattle, WA USA
Offline Offline
Brattain Member
*****
Karma: 601
Posts: 48543
Seattle, WA USA
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Ive just fixed this.

Fixed what? The stack overflow error? If so, what did you do to fix it?
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 9
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

There were some bugs in the code. But when I compile it I get the stackoverflow error and not the errors about the code.

This is a bug in the arduino IDE
Logged

Wuppertal/Germany
Offline Offline
God Member
*****
Karma: 1
Posts: 895
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi Ryan,
Quote
Ive just fixed this.
But read on:
There are a few bugs in the code (undeclared variables, strings quotes not terminated) ..... Does the ide do some preprocessing before passing it to gcc?
Yes : http://code.google.com/p/arduino/wiki/BuildProcess

Quote
Can an arduino ide developer confirm if the above is a known bug.
I'm not one of the developers, but I can confirm that the preprocessing of the Sketch chokes at least on the strings quotes not terminated parts.

Eberhard
Logged

Offline Offline
Edison Member
*
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi, I had the same exception as the OP and found out that it was due to a double-quote character wrongly typed around the mid of a sketch.

Serial.println("buf);

and the some 100 lines of code...

Removing that " typo solved the issue.
Logged

Pages: [1]   Go Up
Jump to: