Forum: Compiler & IDEs Programm läuft mit ATMEGA8, nicht jedoch mit AT90S4433


von Malte Marwedel (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe vergeblich versucht, ein externes LED-Display (hat eigenen
einen Controller) mit einem AT90S4433 anzusteuern, daraufhin habe ich
einen (Pinkompatiblen) ATMEGA8 verwendet und hiermit funktionierte es.


Nun habe ich an dem Quellcode ( bis auf MCU = xy in dem makefile)
absolut nichts geändert, der Compiler (gcc) gibt mir weder Fehler noch
Warnungen aus, auch eine Kontroll LED, die der MCU zum testen ein und
ausschalten sollte, verhielt sich wie erwartet. Der MEGA8 läuft mit dem
internen Oszillator mit 8 MHZ, der 90S4433 mit einem externen 8MHZ
Quarz, somit schließe ich Timingprobleme aus. Den 90S4433 habe ich auch
mal duch einen anderen getauscht, mit dem gleichen Ergebnis. Sowohl
Batteriebetrieb, wie auch den Betrieb mittels Spannungsregler +
Netzteil habe ich versucht.

Da jedoch die erzeugten Binaries je nach eingestelltem MCU
unterschiedlich groß sind, habe ich mir mal das Assemblerlisting
angesehen und zwischen MEGA8 und 90S4433 verglichen. Bei dem ATMEGA8
werden 3x je zwei mov duch movw zusammengefasst und zusätzlich Anstelle
von (beim 90S4433):
  subi r28,lo8(-(1))
  cpi r28,lo8(16)
  brsh .+2
  rjmp .L17
folgenedes geschrieben (MEGA8):
  subi r28,lo8(-(1))
  cpi r28,lo8(16)
  brlo .L17
demnach müsste das Binary für den MEGA8 4 Wörter (= 8Byte) kleiner
sein, als das für den 90S4433.
Dem ist jedoch nicht so, das Binary für den MEGA8 ist 4 Byte größer
als das dür den 90S4433.
Kann es an dem Compiler liegen, dass das Programm nicht wie gewünscht
läuft, oder hat das dies doch elektrische Ursachen?

von Jörg Wunsch (Gast)


Lesenswert?

Der ATmega8 hat 5 Interruptvektoren mehr als der AT90S2333/4433.

von Malte Marwedel (Gast)


Lesenswert?

Ok, die unterschiedliche Anzahl der Interruptvektoren würde
Code-Größenunterschiede zwischen den einzelnen AVRs erklären.
Es muss sich bei mir wohl definitiv um ein elektrisches Problem
handeln, da das obige für einen 90S4433 compiliertes Programm (keine
Interrupts, keine Verwendung von "spezila Hardware" wie Timern oder
UART) auch in einem MEGA8 fehlerfrei läuft (umgekehrt würde es wegen
dem erweitertem Befehlssatz des MEGA8 selbstverständlich nicht gehen).

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.