PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Woher weiß ich ob mein Programm auf den Controller paßt?



Katja
22.05.2006, 14:57
Hallo Community,

hab mal ne blöde Frage. Habe eine Programm geschrieben, daß während der Fahrt vom Asuro Werte zu den Raddrehzahlen speichert. Diese lasse ich dann im Anschluß auf dem Hyperterminal ausgeben. Jetzt hab ich gemerkt, daß wenn ich die Speichervariable zu groß mache (z.B. uint16_t Mem[200][4]) das Programm einfach nicht mehr läuft bzw. nicht nachvollziehbare Fehler aufweist. Wenn ich die Variable in ihrer Größe stark reduziere geht wieder alles. Scheinbar überschreibe ich Teile des Programms mit meinen Meßwerten. Kann sowas sein? Und woher weiß ich, ob meine Variable zu groß ist oder nicht? Ich will schon mindestens 1000 Werte in uint16_t speichern.

lg Katja

Hanni
22.05.2006, 15:00
Nein, du überschreibst nicht teile des Programms mit Messwerten sondern das was im RAM steht ...

wenn deine Daten nun so groß werden, das sie den Stackpointer zum Teil überschreiben passiert genau sowas.

BTW: Wenn du mehr zum Thema wissen willst, wirf nen Blick ins Datenblatt .

Grüße,
da Hanni.

uwegw
22.05.2006, 15:06
Der Mega8 im Asuro hat nur 1kB RAM. Deine 1000 Werte würden aber 2kB brauchen. Du müsstest also nen externen Speicher anschließen, wenn du so viele Daten ablegen willst...

MrQu
23.05.2006, 09:44
@Katja

Warum schließt Du nicht einfach ein IC2 EEprom an dem ATmega an.
In dem du die Messwerte speicherst, dann geht nichts schief

Das hat @uwegw warscheinlich auch damit gemeint.

Wenn es extrem viele Messwerte sind kannst du auch eine SD-Karte an den SPI-Bus hängen.
Schau mal bei http://www.ulrichradig.de vorbei.
Unter AVR-Projekte -> MMC/SD

Gruß MrQu

izaseba
23.05.2006, 18:59
Zur Not gibt es noch den internen EEprom

Gruß Sebastian

SprinterSB
23.05.2006, 23:22
Wie du an die Info kommst, ob dein Programm (bzw auch die Daten) in den µC passen, ist abhängig von deiner Entwicklungsumgebung. Da du uint16_t erwähnst, rate ich mal ins Blaue du verwendest avr-gcc und die GNU-Tools.

Dann sind avr-size und avr-nm deine Freunde. Die du an die Info kommst und was sie bedeutet ist erklärt in RN-Wissen im Artikel Speicherverbrauch bestimmen mit avr-gcc (https://www.roboternetz.de/wissen/index.php/Speicherverbrauch_bestimmen_mit_avr-gcc)