Moin,
vielleicht hat ja jemand von den Compiler-Spezis eine Idee.
Aus einem anderen Thread entstand der folgende Code, der mir als Grundlage dienen sollte.
Board: Original ARDUINO Mega2560
Betriebssystem/Versionen: Ubuntu UND Windows7 / 1.8.10 bis 1.8.13 (auch portable)
Was soll der Sketch machen? Auf dem seriellen Monitor ausgeben, in welchem Teil der Funktionen man sich gerade befindet.
Was macht er? Neustarten im ca. 800ms Takt; Dabei wird auch die LED an PIN 13 mit aktiviert.
Keine Fehlermeldungen beim kompilieren etc. Ausdrücklich keine vorher kompilierten Teile enthalten.
Ausgabe als txt mit angehangen.
Für die Kompilerspezis noch das .hex mit dran. (Es existiert auch noch eines mit bootloader)
Wenn in Zeile 30 die serielle Ausgabe aktiviert wird, funktionierts fehlerfrei.
Was ist das Problem?
int switch_pin = 5; //set switch on pin 5
int analog1 = A1;
//Distance Variables
int motionPin = 0; //motion sensor pin on analog 0
int lastDist = 0; //to remember last distance
int currentDist = 0;
int thresh = 100; //Threshold for Movement
int pos = 0;
int selectedMove = 0;//move selector
int Testmove = 0; //test mode: set to move number to test only one selected move
//(set to Zero to run normally i.e: roundrobbin on amm moves)
void setup()
{
Serial.begin (115200);
Serial.println (F ("Start..."));
pinMode (switch_pin, INPUT);
}
void loop()
{
if (Testmove != 0)
{
selectedMove = Testmove;
}
//if the switch is on, then move door and hand to switch it off...
if (digitalRead (switch_pin) == HIGH)
{
// Serial.println(F("Taste gedrueckt")); // Wird diese Zeile mit verarbeitet: alles i.O.
if (selectedMove > 10)
{
selectedMove = 0; //when all moves are played, repeat the moves from beginning
}
switch (selectedMove)
{
case 0:
switchoff();
break;
case 1:
switchoff();
break;
case 2:
switchoffbitaraddod();
break;
case 3:
crazydoor();
break;
case 4:
crazyslow();
break;
case 5:
m7anika7anika();
break;
case 6:
m3alla2();
break;
case 7:
switchoff();
break;
case 8:
matrix();
break;
case 9:
sneak();
break;
case 10:
zee7();
break;
default:
selectedMove = 0;
break;
}
delay (1000);
if (!Testmove) selectedMove++; //swith to next move if not in test mode
}
// EDIT
else // Wenn Schalter aus
{
switchoff();
selectedMove = 0;
}
}
void switchoff()
{
Serial.println (F ("switchoff"));
}
void switchoffbitaraddod()
{
Serial.println (F ("switchoffbitaraddod"));
}
void crazydoor()
{
Serial.println (F ("crazydoor"));
}
void crazyslow()
{
Serial.println (F ("crazyslow"));
}
void m7anika7anika()
{
Serial.println (F ("manikaanika"));
}
void m3alla2()
{
Serial.println (F ("malla"));
}
void matrix()
{
Serial.println (F ("matrix"));
}
void sneak()
{
Serial.println (F ("sneak"));
}
void zee7()
{
Serial.println (F ("zee"));
}
MicroBahner:
Kann ich auch nicht nachvollziehen. Bei mir läuft das Ding ( auf Mega ) brav im Kreis rum. 1.8.13 portable auf Win10.
Da Du für nen Mega compilierst: Wieviel Bytes hat Dein Compilat?
Meines 2826.
Willst Du mal das hexFile vergleichen? Wenn nicht, gib mir mal Deines mit bootloader;)
Ich hab das heute mit komplett neuen, frisch runtergeladenen Versionen durch, mit gleichem Ergebnis.
Wie gesagt, wenn ich die eine zusätzliche AusgabeZeile mit kompiliere, gehts hier auch.
@paulpaulson:
Das ist hier auch nur auf meinen zwei Megas genau so nachzubauen.
Hallo
Arduino Mega:
Der Sketch verwendet 2826 Bytes (1%) des Programmspeicherplatzes. Das Maximum sind 253952 Bytes.
Globale Variablen verwenden 190 Bytes (2%) des dynamischen Speichers, 8002 Bytes für lokale Variablen verbleiben. Das Maximum sind 8192 Bytes.
Ist das ein nackter Arduino MEGA mit einem Taster oder hast Du noch andere Hardware angeschlossen?
Ein Reset kann auch indirekt durch eine Überlast ausgelöst werden weil die Versorgungsspannung zusammenbricht.
Grüße Uwe
Ok, es geht wohl seit 1.8.10 nicht.
Mit einer 1.8.8 (portable) auf einem Ubuntu bekomme ich mit genau dem Sketch von oben: (hier rauskopiert und übertragen)
Der Sketch verwendet 2864 Bytes (1%) des Programmspeicherplatzes. Das Maximum sind 253952 Bytes.
Globale Variablen verwenden 190 Bytes (2%) des dynamischen Speichers, 8002 Bytes für lokale Variablen verbleiben. Das Maximum sind 8192 Bytes.
und das funktioniert auch so.
Mit der zusätzlichen Ausgabe sinds dann i.ü. 2886 Bytes.
Nochmal zum Vergleich unter 1.8.10 bis 1.8.13 sinds
2826 ohne und reboot
2848 mit und funktioniert.
Also jeweils genau 22Bytes Unterschied - aber auf anderem Niveau.
Ich hab den Sketch so wie er im Post ist in die IDE kopiert und dort kompiliert. Allerdings:
Der Sketch verwendet 3004 Bytes (1%) des Programmspeicherplatzes. Das Maximum sind 253952 Bytes.
Globale Variablen verwenden 190 Bytes (2%) des dynamischen Speichers, 8002 Bytes für lokale Variablen verbleiben. Das Maximum sind 8192 Bytes.
Also ist bei Dir etwas anders.
Irgendeine Bibliothek...
Zusatzfrage: Willst Du nen 1.8.13 zip mal entpacken, darin ein zusätzliches Verzeichnis portable anlegen und starten, um zu sehen, was bei rauskommt, wenn Du ein frisches System hast?
Es sind schon einige zusätzliche Boards installiert. Aber sollte auf die AVR'S ja keine Auswirkung haben.
Trotzdem:
'arduino-1.8.13-windows.zip' nochmal in ein neues Verzeichnis entpackt, Verzeichnis 'portable' angelegt und den Sketch aus deinem obigen Post übersetzt: gleiches Ergebnis - und läuft.
Vielleicht liegt's an der Umgebung Win10?
MicroBahner:
Aber sollte auf die AVR'S ja keine Auswirkung haben.
Davon ist auszugehen.
]
... entpackt, Verzeichnis 'portable' angelegt ...: gleiches Ergebnis - und läuft.
Vielleicht liegt's an der Umgebung Win10?
Hm.
Ich versuch später mal noch ne Win8 - ist das Einzige, auf was ich auf die Schnelle als richtige Systeme Zugriff habe.
Aber ich denke, das da irgendwas mit dem compiler nicht passt. Entweder was wegoptimiert oder sonstwie falsch zusammengebaut.
my_xy_projekt:
Davon ist auszugehen.Hm.
Ich versuch später mal noch ne Win8 - ist das Einzige, auf was ich auf die Schnelle als richtige Systeme Zugriff habe.
Aber ich denke, das da irgendwas mit dem compiler nicht passt. Entweder was wegoptimiert oder sonstwie falsch zusammengebaut.
Danke fürs testen!
Gern geschehen.
Bitte berichte was die Ursachen für diesen skurillen Fehler ist.
combie:
Wenn du die Optimierung in Verdacht hast, schalte sie ab.
Hast du den Compiler in Verdacht, teste mit einem moderneren.
Ich werd zusehn, was die Nacht ein Win8 zeigt.
Da die 1.8.8 geht, weiss ich zumindest, das es kein Hardware-Problem ist.
Dann suche ich am Donnerstag - da hab ich den Tag über Zeit.