Hi Leute ich will ein Programm für einen ARM9 Cross kompilieren. Das Programm ist für die Ansteuerung einer I2S Schnittstelle (gibt es zum Runterladen von Atmel!) Jetzt gibt es da zwei ASM Files die ich einbinden muss die allerdings für Green Hill geschrieben sind. Jetzt versuche ich die beiden Files für GCC umzuschreiben. Ok nun mein Problem: Der Compiler gibt mir folgenden Fehler aus: irq_ghs.s: Assembler messages: irq_ghs.s:28: Error: bad instruction `arm_mode_user 0x10' irq_ghs.s:29: Error: bad instruction `arm_mode_fiq EQU 0x11' irq_ghs.s:30: Error: bad instruction `arm_mode_irq EQU 0x12' irq_ghs.s:31: Error: bad instruction `arm_mode_svc EQU 0x13' irq_ghs.s:32: Error: bad instruction `arm_mode_abort EQU 0x17' irq_ghs.s:33: Error: bad instruction `arm_mode_undef EQU 0x1B' irq_ghs.s:34: Error: bad instruction `arm_mode_sys EQU 0x1F' irq_ghs.s:36: Error: bad instruction `i_bit EQU 0x80' irq_ghs.s:37: Error: bad instruction `f_bit EQU 0x40' irq_ghs.s:38: Error: bad instruction `t_bit EQU 0x20' asm_isr.s: Assembler messages: asm_isr.s:39: Error: Unknown pseudo-op: `.import' asm_isr.s:43: Error: bad instruction `irq_entry ' asm_isr.s:49: Error: bad instruction `irq_exit ' Im Programm sehen die Zeilen folgendermaßen aus: irq_ghs.s: ARM_MODE_USER EQU 0x10 ARM_MODE_FIQ EQU 0x11 ARM_MODE_IRQ EQU 0x12 ARM_MODE_SVC EQU 0x13 ARM_MODE_ABORT EQU 0x17 ARM_MODE_UNDEF EQU 0x1B ARM_MODE_SYS EQU 0x1F I_BIT EQU 0x80 F_BIT EQU 0x40 T_BIT EQU 0x20 asm_isr.s 39: .import AT91F_I2S_Handler in Zeile 43 und 49 werden jeweils nur die Makros aufgerufen die in der irq_ghs.s stehen. So und jetzt die Fragen: Weis jemand, wie ich die Variablen in irq_ghs.s deklarieren muss, damit ich den Fehler nicht mehr bekomme? Hat irgendjemand eine Idee was ich für den .import Befehl benutzen kann? Und zu guter letzt: Wie kann ich ein Makro aufrufen? Danke für die Hilfe Flosch
Soweit ich mich erinnere gehen die .s files vorher durch den C präprozessor, also einfach z.B. #define T_BIT 0x20
Erstens: Manual zum GNU Assembler (GAS) lesen. Außer dem CPP-Makro wäre noch die Assembler-Variante: label: .def value
Hi, am einfachsten: .equ ARM_MODE_USER, 0x10 usw. Dies definiert schon mal Deine Variablen. Mit dem Import und dem Makroaufruf kann ich Dir leider auch nicht weiterhelfen. Viele Grüße Willi
Ersteinmal Danke für die schnellen Antworten. Der Tip von Willi hat funktioniert. Jetzt habe ich nur noch das Problem mit dem Import und den Aufruf der Variablen! Irgendjemand eine Idee?
Ja, s.o.: RTFM. Was soll den .import original mal bewirkt haben? Möglicherweise suchst du ja #include?
So habe mal die Fehler etwas eingeschränkt, ich habe die Makros einfach in das andere File kopiert und siehe da ich habe zwei neue Fehler. Als ich diesen beiden auf den Grund gegangen bin, habe ich festgestellt, dass die Befehle #include "AT91RM9200_inc.h" #include "irq_ghs.s" nicht gehen. Darum hat er auch die Makros nicht gefunden. Hat irgendjemand eine Alternative parat? @Jörg: was das .import gemacht hat weis ich leider auch nicht, ich habe ja das Programm nicht geschrieben. Ich habe es jetzt einfach mal auf .global gesetzt und bete, dass es funktioniert ;-) Viele Grüße und danke nochmals Flosch
Benenne die Datei mit dem Suffix .S (großes S), damit sie der C-Compiler erst durch den Präprozessor und dann durch den Assembler zieht. Entscheidend ist die Schreibweise auf der Kommandozeile des Compilers.
ok das wars funktioniert. Ich hatte sie .s und nicht .S genannt. Was so ein kleines oder großes S alles ausmachen kann;-) Danke für die super schnelle Hilfe. Viele Grüße Florian
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.