Forum: Compiler & IDEs Keil inline asm


von Peter W. (pe_wi)


Lesenswert?

Hallo

Ich versuche mich bei Keil mit inline asm. Es klappt aber nicht. Es wird
kein *.obj file erzeugt. Ich vermute daß das bei der freien Version mit
2K Quellcode nicht aktiv ist. Oder ich mache einen Fehler. Hat jemand
eine Idee?

#pragma src
.
.
.
main() {
.
.
 #pragma asm
   nop           // egal, was ich hier einfüge
 #pragma endasm
}

Viele Grüße
           Peter

von René K. (king)


Lesenswert?

Peter W. schrieb:
> #pragma src

"The SRC directive creates an assembler source (.SRC) file instead of 
an object (.OBJ) file. The source file may be assembled with the 
assembler."

Quelle: http://www.keil.com/support/man/docs/c51/c51_src.htm

Falls Du auch uVision benutzt, klickst Du mit dem rechten Button auf die 
Datei in Deinem Projekt -> Options for File -> Assemble SRC File

von Peter W. (pe_wi)


Lesenswert?

Ja ich nutze uVision.
Das src file wird erzeugt, aber wie geht es weiter?

Fehlermeldung:
BL51 BANKED LINKER/LOCATER V6.22 - SN: Eval Version
COPYRIGHT KEIL ELEKTRONIK GmbH 1987 - 2009
".\Objects\float.obj",
".\Objects\STARTUP.obj"
TO ".\Objects\float"
PRINT(".\Listings\float.m51") CODE( 0x4000 )
*** FATAL ERROR L210: I/O ERROR ON INPUT FILE:
    EXCEPTION 0021H: PATH OR FILE NOT FOUND
    FILE: .\Objects\float.obj
Target not created.
Build Time Elapsed:  00:00:00

Gibt es noch eine andere Möglichkeit asm Befehle im Programm einzufügen?

Gruß  Peter

von René K. (king)


Lesenswert?

Peter W. schrieb:
> Das src file wird erzeugt, aber wie geht es weiter?

Es geht genau so weiter, wie es im Manual steht. Ich zitiere erneut: 
"The source file may be assembled with the assembler."

Du lässt also den Assembler über das generierte SRC file laufen, danach 
hast Du Dein OBJ. Und wie das aus der uVision heraus funktioniert, habe 
ich Dir auch bereits gesagt. Ich wiederhole das gerne nochmal für Dich: 
Du klickst mit dem rechten Button auf die Datei in Deinem Projekt -> 
Options for File -> Assemble SRC File

von so einfach (Gast)


Lesenswert?

Peter W. schrieb:
> #pragma src

Lösch die Zeile und gut isses.

von René K. (king)


Lesenswert?

so einfach schrieb:
> Peter W. schrieb:
>> #pragma src
>
> Lösch die Zeile und gut isses.

So einfach ist es eben nicht, da ASM eingebettet ist: "The source text 
can be thought of as in-line assembly. However, it is output to the 
source file generated only when using the SRC directive."

http://www.keil.com/support/man/docs/c51/c51_asm.htm

Man kann aber einen Rechtsklick auf das Source-File tätigen und die 
Einstellungen entsprechend anpassen. Schwierig ist das auch nicht...

von Peter W. (pe_wi)


Angehängte Dateien:

Lesenswert?

Meinst Du die Einstellungen so wie auf dem Bild:


Damit komm ich schon ein wenig weiter, aber folgende Meldung:

Build target 'Target 1'
compiling test .c...
test .c(13): warning C245: #pragma respecifies primary control, ignored
assembling .\Objects\test .src...
linking...
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
    SYMBOL:  ?C_START
    MODULE:  .\Objects\STARTUP.obj (?C_STARTUP)
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
    SYMBOL:  ?C_START
    MODULE:  .\Objects\STARTUP.obj (?C_STARTUP)
    ADDRESS: 8010H
Program Size: data=9.0 xdata=0 code=24
creating hex file from ".\Objects\float"...
".\Objects\float" - 0 Error(s), 3 Warning(s).
Build Time Elapsed:  00:00:00

Gruß  Peter

von René K. (king)


Lesenswert?

Peter W. schrieb:
> Meinst Du die Einstellungen so wie auf dem Bild:

Jawohl, meine ich. Sieht gut aus. :-)

Peter W. schrieb:
> Damit komm ich schon ein wenig weiter, aber folgende Meldung:

Ja, sorry, habe ich noch vergessen zu erwähnen:
http://www.keil.com/support/docs/1980.htm

Bevor Du fragst, die Library fügst Du so hinzu:
http://www.keil.com/support/docs/3189.htm

von Peter W. (pe_wi)


Lesenswert?

Hallo René

So es funktioniert schon mal, Danke!

Was hat es mit der letzten Warnung auf sich?

Build target 'Target 1'
compiling test .c...
test .c(13): warning C245: #pragma respecifies primary control, ignored
assembling .\Objects\test .src...
linking...
Program Size: data=94.3 xdata=0 code=5615
creating hex file from ".\Objects\float"...
".\Objects\float" - 0 Error(s), 1 Warning(s).
Build Time Elapsed:  00:00:00

Die Module in der Library - wann werden diese aktiviert? Kannst Du da 
ein Beispiel nennen? Wo kann ich mich da informieren.
Vielen Danke für Deine Unterstüzung!

Viele Grüße  Peter

von Peter D. (peda)


Lesenswert?

Peter W. schrieb:
> BL51 BANKED LINKER/LOCATER V6.22 - SN: Eval Version

IMHO geht inline Assembler in der Eval nicht.

von René K. (king)


Lesenswert?

Peter W. schrieb:
> Was hat es mit der letzten Warnung auf sich?

Wie ich sehe in Deinen Screenshots sehe, hast Du die SRC Direktive 
bereits in den Datei-Einstellungen gesetzt (Checkbox "Generate Assembler 
SRC File"). Nun setzt Du die Direktive per "#pragma src" ein zweites 
Mal. Das zweite Setzen wird ignoriert, und das sagt Dir die Warnung.

Wenn Du entweder die Checkbox auf das Default zurücksetzt oder das 
"#pragma src" entfernst, verschwindet die Warnung.

von René K. (king)


Lesenswert?

Peter W. schrieb:
> Die Module in der Library - wann werden diese aktiviert?

Entweder rufst Du eine der dort implementierten Funktionen direkt auf, 
oder aber der Compiler macht das für Dich, wenn er dort implementierte 
Hilfs-Funktionen benötigt (z.B. wenn Du 16-Bit Werte dividierst).

Peter W. schrieb:
> Kannst Du da
> ein Beispiel nennen?

strlen ist zum Beispiel eine Funktion, deren Implementierung in der 
Library zu finden ist.

Peter W. schrieb:
> Wo kann ich mich da informieren.

Ein guter Anlaufpunkt findest sich hier:
http://www.keil.com/support/man/docs/c51/c51_library.htm

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.