Keil inline asm

#5354577
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
#5354664
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
#5354670
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
#5354829
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...
#5354849
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
Angehängte Dateien:
#5355028
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
#5355194
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.
#5355208
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren