www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR Atmega644 - grosse Sprünge im Flash


Autor: Christoph (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo alle AVR-Spezialisten.

Ich baue einen LED-Globus und sende meine Bilddaten dafür byteweise an 
den PortD. Zuerst speichere ich 8 Bytes in 8 Registern, dann rufe ich 
eine Funktion auf, welche die Daten nacheinander an den PortD schiebt.
ldi r16, 0b11100000
ldi   r17, 0b11100000
ldi   r18, 0b11100000
ldi   r19, 0b11100000
ldi   r20, 0b01100000
ldi   r21, 0b01100000
ldi   r22, 0b11000000
ldi   r23, 0b11000000
rcall Schiebe8byte
ldi   r16, 0b11000000
ldi   r17, 0b11000000
ldi   r18, 0b11000000
ldi   r19, 0b11000000
ldi   r20, 0b11000000
ldi   r21, 0b11000100
ldi   r22, 0b11000100
ldi   r23, 0b11000100
rcall Schiebe8byte
Das Problem ist, nach ca 1000 Zeile Code, funktionieren die Spünge nicht 
mehr. Jedenfalls sagt der Linker "undifinerte Sprungadresse". Ich werde 
noch bestimmt 4000 Bytes ausgeben und muss einen Weg finden, in die 
Funktion "Schiebe8byte" und wieder zurück zu springen.
Kann mir jemand helfen?

Hier noch die Schiebefunktion:
Schiebe8byte:
out  PORTD, r16
sbi   PORTB, 1
cbi      PORTB, 1
out      PORTD, r17
sbi   PORTB, 1
cbi    PORTB, 1
out      PORTD, r18
;...
out      PORTD, r23
sbi   PORTB, 1
cbi   PORTB, 1
ret

Vielen Dank für jede Hilfe,
Christoph

Autor: Sascha Weber (sascha-w)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dann musst du call anstelle von rcall verwenden,
aber lege die Daten doch einfach Byteweise in den Flashspeicher und lade 
sie per Schleife von dort und gib sie aus.

Sascha

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christoph schrieb:
> Das Problem ist, nach ca 1000 Zeile Code, funktionieren die Spünge nicht
> mehr. Jedenfalls sagt der Linker "undifinerte Sprungadresse".
Ein lcall (long call) könnte helfen...
Wenn du "nur" call hinschreibst, dann sollte sich der Assembler den 
passenden Call aussuchen.

Autor: AVR-Fan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuche es mal mit "call" statt "rcall"
Könnte sein, daß das Sprungziel zu weit für den rcall
entfernt ist. (AVR-Studio Assembler mault dann zwar was von
"zu weit".)

Autor: Thomas Eckmann (Firma: Thomas Eckmann Informationst.) (thomase)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lothar Miller schrieb:
> Ein lcall (long call) könnte helfen...

das ist kein "L" Call sondern ein "i" Call = indirect call.
Der geht über 4 MWords.

Ein "call" geht über 64K und ist für den 644 ausreichend.

"rcall" (4K) kann irgendwann zu kurz sein.

mfg.

Autor: Christoph (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo und vielen Dank für die Hilfe. Mit call und jmp funktionieren die 
Sprünge.

Da Sisy aber ab 1000 Zeilen code abstürzt, bin ich jetzt auf AVR Studio 
umgestiegen. Mit dem Atmega32 funktioniert auch alles, ich habe nur 
keine Bibliothek für den Atmega644.

Kann ich da mit
.include "m64def.inc"
arbeiten?

Unter "Tools"->"AVR Prog" lässt sich unter "divices" auch nur der 
Atmega64 auswählen. Brennen klappt, prüfen klappt, aber der Controller 
abreitet anschließend nicht in seiner Schaltung.

Autor: AVR-Fan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im AVR-Studio 418 mit Servicepack 3 findest du alle!
m644xx.def Files die nötig sind.
Die Devices sind alle einstellbar und werden auch von
der Prog-Routine erkannt (ATMEGA644xx und STK500).

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Der ATMega644 hat nichts mit dem ATMega64 zu tun. Sei froh, das du dur 
die Fuses nicht versaut hast.

>ich habe nur keine Bibliothek für den Atmega644.

Im aktuellen AVR-Studio gibt es m644def.inc, m644adef.inc, m644defp.inc 
und
m644defpa.inc. Und welchen hast du?

MfG Spess

Autor: christoph (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit SP3 hab ich jetzt auch die m644def.inc zur Verfügung stehen und mein 
Projekt läuft jetzt.
Vielen Dank und Respekt!
Christoph

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.