www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Atmega8 startet mit vollem Speicher manchmal nicht.


Autor: Hardy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe seit heute den Programmspeicher zu ca. 95% belegt. Jetzt 
startet der Atmega8 plötzlich nicht immer, wenn die Versorgungsspannung 
angelegt wird. Mit dem alten Programm funktioniert er dagegen 
einwandfrei. Das dürfte doch eigentlich kein Problem sein, den 
Programmspeicher komplett auszunutzen?

Autor: Bernhard R. (barnyhh)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Änderung in Zeile 97 war es!

Grüße
Bernhard

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt keinen leeren Speicher. 0x00 bzw 0xFF sind auch Daten

Autor: Test,test (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Das dürfte doch eigentlich kein Problem sein, den
> Programmspeicher komplett auszunutzen?

Doch, manchmal möchte der Controller ein Bäuerchen machen, wenn er zu 
voll ist. Einfach öfter probieren, irgendwann geht es bestimmt.

Autor: Hardy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Software kann ja nicht beeinflussen, dass die Hardware manchmal 
garnicht startet. Wenn ich zum Testen den Code verkleinere, dann nur in 
der Hauptschleife, in der auch keinerlei Fuses etc. gesetzt werden. Ich 
spare also nur einige Dutzend If-Abfragen ein. Das einzige was es noch 
sein könnte ist dann also die Größe?

Autor: Michael Wilhelm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder der Stack?

MW

Autor: Test,test (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Die Software kann ja nicht beeinflussen, dass die Hardware manchmal
> garnicht startet.

Ja wer denn sonst, wenn der einzige Unterschied das Programm ist?

> Wenn ich zum Testen den Code verkleinere, dann nur in
> der Hauptschleife, in der auch keinerlei Fuses etc. gesetzt werden.

Ja wo setzt Du denn die Fuses? Im Interrupt?

Wenn in der Huptschleife eine Endlosschleife drin ist bewegt sich nichts 
mehr (deshalb heißt die auch Endlosschleife)

Autor: Bernhard R. (barnyhh)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bis jetzt sind zwei Dinge bekannt:
1. Die Software eines funktionierenden Systems wurde geändert.
2. Anschließend treten intermittierende Fehler auf.

Nichts weiter ist bekannt; der gesamte Rest ist Spekulation.

@Hardy:
Bitte Hausaufgaben machen und alle die Dinge nachliefern, die bereits in 
den Originalbeitrag gehörten:
- Programmiersprache
- Was sind die präzisen Fehlersymptome
- Was wurde alles geändert

Nützlich wären zusätzlich die Compilder- und Linkermeldungen über 
Speicherbedarf u.ä.!

Last but not Least:
Woran ist erkennbar, daß die HW manchmal garnicht anläuft?
Ist es absolut sicher, daß in diesem Fehlerfall nicht eine Instruktion 
durchlaufen wurde?

Bernhard

Autor: Hardy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Programmiersprache ist C und wird unter Windows mit WinAVR im 
AVRStudio geschrieben.
int main(void)
{
  initialisierungen(); 
  LEDan();
 
  while(1)
  {
    if (   )
    ....
    if (   )
    ....
    if (   )
    ....
    if (   )
    ....
    if (   )
    ....
    if (   )
    ....
  }
}

Die if-Bedingungen werden z.B. vom Timer, vom Taster und vom Interrupt 
auf wahr gesetzt und führen dann einige Funktionen aus. Das seltsame 
daran ist jetzt, dass wenn die Menge des Codes in der while-Schleife zu 
viel wird, der Atmega8 nicht immer zuverlässig startet. Wenn er einmal 
startet, funktioniert auch alles. Dass er garnicht erst startet sehe ich 
daran, dass die LED dann auch nicht leuchtet.

Wenn ich jetzt eine dtostrf() auskommentiere, dann sinkt der 
Speicherbedarf von 96,6% auf 82,4% und schon startet der Atmega jedes 
mal. Genauso kann ich aber auch beliebige andere Funktionen 
auskommentieren und es läuft wieder. Der Compiler optimiert mit -0s.

Die Compilerausgabe:

Program: 7914 bytes (96.6 % Full)
(.text + .data + .bootloader)

Data: 146 bytes (14.3% Full)
(.data + .bss + .noinit)

Autor: Bernhard R. (barnyhh)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das "stinkt" nach Software-Problemen in der Initialisierung (vor main?).

Stack-Overflow?
Was geschieht denn bei Testläufen im AVRStudio?
Braucht die SW unbedingt Floating-Point?

Aber Hardware-Fehler - das paßt nicht ganz.
Vor allen Dingen, wenn beim Programmieren der Verify hinhaut!

Grüße
Bernhard

P.s. Diese Fehlersymptomatik ist grottenhäßlich und verlangt viiiiiel 
Zeit.

Autor: Test,test (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na so nach und nach kommen ja doch noch ein paar Informationen...

Schau die mal das Listing an, ob vielleicht das Programm über den 
eingestellten bootloader vektor drüberläuft (falls der Bootloader aktiv 
ist)

Autor: Hardy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jep, das war der Fehler. Der Bootloader-Vektor war noch aktiviert. Ohne 
diesen startet das Programm immer.

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.