Forum: Compiler & IDEs attribute


von Konstantin G. (kostik)


Lesenswert?

Hi,

void SIG_OUTPUT_COMPARE1A( void ) _attribute_ ( ( signal, naked ) );
void SIG_OUTPUT_COMPARE1A( void )
{
  vPortYieldFromTick();
  asm volatile ( "reti" );
}

die attributes werden vom Compiler hartnäckig ignoriert.
Woran liegt's?
wer kann helfen?

Gruß!!!

von Stefan (Gast)


Lesenswert?

signal und naked zugleich sind IMHO widersprüchlich.

Mit signal weist du den Compiler an einen Prolog/Epilog passend für eine 
Signalroutine zu erzeugen und mit naked weist du ihn an den 
Prolog/Epilog wegzustrippen... Entscheide dich ;-)

von Konstantin G. (kostik)


Lesenswert?

Hallo,

Er ignoriert die Attributes auch wenn sie einzeln sind.

/*
 * Manual context switch.  The first thing we do is save the registers
 * so we can use a naked attribute.
 */
void vPortYield( void ) __attribute__((naked));
void vPortYield( void )
{
  portSAVE_CONTEXT();
  vTaskSwitchContext();
  portRESTORE_CONTEXT();

 // asm volatile ( "l.rfe" );
}


von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

> Er ignoriert die Attributes auch wenn sie einzeln sind.

Beweise?

von Konstantin G. (kostik)


Lesenswert?

hallo Jorg,
meintest du mit Beweise das?

/var/vob/hajorp/orpsoc/vob/units/orp-gcc/bin/or32-uclinux-gcc -c 
-I/include -DOR1K -Wall -Wstrict-prototypes 
-Werror-implicit-function-declaration -fomit-frame-pointer 
-fno-strength-reduce -O2 -g -pipe -fno-builtin -msoft-mul -msoft-div 
-nostdlib ../portable/port.c
../portable/port.c:57: warning: `naked' attribute directive ignored
../portable/port.c:58: warning: `naked' attribute directive ignored
.
.
.

Gruß

von Stefan (Gast)


Lesenswert?

Welche Compilerversion verwendest du? 'naked' kenne ich für ARM und AVR 
Targets.

Dein Target ist OpenRISC 1000? Ist das naked attribute in diese 
Toolchain überhaupt eingebaut?

http://www.opencores.org/projects.cgi/web/or1k/gnu_toolchain_port

von Konstantin G. (kostik)


Lesenswert?

Stefan wrote:
> Welche Compilerversion verwendest du? 'naked' kenne ich für ARM und AVR
> Targets.
>
> Dein Target ist OpenRISC 1000? Ist das naked attribute in diese
> Toolchain überhaupt eingebaut?
>
> http://www.opencores.org/projects.cgi/web/or1k/gnu_toolchain_port

Wenn nicht, wo kann man es sehen und wie kann man es da einbauen?

Die version ist 2.95.3, das Target ist OpenRISC 1000 bzw. 1200

von Patrick D. (oldbug) Benutzerseite


Lesenswert?

Das steht vermutlich im Compilermanual, also RTFCM (F = Fine!).

von Stefan (Gast)


Lesenswert?

Wenn du es im Manual nicht findest, kann du auch das Developer-Team 
fragen. Per Email direkt oder über die Mailing List oder das Forum...

Mit Version 2.95.3 solltest du dort aber nicht mehr antreten ;-) Unter 
dem aufgeführten Link sind sie beim gcc bereits bei Versionsnummer 3.4.4

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.