Gast
#179617
Hallo, ich würde gerne bestimmte Konstanten, die ich in einem C header file mit #define definiert habe im Inline Assembler verwenden. Weiss jemand, ob das möglich ist und wenn ja wie? Danke!
|
Anzeige
|
C Konstanten mit Inline Assembler verwenden
Gast
#179617
Hallo, ich würde gerne bestimmte Konstanten, die ich in einem C header file mit #define definiert habe im Inline Assembler verwenden. Weiss jemand, ob das möglich ist und wenn ja wie? Danke!
Gast
#179618
Hi da jedes C-File erstmal durch den Präprozessor geht sollte das kein Problem sein. Matthias
Gast
#179619
Nu ja, Vorsicht. Klar geht jedes C-File durch den Präprozessor, aber innerhalb von Strings finden natürlich keine Ersetzungen statt. Inline-asm-Anweisungen sind aber erstmal Strings. Aber als Operand zu einer inline-asm-Anweisung sollten sie taugen -- bedingt jedenfalls. Dinge wie die Makros für die Portnamen taugen dort nicht direkt, da sie zu ziemlich verqueren Typecast expandieren, aber auch dafür gibt es Lösungen einschließlich Beispielen in der Doku. Herr Namenlos, am besten, du beschreibst lieber erstmal dein Problem ein wenig mehr. OK, meistens kommt dann raus, dass du den inline asm gar nicht erst brauchst :-), aber das ist 'ne andere Baustelle.
Gast
#179620
Hi, danke erst mal für die Antworten. Mein genaues Problem liegt darin, dass ich im C Code an einer bestimmten Stelle unwiederruflich an eine Adresse springen will, die an einer ganz bestimmten Adresse im Speicher abgelegt ist. Es sind quasi 2 unabhängige Programme, die nur über die abgelegte Einsprungadresse miteinander verknüpft sind und sonst nichts voneinander wissen. Im Moment realisiere ich das mit dem Inline Assembler ala "br &0FDFEh". Aufgrund der Übersichtlichkeit würde ich die Adresse gern als Konstante definieren, damit der Code später leichter angepasst werden kann. Wenn ich das richtig verstanden habe, meinst du, dass man eventuell über eine String Operation die Assembleranweisung und den Operand verknüpfen könnte. Auf diese eigentlich naheliegende Idee bin ich nicht gekommen. Danke! Allerdings erzeugt mir das denke ich zuviel Code Overhead. Das ist mir die Sache dann nicht unbedingt wert. Aber vielleicht ist mir auch schon geholfen, wenn ich die gesamte Assembleranweisung zentral im Header File ablege und im C Code ersetzen lasse. Das wäre ein Kompromiss. Es geht mir halt nur um eine einfache Wartbarkeit und möglichst zentrale Anpassung.
Gast
#179621
Hi du könntest das ganze auch über einen Funktionspointer lösen. Matthias
Gast
#179622
Hi, mit Funktionspointern habe ich gerade erst angefangen mich zu beschäftigen, da ich die wage Idee hatte, dass man es so lösen könnte. Ich werde mal ein wenig in diese Richtung recherchieren. Danke!
Gast
#179623
void
jumpsomewhere(void)
{
void const (*funcptr)(void) = (void const (*)(void))0x1234;
funcptr();
}
Gast
#179624
#define const 0xf7
unsigned char tmp = 0x7f;
asm volatile(
"andi %0, %A1 \n\t"
: "=r" (tmp)
: "K" (const)
);
...brauchst du es genauer Erklärt?
Gast
#179625
"const" umzudefinieren, ist sicher keine so gute Idee. ;-)
Gast
#179626
ich weiss... ...bin wie mir nach dem posten aufgefallen ist eh am thema vorbeigeschrammt... :-) Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|