Atmega8 startet mit vollem Speicher manchmal nicht.

Gast #779263
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?
Gast #779338
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.
Gast #779342
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?
Gast #779362
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)
#779399
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
Gast #779498
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)
#779535
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.
Gast #779635
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)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren