Programmierung in Assembler, Fehler beim linken

OP #2318984
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.
Angehängte Dateien:
#2319058
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
Gast #2319143
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
#2319189
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
#2319472
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.

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