Forum: Mikrocontroller und Digitale Elektronik Keil: keine .o-Datei wenn Embedded Assembler benutzt wird (Cortex-M3)


von Johannes (Gast)


Lesenswert?

Hallo!

Ich spiele zur Zeit mit dem LPC1768 (Cortex-M3) herum und versuche 
gerade, FreeRTOS zum Laufen zu bringen.

Wenn ich nun die Datei port.c compiliere, bekomme ich weder Warnungen 
noch Fehler, aber leider auch keine .o-Datei.

Das scheint an den Embedded Assembler-Funktionen zu liegen, die z.B. so 
aussehen:
1
__asm void vPortClearInterruptMask( void )
2
{
3
  PRESERVE8
4
5
  push { r0 }
6
  mov r0, #0
7
  msr basepri, r0
8
  pop { r0 }
9
  bx r14
10
}
Wenn ich diese Funktionen auskommentiere, bekomme ich auch wie gewünscht 
die .o-Datei. Ist allerdings eine einzige dieser Funktionen im Code, 
erhalte ich keine.

Habt Ihr nen Tipp?

Danke!

von Johannes (Gast)


Lesenswert?

Ok, jetzt habe ich die Lösung:

Ich hatte uVision und damit auch den Compiler mit wine unter Linux 
verwendet. Das klappte auch wunderbar, bis eben zu dem Embedded 
Assembler.

Unter Windows funktiert es dann so wie es soll :-)

Viele Grüße
Johannes

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

Johannes schrieb:
> __asm void vPortClearInterruptMask( void )
> {
>   PRESERVE8
>
>   push { r0 }
>   mov r0, #0
>   msr basepri, r0
>   pop { r0 }
>   bx r14
> }

Hat nichts mit Deiner eigentlichen Frage zu tun, aber der Code sieht 
sehr eigenartig aus.

Dem Linker wird vorgetäuscht, dass diese Funktion das 8 Byte 
Stackalignment sicherstellen würde, obwohl sie es offensichtlich nicht 
tut. Und das alles ohne jeden Grund, da das Stackalignment hier ohnehin 
egal ist.

Besser:
1
__asm void vPortClearInterruptMask( void )
2
{
3
  mov r0, #0
4
  msr basepri, r0
5
  bx r14
6
}

--
Marcus

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.