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


von Hardy (Gast)


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?

von Bernhard R. (barnyhh)


Lesenswert?

Die Änderung in Zeile 97 war es!

Grüße
Bernhard

von Matthias L. (Gast)


Lesenswert?

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

von Test,test (Gast)


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.

von Hardy (Gast)


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?

von Michael Wilhelm (Gast)


Lesenswert?

Oder der Stack?

MW

von Test,test (Gast)


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)

von Bernhard R. (barnyhh)


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

von Hardy (Gast)


Lesenswert?

Die Programmiersprache ist C und wird unter Windows mit WinAVR im 
AVRStudio geschrieben.
1
int main(void)
2
{
3
  initialisierungen(); 
4
  LEDan();
5
 
6
  while(1)
7
  {
8
    if (   )
9
    ....
10
    if (   )
11
    ....
12
    if (   )
13
    ....
14
    if (   )
15
    ....
16
    if (   )
17
    ....
18
    if (   )
19
    ....
20
  }
21
}

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)

von Bernhard R. (barnyhh)


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.

von Test,test (Gast)


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)

von Hardy (Gast)


Lesenswert?

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

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
Noch kein Account? Hier anmelden.