mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik C18 c_var in inline assembler benutzen


Autor: Ron Napp (blitzgeist)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

kann mit jemand an hand eines code beispiels zeigen, wie ich beim C18 
compiler eine c var im inline assembler benutze?
extern unsigned int ShiftCnt; 
_asm  
  DECFSZ ShiftCnt, 1, ACCESS
_endasm

Das funzt aber nicht.

lg,
blitzgeist

Autor: Katzeklo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: Ron Napp (blitzgeist)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Katzeklo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Symbol A?

Seltsam, aber jetzt wo du es sagst:

DECFSZ ShiftCnt, 1, 1

Geht's so?

Autor: Ron Napp (blitzgeist)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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
void Service2Timer0(void)
{
extern unsigned int A;

_asm
  DECFSZ A, 1, 1
_endasm
}

Autor: Ron Napp (blitzgeist)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
keiner mehr ne ahnung? ...

Autor: Katzeklo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> • 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...

Autor: Ron Napp (blitzgeist)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.