SOLVED - 1.0.5-r2 Verify Hangs With This Sketch Only

Hi
I have a very odd problem with this sketch. I started it from pieces from two examples found on the web, compiled and uploaded to my Uno and it ran as expected. After closing the IDE and later reloading the sketch to make some additions it froze on verify with the status bar at about 20%. There was not error listed in the output only a string of java.util.regex.Pattern stuff. None looked like errors or warnings. I brought the sketch to my laptop and got same results. It also doesn’t matter if you make changes or have the include files missing. It’s like it is broken somehow. I would appreciate it if someone could check it same problem occurs. I am running Windows 7 64bit. I will post location for include libraries but try to verify first and see what happens.
Thanks

[//* YourDuino.com Example Software Sketch
   DHT11 Humidity and Temperature Sensor test
   Credits: Rob Tillaart
  
   terry@yourduino.com */
   Added 1.8" tft color display code
/*-----( Import needed libraries )-----*/
#include <dht11.h>
#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library
#include <SPI.h>

/*-----( Declare objects )-----*/
// For the breakout, you can use any (2 or) 3 pins
//#define sclk 13
//#define mosi 11
#define cs   10
#define dc   9
#define rst  8  // you can also connect this to the Arduino reset
#define DHT11PIN 2
Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, rst);
dht11 DHT11;


/*-----( Declare Constants, Pin Numbers )-----*/


/*-----( Declare User-written Functions )-----*/
//
//Celsius to Fahrenheit conversion
double Fahrenheit(double celsius)
{
        return 1.8 * celsius + 32;
}

//Celsius to Kelvin conversion
double Kelvin(double celsius)
{
        return celsius + 273.15;
}

// dewPoint function NOAA
// reference: 
double dewPoint(double celsius, double humidity)
{
        double A0= 373.15/(273.15 + celsius);
        double SUM = -7.90298 * (A0-1);
        SUM += 5.02808 * log10(A0);
        SUM += -1.3816e-7 * (pow(10, (11.344*(1-1/A0)))-1) ;
        SUM += 8.1328e-3 * (pow(10,(-3.49149*(A0-1)))-1) ;
        SUM += log10(1013.246);
        double VP = pow(10, SUM-3) * humidity;
        double T = log(VP/0.61078);   // temp var
        return (241.88 * T) / (17.558-T);
}

// delta max = 0.6544 wrt dewPoint()
// 5x faster than dewPoint()
// reference:
double dewPointFast(double celsius, double humidity)
{
        double a = 17.271;
        double b = 237.7;
        double temp = (a * celsius) / (b + celsius) + log(humidity/100);
        double Td = (b * temp) / (a - temp);
        return Td;
}

/* ( THE END ) */

void setup()   /*----( SETUP: RUNS ONCE )----*/
{
  Serial.begin(9600);
  Serial.println("DHT11 TEST PROGRAM ");
  Serial.print("LIBRARY VERSION: ");
  Serial.println(DHT11LIB_VERSION);
  Serial.println();
  tft.initR(INITR_GREENTAB); // initialize a ST7735R chip, green tab (my type - RWI)
  
}/*--(end setup )---*/

void loop()   /*----( LOOP: RUNS CONSTANTLY )----*/
{
  Serial.println("\n");

  int chk = DHT11.read(DHT11PIN);

  Serial.print("Read sensor: ");
  switch (chk)
  {
    case 0: Serial.println("OK"); break;
    case -1: Serial.println("Checksum error"); break;
    case -2: Serial.println("Time out error"); break;
    default: Serial.println("Unknown error"); break;
  }

  Serial.print("Humidity (%): ");
  Serial.println((float)DHT11.humidity, 2);
  
  tft.fillScreen(ST7735_BLACK);
  tft.setCursor(5, 5);
  tft.setTextSize(0);
  tft.print("DHT-11 Test Program");
  tft.setTextColor(ST7735_GREEN);
  tft.setTextSize(2);
  tft.setCursor(5, 60);
  tft.print((float)(DHT11.humidity),2);
  //tft.setCursor(80, 60);
  tft.println("%");


  Serial.print("Temperature (oC): ");
  Serial.println((float)DHT11.temperature, 2);

  Serial.print("Temperature (oF): ");
  Serial.print(Fahrenheit(DHT11.temperature), 2);
  
  //tft.fillScreen(ST7735_BLACK);
  tft.setTextColor(ST7735_GREEN);
  tft.setTextSize(3);
  tft.setCursor(5, 30);
  tft.print(Fahrenheit(DHT11.temperature),2);
  //tft.setCursor(80, 30);
  tft.print("F");

  Serial.print("Temperature (K): ");
  Serial.println(Kelvin(DHT11.temperature), 2);

  Serial.print("Dew Point (oC): ");
  Serial.println(dewPoint(DHT11.temperature, DHT11.humidity));

  Serial.print("Dew PointFast (oC): ");
  Serial.println(dewPointFast(DHT11.temperature, DHT11.humidity));

  delay(2000);
}/* --(end main loop )-- */



code]

You need to fix up the first comment and add a comment a few lines down.

//* YourDuino.com Example Software Sketch
DHT11 Humidity and Temperature Sensor test
Credits: Rob Tillaart

terry@yourduino.com /
// Added 1.8" tft color display code
/
-----( Import needed libraries )-----*/

I then get ‘error: ‘Adafruit_ST7735’ does not name a type’ because I do not have the libraries.

Thanks for reply. I think that came from the way I pasted the code but the problem is with the comments. Here they are pasted properly. The problem is the comment I added which I thought was within the existing comment range but is not. First time I've come across this and I assume the compiler does not pick this up as an error. Thanks again for clearing out the trees so I could see the forest. Regards

/* YourDuino.com Example Software Sketch
   DHT11 Humidity and Temperature Sensor test
   Credits: Rob Tillaart
  
   terry@yourduino.com */
   Added 1.8" tft color display code
/*-----( Import needed libraries )-----*/

The problem is the comment I added which I thought was within the existing comment range but is not.

Then, why don't you move it?

ringram2077: I assume the compiler does not pick this up as an error.

That isn't it. The compiler would certainly have picked it up. However, the IDE crashed before it got as far as invoking the compiler.

The Arduino IDE contains its own attempt at a code parser and analyser which is supposed to generate function prototypes for you. That's a bad idea IMO and seems to be motivated by a misguided and unsuccessful attempt to make C++ look like Java. Unfortunately the people who implemented that didn't do a very good job and the result is that it routinely messes up your code and sometimes even crashes. The way to resolve the problem is to simplify your code far enough for the Arduino IDE to cope with it. In this case, since you intended that line to be a comment, you should be able to simply comment it out.

I think you'll find that the problem in this case is the un-matched double quote which might cause the IDE to treat the following text as an extremely long string literal. I've seen other cases where the IDE blows up when it encountered long strings.

Hi Peter I can recreate the problem by moving the */ such the "Added" comment is uncommented and the compiler (or IDE) does not generate and error and it does hang. There probably is some other combination involved because if you take just the comments and make a new sketch and verify, then the uncommented line is identified. I'll play with it more and see if the behavior changes but for now my problem seems solved.

Thanks

ringram2077: Hi Peter I can recreate the problem by moving the */ such the "Added" comment is uncommented and the compiler (or IDE) does not generate and error and it does hang. There probably is some other combination involved because if you take just the comments and make a new sketch and verify, then the uncommented line is identified. I'll play with it more and see if the behavior changes but for now my problem seems solved.

Thanks

Again, just to very clear. This is not a compiler or gcc tool problem. This is a problem with the Arduino IDE and it's goofy parsing of the sketch code. The IDE parses (or at least tries to) the sketch code and modifies it before any of the gcc compiler tools are used. The sketch parsing routines in the IDE have MANY issues and those issues show up from time to time depending on the code. In some cases perfectly valid code with no errors in it can crash the IDE.