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.
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
Mein AVRStudio würde auch rummotzen, wenn ich ihm ne PNG-Datei gebe. Quelltexte heißen *.asm oder *.c. Peter
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
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
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
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 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.
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
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 ;)
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.
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!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.