mikrocontroller.net

Forum: Compiler & IDEs Komisches Verhalten


Autor: Dirk (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich trau mich nu mal und setzte mein Programm hier herein.

Ich programmier noch nicht so lange und hab nun mein erstes größeres
Projekt in Angriff genommen.
Kurze Beschreibung:
Im Hauptprogramm wird die Funktion Konfiguration aufgerufen.
Hier wird entschieden ob Einstellungsdaten aus dem eeprom geladen
werden (muß noch programmiert werden) oder ob das Gerät neu eingestellt
wird.
Wenn zweiteres der Fall ist werden nacheinander die Menüs Luftdruck,
Alarmgrenzen und Setpoint aufgerufen.
Als letzte wird das Menü bzw. Unterprogramm Sensor_kallibrieren
aufgeufen. Ist noch nicht ganz fertig, weil ich eben hier nicht mehr
weiterkomme.
In der Version oben, maht das Programm das was es soll.
Füge ich aber die Zeile 482 wieder ein kommt nur noch Unsinn raus.
Für die AD Wandler Werte werden dann so Sachen wie H322 oder
irgendwelche sonderzeichen ausgegeben.
In den anderen Unterprogrammen kan man weder den Setpoint noch die
Alarmgrenzen einstellen. Einzelen Programmteile werden sogar
schlichtweg unterschlagen. Einzig die Funktion Luft_druck scheint dem
Chaos zu trotzen.

Ich hab WinAVR04042004 und Ponyprog. Dazu die Platine der
Mikrokonrollergruppe und einen AT90S8535.

Woran kann es liegen, daß durch Einfügen dieser einzelnen Zeile so ein
Chaos entsteht.
Ich komme halt so nicht weiter. Mit jeder Veränderung, gerade in den
put_string Anweisungen ist irgendwie neues Chaos vorprogrammiert.


Danke Dirk

Autor: Malte Marwedel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mir scheint es so, als ob die ganzen Texte, die auf dem LCD ausgegeben
werden sollen im RAM liegen. Das geht so lange gut, bis die 512 Byte
voll sind. Versuche immer nur den gerade benötigten String aus dem
Flash oder EEProm in den RAM zu kopieren.
Hir läuft gerade ein Thread der zeigt, wie man Strings im Flash lässt:
http://www.mikrocontroller.net/forum/read-2-94515.html

Ich würde übrigens versuchen lcd_putnumber3 und lcd_puntnumber4
zusammenzufügen. Vielleicht hilft dir auf folgende Funktion dabei ein
wenig weiter:

void wordtostr(u32 nummer, u08 digits, u08 strposition) {
while (digits > 0) {
digits--;
rs232rausstring[strposition+digits] = nummer%10+48;
nummer = nummer / 10;
}
}

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Malte

Vielen Dank. Sowas hatte ich schon fast geahnt.
Hab aber keine Ahnung wie ich sowas ändern kann.
Habs wie beschrieben geändert. Programm läuft jetzt tadellos.

Ich hab festgestellt, daß die Probleme immer bei Überschreitung von 480
Byte im RAM auftreten. Das  wird ja beim compilieren unter data
ausgegeben. Bis 512 fehlen da aber noch 32 Byte. Was passier mit den
restlichen 32 Byte? Oder sind die noch irgendwo anders versteckt?

Noch ne Frage (will ja mal schlau werden):
Was, und warum schreibt der Compiler denn überhaupt ins RAM?
Dann könnte ich das nächste Mal solche Fehler umgehen.

Danke
Dirk

Autor: Malte Marwedel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Compiler schreibt alle Variablen in den RAM, sofern sie nicht in den
Registern gehalten werden können. Hinzu kommen nur die
Rücksprungadressen von Unterprogrammen und eventuell eine Sicherung der
Register (pus, pop Befehle in Assembler) - falls diese gerade
anderweitig benötigt werden (z.B. für einen Interrupt). Dies könnte
ziemlich gut die 32 Byte RAM belegen, wieviel genau ist aber nicht
immer vorhersehbar.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.