PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] Hilfe der Linker macht Probleme



flown
01.07.2005, 10:34
Hallo zusammen, ich schreibe momentan ein Programm welches hauptsächlich in c geschrieben ist, ausser eine Methode welche ganz in Assembler geschrieben ist.

Am anfange definiere ich meine ganzen globalen variabeln

char toto;

In der Assembelermethode benütze ich dann diese variable

z.B. BTFSC (_toto) , 0x07

Arbeite mit MPLAB v6.6

Was nach meiner Meinung nach vollkommen richtig ist. Wenn ich das ganze kompiliere brinngt der Kompiler keine Fehlermeldung aber sobald ich das Zeug Linken möchte kommen folgende Fehler:

Error[000] D:\assistant\prog_pic\myProg.obj 34 : Fixup overflow referencing psect bigbss (loc 0x7E (0x40+62), size 1, value 0x5FF)

Error[000] myProg.rlf 249 : Fixup overflow in expression (loc 0x4 (0x4+0), size 1, value 0x5FF)

Bei der Dokumentation vom HI- TECH PICC-18 compiler heisst es unter

fixup overflow referencing folgendes:
The linker was asked to relocate (fixup) an item that would not fit back into the space after relocation. For example this will occur if a byte size object is initialized wih an address that bigger than 255

und bei
fixup overflow in expression folgendes:
The linker was asked to relocate(fixup) an item that would not fit back into the space after relocation. For example this will occur if a byte size objects is initialized withan address that is bigger than 255. This error occurred in a complex expression.

Was muss ich machen um dieses Problem zu beheben?

Vielen Dank für eure Hilfe

Gruss

01.07.2005, 19:17
Hallo,
ich fürchte, es liegt daran, dass toto und _toto nicht wirklich das gleiche sind. Ich kenne den Hi-Tech-Compiler nicht genau, ich weiss aber, dass man bei der Variablenübergabe an Assemblerroutinen Vorsicht walten lassen muss.
Ich würde versuchen das Problem so zu umgehen:
deriniere einen Zeiger für CHAR-Variablen
legen den Zeiger für toto da ab
übergib den Zeiger an die Assemblerroutine

GRUSS
INGO

flown
04.07.2005, 08:28
Hallo,
vielen Dank für deine Antwort. Doch nun habe ich ein weiteres Problem, wenn ich ein Wert als Parameter übergebe, finde ich diesen im Arbeitsregister. Aber wo wäre dann, wenn ich zwei Parameter übergeben möchte, den zweiten Parameter zu finden?

Vielen Dank