Hallo Was mache ich Falsch? Im Simulator läufts und in der Hardware kommt bei GPS-Distance ein anderes Ergebnis und mit LCD auf einem anderen MC stürzt er immer bei der Berechnug ab und startet wieder von Vorne. Kann mir jemand helfen?
Ins Blaue geraten
1 | $hwstack = 32 ' default use 32 for the hardware stack |
2 | $swstack = 10 ' default use 10 for the SW stack |
kommt mir etwas wenig vor. Deine Funktion
1 | Sub Get_distance_course(byval Lat1 As Double , Byval Lon1 As Double , Byval Lat2 As Double , Byval Lon2 As Double) |
2 | |
3 | Local Tmp As Double , A As Double , B As Double , C As Double , T2 As Double |
da sind 4 double in der Argument Liste, nochmal 4 lokale Variablen. Das könnte mit den 32 'ein bischen eng' werden. Du hast gerade etwas wichtiges gelernt: Men entwickelt kein Programm ausschliesslich mit dem Simulator. Egal wie gut ein Simulator ist, irgendwas ist an der realen Hardware immer ein kleines bischen anders.
Karl Heinz Buchegger schrieb: > Du hast gerade etwas wichtiges gelernt: Men entwickelt kein Programm > > ausschliesslich mit dem Simulator. Egal wie gut ein Simulator ist, > > irgendwas ist an der realen Hardware immer ein kleines bischen anders. Wobei der Simulator ihm sicherlich sagt, dass sich die Stacks überlagern. Abstürzen sollte der Simulator dazu nicht. Karl Heinz Buchegger schrieb: > da sind 4 double in der Argument Liste, nochmal 4 lokale Variablen. Das > > könnte mit den 32 'ein bischen eng' werden. > > Die Parameter und die lokalen Variablen haben zunächst einmal nichts mit dem HWStack (32) zu tun. Die Adressen müssen alle in den SWStack (10)passen, die Werte in Frame (40). Diese beiden sind dafür zu klein. @Franzl Du solltest dir auch überlegen, ob du die Double Werte wirklich brauchst. So kleinen Controllern geht schnell die Luft aus, wenn sie diese Berechnungen machen müssen.
Hab die Stackwerte mal erhöht jetzt Funktionierts. Danke! Wozu ist den der Stack eigendlich gut? Wie berechneht man den? mue-c schrieb: > Wobei der Simulator ihm sicherlich sagt, dass sich die Stacks > überlagern. Abstürzen sollte der Simulator dazu nicht. Der MC stürzt ab nicht der Simulator. Der meldet garnichts, auch der Compiler meckert nicht. mue-c schrieb: > @Franzl > Du solltest dir auch überlegen, ob du die Double Werte wirklich > brauchst. So kleinen Controllern geht schnell die Luft aus, wenn sie > diese Berechnungen machen müssen. Werde es einmal mit Single probieren.
Franzl F. schrieb: > Wozu ist den der Stack eigendlich gut?
1 | $regfile = "attiny2313.dat" 'Portnamen vereinbaren |
2 | $crystal = 1000000 'Takt vereinbaren |
3 | $hwstack = 32 'Reg-Sicherung, Rücksprungadressen |
4 | $swstack = 10 'Parameterübergabe |
5 | $framesize = 10 'Rechenbereich Funktionen |
...
Franzl F. schrieb: > Werde es einmal mit Single probieren. damit war mehr gemeint, du sollte auf int gehen.
Franzl F. schrieb: > Wozu ist den der Stack eigendlich gut? Wie berechneht man den Schau mal in die Bascom Hilfe zu $HWStack und $HWCheck und entsprechend bei den dort aufgeführten Links. Da gibt es jede Menge Erklärungen. Franzl F. schrieb: > Der MC stürzt ab nicht der Simulator. Der meldet garnichts, auch der > Compiler meckert nicht. Natürlich stürzt der Simulator nicht ab. Das war auf KHBs Kommentar zum Unterschied Simulator <-> HW gedacht. Klick mal im Simulator die Befehle durch, bis du in der Sub Get_distance_course den ersten Befehl ausführst. Dann steht unten in der Statuszeile, das "Frame or software stack overlap". Genau das, was passiert.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.