Forum: Compiler & IDEs Assembler Problem in GCC


von Flosch (Gast)


Lesenswert?

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

von Werner B. (Gast)


Lesenswert?

Soweit ich mich erinnere gehen die .s files vorher durch den C
präprozessor, also einfach

z.B.

#define T_BIT 0x20

von Jörg Wunsch (Gast)


Lesenswert?

Erstens: Manual zum GNU Assembler (GAS) lesen.

Außer dem CPP-Makro wäre noch die Assembler-Variante:

label: .def value

von Willi (Gast)


Lesenswert?

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

von Flosch (Gast)


Lesenswert?

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?

von Jörg Wunsch (Gast)


Lesenswert?

Ja, s.o.: RTFM.

Was soll den .import original mal bewirkt haben?  Möglicherweise
suchst du ja #include?

von Flosch (Gast)


Lesenswert?

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

von Jörg Wunsch (Gast)


Lesenswert?

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.

von Flosch (Gast)


Lesenswert?

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