Forum: Compiler & IDEs C: Assembler Aufruf mit Parametern


von Wolfram Hildebrandt (Gast)


Lesenswert?

Ich möchte dieses Assembler Programm aus dem C Programm aufrufen. Dabei 
soll ein Wert (im Bsp. 0x23) an das Assembler Programm übergeben werden.
Wie funktioniert das? Wo finde ich die 0x23?

Assembler Datei:

#define _ASSEMBLER_ 1
#define __SFR_OFFSET 0
#include <avr/io.h>
#include <ports.h>

    .global display_command
display_command:
        cbi    LCD_PORT, LCD_CLK
  cbi    LCD_PORT, LCD_DATA
  sbi    LCD_PORT, LCD_CLK

  ldi    r19, 8
dis_cmd1:
  cbi    LCD_PORT, LCD_CLK
  mov    r16, r24
  rol    r16

C:
extern void display_command(char data);

display_command(0x23);

von Joe D. (kosmonaut_pirx)


Lesenswert?

hallo,

selber nicht ausprobiert, aber schau mal hier:

http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_reg_usage

bei "Function call conventions"

lässt mich vermuten, dass R24 verwendet wird.

bye kosmo

von Wolfram Hildebrandt (Gast)


Lesenswert?

Ja, das habe ich gerade auch im Dissassembler gesehen, dass es R24 ist.
Die verwenden wohl einfach bestimmte Register je nach Anzhal der 
Parameter.

Ich vermisse im Dissassembler Fenster jedoch den Code für den Assembler 
File.
Schreibt AVR Studio den nicht mit rein?

von Rolf Magnus (Gast)


Lesenswert?

Warum machst du's nicht in inline-Assembler? Dann wird die 
Parameterübergabe von der C-Seite erledigt.

von Wolfram Hildebrandt (Gast)


Lesenswert?

Es ging um eine Grafikroutine, die ich in Assembler schreiben wollte, 
damit das Display schneller ist.
Das wäre in Inline Assembler zu aufwendig.
Mittlerweile läuft der Code und wird als externe Assembler Funktion 
eingebunden. Damit ist das Display 3,5-4 mal schneller.

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
Noch kein Account? Hier anmelden.