Hallo zusammen, kann mit jemand an hand eines code beispiels zeigen, wie ich beim C18 compiler eine c var im inline assembler benutze?
1 | |
2 | |
3 | |
4 | |
Das funzt aber nicht. lg, blitzgeist
|
Anzeige
|
C18 c_var in inline assembler benutzenHallo zusammen, kann mit jemand an hand eines code beispiels zeigen, wie ich beim C18 compiler eine c var im inline assembler benutze?
Das funzt aber nicht. lg, blitzgeist
Gast
#528605
Ohne jetzt viel Plan zu haben, ist es doch so, dass der PIC18 ein 8-Bit Controller ist. Dein "DECFSZ ShiftCnt, 1, ACCESS" decrementiert hier aber eine 16-Bit Variable => kann nicht gehen. > Das funzt aber nicht. Das ist natürlich sehr präzise... Hallo, habe den PIC18F2550. Den Befehl habe ich aus dem instruction set entnommen... Was net funzt ist: Error - could not find definition of symbol 'A' in file 'C:\Test\fw\_output\user.o'. Errors : 1
Gast
#528619
Symbol A? Seltsam, aber jetzt wo du es sagst: DECFSZ ShiftCnt, 1, 1 Geht's so? achso... ja symbol a war schon wieder mein nächster versuch =) probiere
es mal so wie du es angegeben hast...
.
.
.
ne, gleiche Fehlermeldung...
aber evtl. kannst du damit was anfangen?
Given the following written in C:
unsigned int c_variable;
void main (void)
{
...
}
to modify the variable c_variable from assembly, an external declaration
must be
added for the variable in the assembly source file:
EXTERN c_variable ; defined in C module
MYCODE CODE
asm_function
MOVLW 0xff
; put 0xffff in the C declared variable
MOVWF c_variable
MOVWF c_variable+1
done
RETURN
; export so linker can see it
GLOBAL asm_function
END
3.2.5.4 USING ASSEMBLY VARIABLES IN C
When using assembly variables in C:
• The variable must be declared as global in the ASM module.
• The variable must be declared as extern in the C module.
• If case sensitivity is disabled for the ASM module, the variable must
be declared
as ALL CAPS in the C module.
ja und das ist mein code
keiner mehr ne ahnung? ...
Gast
#528700
> • The variable must be declared as global in the ASM module. > • The variable must be declared as extern in the C module. Meine Vermutung: es funktioniert nicht mit inline Assembler. Wirst wahrscheinlich ein eigenes File für die Assemblerfunktion anlegen müssen. Das Compiler-Manual ist zu dem Thema ist ja wirklich nicht der Hammer... Eigenes File anlegen? Hmm... ist es dann möglich zB. den Befehl INCF cnt,1,ACCESS auszuführen? cnt ist eine c variable mit dem wert 0. Wie mache ich das kurz beschrieben ein eigenes asm-file anlegen? Mein eigendliches Problem ist nämlich: habe ein var byte x[4]. jetzt schiebe ich 8 byte in x[0]. Nun wollte ich mit INCF MemoryAdr, 1, ACCESS das nächste Byte im Speicher ansprechen und über ADDWF MemoryAdr, 1, BANKED mein neues Bit an die nullte Stelle von x[1] addieren. Aber wie kann ich die MemoryAdr erhöhen? wollte das eben über diese c Variable machen. kurz gesagt: wie kann ich eine adresse eines speichers in eine zelle schreiben? Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|