mikrocontroller.net

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


Autor: Malte Marwedel (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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?

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der ATmega8 hat 5 Interruptvektoren mehr als der AT90S2333/4433.

Autor: Malte Marwedel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

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.