Keil: keine .o-Datei wenn Embedded Assembler benutzt wird (Cortex-M3)

Gast #1637928
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!
Gast #1639529
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
Persönliche Seite #1645019
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

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