Skip to content

Confusion caused by use of -fpermissive in AVR and megaAVR compilation recipes #10154

Open
@allnick

Description

@allnick

Hi.
There is the problem.

=============================================================

void setup() {
 Serial.begin(9600);
 Serial.println("Start");
}

void loop() {
 char ch = Serial.read();
 switch(ch){
  case '1':
   Serial.println("Block 1 starts executing");
   // Some block 1
   break;
  case '2':
   Serial.println("Block 2 starts executing");
   byte b;
   b = 0; // It's OK.
   // Some block 2
   break;
  case '3':
   Serial.println("Block 3 starts executing");
   // Some block 3
   break;
  case '4':
   Serial.println("Block 4 starts executing");
   // Some block 4
   break;
 }
}

Sketch uses 1668 bytes (5%) of program storage space…
Global variables use 294 bytes (14%) of dynamic memory…

=============================================================

void setup() {
 Serial.begin(9600);
 Serial.println("Start");
}

void loop() {
 char ch = Serial.read();
 switch(ch){
  case '1':
   Serial.println("Block 1 starts executing");
   // Some block 1
   break;
  case '2':
   Serial.println("Block 2 starts executing");
   byte b = 0; // This causes the problem! All blocks below the 2nd are never executed !!!
            // However, the value of the local variable in the 2nd block remains correct!
   // Some block 2
   break;
  case '3':
   Serial.println("Block 3 starts executing");
   // Some block 3
   break;
  case '4':
   Serial.println("Block 4 starts executing");
   // Some block 4
   break;
 }
}

Sketch uses 1596 bytes (4%) of program storage space…
Global variables use 244 bytes (11%) of dynamic memory…

=============================================================

Note the noticeably smaller code size in the second case.
Moreover, this does not depend on the number of blocks below the second one!
It looks like the linker just doesn't include them in the final code!
Bye.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions