PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Parameterübergabe C-Programm -> Assembler Source



mfischer
03.10.2007, 00:39
Hallo Atmel-Freunde,

dieses Problem treibt mich noch in den Wahnsinn. Ich möchte aus meinem in C verfassten Programm Funktionen einer Assembler-Source-Datei aufrufen. Dabei sollen Parameter übergeben werden. Soweit ist es auch kein Problem, aber wenn ich z.B.

sbi PORTB, PB4

dynamisch realisieren möchte, komme ich nicht weiter.

PORTB soll fix sein, aber die Position des Bits (PB4) möchte ich übergeben. sbi erwartet aber einen "constant value" und kein Register. Der Befehl "sbi PORTB, 4" funktioniert ja auch. Wie kann ich diese einfache Dezimalzahl nun am einfachsten übergeben?

Ich glaube fast, die Frage könnte hier als Scherz aufgefasst werden, aber ich stehe erst am Anfang der Assembler-Programmierung 8-[

gummi_ente
03.10.2007, 00:56
Hallo mfischer,

nicht verzweifeln, es liegt nicht an Dir, sondern daran, das der µC natürlich wissen muß welches Bit zu setzen ist. Der Befehl erwartet einen konstanten Ausdruck.

Eine Lösungsmöglichkeit, in Assembler das Bit ein ODERN


Register xx enthält Bitmuster von C-Code

IN ax,PINB
OR ax,xx
OUT PORTB,ax

oder in C mittels switch case den richtigen Konstanten-Ausdruck verwenden (nicht so schön).

izaseba
03.10.2007, 11:16
Hallo gummi_ente,
Der Ansatz ist schonmal nicht schlecht, aber Achtung manchmal fällt man damit ziemlich auf die Schnauze.
Ich habe vor kurzem diese Erfahrung gemacht Klick mich (https://www.roboternetz.de/phpBB2/viewtopic.php?t=34326)

Gruß Sebastian

mfischer
03.10.2007, 16:52
Danke für Eure Antworten. Leider bin ich aber noch nicht auf die praktische Lösung gestoßen.

Ich arbeite mit einem Tiny2313. Sein PORTB Register würde demnach auf 0x18 liegen, richtig? An welcher Stelle würde ich nach PINB suchen?

Die C-Variante des Konstantenwählens hab ich auch nicht verstanden. Wie ist es denn möglich, der ASM-Source eine Konstante zu übermitteln, die dann nicht in einem Register liegt. Vielleicht über Inline-Assembler, aber das wollte ich eigentlich vermeiden.

Nochmals danke für Eure Mühe.
Viele Grüße,
MF