Forum: Mikrocontroller und Digitale Elektronik Programmierung in Assembler, Fehler beim linken


von A. Z. (sunmoon)


Angehängte Dateien:

Lesenswert?

Ein kinetisches Kunstobjekt soll über einen Microcontroller ATMega8 
gesteuert werden. Über eine Interrupt-Schaltung soll es möglich sein 
während des Betriebs von einem Programmteil in den nächsten 
weiterzuschalten.
Beim Versuch das Programm zu linken bekomme ich folgende Fehlermeldung:

(text + 0x1a6)relocation truncated to fit: R_AVR_7_PCREL against "no 
symbol" objekt mensch_natur in function "onPortD2"

was soll das bedeuten, was ist an meinem Programm falsch?
Als Datei angehängt habe ich den Programmteil, auf den sich die 
Fehlermeldung anscheinend bezieht, es ist der Programmteil, der beim 
Interrupt angesteuert wird.

von Andreas W. (geier99)


Lesenswert?

A. Z. schrieb:
> was soll das bedeuten, was ist an meinem Programm falsch?

Ohne den kompletten Quellcode zu sehen, kann ich nur sagen, dass Du den 
falschen Ansatz gewählt hast. Die Interrupt-Routine ist viel zu komplex, 
und delay in einer ISR geht gar nicht.

Gruss Andreas

von Peter D. (peda)


Lesenswert?

Mein AVRStudio würde auch rummotzen, wenn ich ihm ne PNG-Datei gebe.
Quelltexte heißen *.asm oder *.c.


Peter

von Martin V. (oldmax)


Lesenswert?

Hi
Also, ich würd mal sagen. völlig falscher Ansatz. Auch für ein 
Kunstobjekt mag es noch so abstrakt sein, kann ein Aufruf einer Marke 
aus einer ISR heraus, nicht funktionieren, wenn die Marke nicht 
innerhalb der ISR ist. Außerdem vermisse ich das Retten der Register, 
die Push und Pop-Anweisungen, die in einer ISR unumgänglich sind. 
Abgesehen davon, das hier gar nicht klar ist, ob die ISR überhaupt 
richtig aufgerufen wird, da der Code scheinbar "geheim" ist. Und Leute, 
überlegt mal, wozu eine ISR eigentlich gut ist.... Abfragen von Tastern 
ist mit sicherheit nix für eine ISR.
Wenn du meinst, du kannst in einem µC mehrere Programme laufen lassen 
irst du dich. Es läuft immer nur eines. Aber, du kannst verschiedene 
Zweige durchlaufen.
Bau dir ein prg_Ctrl-Byte, welches du im Speicher hältst und das du 
entsprechend mit Bits besetzt. In deiner Schleife springst u dan 
entsprechend gesetzter Bits in die Programmabschnitte. Da braucht's 
keine ISR für.
Gruß oldmax

von Oliver (Gast)


Lesenswert?

Martin Vogel schrieb:
> kann ein Aufruf einer Marke
> aus einer ISR heraus, nicht funktionieren, wenn die Marke nicht
> innerhalb der ISR ist.

Nun ja, per Definition ist man solange "innerhalb" der ISR, bis der 
Programmablauf auf ein reti trifft. "Marken aufrufen" (was immer das 
auch sein soll) kann man daher aus einer ISR genauso wahlfrei, wie auch 
von ausserhalb.

Die Fehlermeldung "relocation truncated to fit: R_AVR_7_PCREL " sagt 
aus, daß das Sprungziel für den in der betroffenen Zeile stehenden 
Sprungbefehl zu weit weg ist.

Oliver

von Martin V. (oldmax)


Lesenswert?

Hi Oliver
Da gebe ich dir recht, aber ich sag mal so: es ist nicht unkritisch, aus 
einer ISR einen Programmblock einer Subroutine aufzurufen.  Subroutine 
muss schon sein, denn innerhalb der ISR hab ich jedenfalls keine 
Sprungmarken gesehen. Wenn der OT schon in der IST vergisst, seine 
Register zu retten, in einer ausgelagerten Sub wird er's dann erst 
recht....
Gruß oldmax

von A. Z. (sunmoon)


Lesenswert?

wenn  "relocation truncated to fit: R_AVR_7_PCREL " bedeutet, daß das 
Sprungziel zu weit weg ist, gibt es einen Trick, mit dem das Sprungziel 
doch erreicht werden kann, oder muss der Programm-Code verkürzt werden?

von A. Z. (sunmoon)


Lesenswert?

Eine weitere Frage: gibt es fertige Sammlungen von typischen 
Programmierungen für den ATMega8? Es scheint doch unnötig immer wieder 
alles neu zu erfinden, was es längst gibt.

von Dietrich L. (dietrichl)


Lesenswert?

A. Z. schrieb:
> wenn  "relocation truncated to fit: R_AVR_7_PCREL " bedeutet, daß das
> Sprungziel zu weit weg ist, gibt es einen Trick, mit dem das Sprungziel
> doch erreicht werden kann, oder muss der Programm-Code verkürzt werden?

Eine Hilfsmarke in der Nähe und dort einen JMP ans Ziel.

Gruß Dietrich

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

OT: Seit wann enden Quelltexte auf *.png... :-/

von docean (Gast)


Lesenswert?

A. Z. schrieb:
> Eine weitere Frage: gibt es fertige Sammlungen von typischen
> Programmierungen für den ATMega8? Es scheint doch unnötig immer wieder
> alles neu zu erfinden, was es längst gibt.

nennt sich C ;)

von Daniel F. (df311)


Lesenswert?

A. Z. schrieb:
> typischen Programmierungen
das kommt auf die definition von "typisch" an - es gibt sowohl für C als 
auch für ASM bibiliotheken um z.b. ein lcd anzusteuern.

ich versuche, programmteile so zu bauen dass ich sie in anderen 
projekten wieder verwenden kann und mich nicht zu sehr auf fertigen code 
zu verlassen - dann weiß ich auch immer gleich, wer den blödisnn 
geschrieben hat ;-)
so kann man sich im lauf der zeit auch eine sammlung an 
RS232/-485/LCD/Taster/... ansteuerungen u.ä. aufbauen, lernt noch was 
dabei und spart arbeit bei zukünftigen projekten.

von A. Z. (sunmoon)


Lesenswert?

vielen Dank, das hat mir sehr geholfen!
in diesem Forum sind übrigens nur .png oder ,gif Formate erlaubt, daher 
konnte ich auch nichts anderes reinstellen.
Aber es funktioniert jetzt ganz gut, also dankeschön!

von spess53 (Gast)


Lesenswert?

Hi

>in diesem Forum sind übrigens nur .png oder ,gif Formate erlaubt,

Nur für Bilder. Quelltexte kannst du direkt anhängen.

MfG Spess

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.