Forum: Compiler & IDEs GCC Optimierungs problem!


von Peter P. (micropirate)


Lesenswert?

Hallo
Ich bin neu im Forum und versuch mal mein Glück, weil mit meinem Latein 
bin ich definitiv am Ende. Und da ich GCC nicht aufgeben will mein 
Gesuch hier an alle besser Erfahrenen...

ich verwende WINAVR mit comilper avr-gcc (GCC) 4.1.2 (WinAVR 20070525)
sobald ich die Optimierungs option Os einschalte funktioniert diese 
ausgabe nicht mehr.
Warscheinlich liegt es an dem warning welches ich in diesem fall nicht 
wegbekommen denn es gibt keine vsprintf_P leider nicht.
(warning: second parameter of 'va_start' not last named argument)

1
void DisplayStringFlash(PGM_P p_flashstring, ...)
2
{
3
  va_list ap;
4
  BYTE len= strlen_P(p_flashstring);
5
  char* tempstring;
6
  len+=4;  //safty for word
7
  //Allocate new memory if memory already exist
8
  if(displaybuffer.buffer)
9
  {
10
    //buffer needs to be deleted and newly allocated
11
    while(displaybuffer.bufferlock){};
12
    free(displaybuffer.buffer);
13
    displaybuffer.buffer=(char*)malloc(len);
14
    tempstring=(char*)malloc(len);
15
  }
16
  else
17
  {
18
    //buffer does not exist an need to be allocated
19
    displaybuffer.buffer = (char*)malloc(len);    
20
    tempstring=(char*)malloc(len);
21
  }
22
  strcpy_P(tempstring,p_flashstring);
23
  va_start(ap,tempstring);
24
  while(displaybuffer.bufferlock){};
25
  vsprintf(displaybuffer.buffer,tempstring,ap);  <- Das problem sitzt hier denk ich 
26
  va_end(ap);
27
  free(tempstring);
28
  displaybuffer.direction=LEFT;
29
  displaybuffer.scroll=1;
30
  displaybuffer.startindex=0;
31
}


mein makefile mit allen options schaut so aus

CPPFLAGS = -g$(DEBUG)
CPPFLAGS += $(CPPDEFS)
CPPFLAGS += -O$(OPT)
#CPPFLAGS += -mint8
#CPPFLAGS += -mshort-calls
CPPFLAGS += -funsigned-char
CPPFLAGS += -funsigned-bitfields
CPPFLAGS += -fpack-struct
CPPFLAGS += -fshort-enums
CPPFLAGS += -fno-exceptions
#CPPFLAGS += -fno-unit-at-a-time
CPPFLAGS += -Wall
#CPPFLAGS += -Wstrict-prototypes
CFLAGS += -Wundef
#CPPFLAGS += -Wunreachable-code
#CPPFLAGS += -Wsign-compare
CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)
CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
#CPPFLAGS += $(CSTANDARD)


also über hilfe jeglicher art wäre ich echt dankbar, weil sonst müsste 
ich GCC wirklich aufgeben... sniff

danke mal
und liebe grüsse

von Karl H. (kbuchegg)


Lesenswert?

Peter Pan wrote:
> Hallo

> Warscheinlich liegt es an dem warning welches ich in diesem fall nicht
> wegbekommen denn es gibt keine vsprintf_P leider nicht.
> (warning: second parameter of 'va_start' not last named argument)

Diese Warnung ist aber recht eindeutig.
Sie besagt, dass der 2. te Parameter für va_start die letzte
Variable in der Argumentliste dieser Funktion sein muss.

Deine Funktion lautet:

> void DisplayStringFlash(PGM_P p_flashstring, ...)

Der Name der letzten Variablen in der Argumentliste vor der
variablen Argumentliste ist also p_flashstring

und dein va_start Aufruf sieht so aus:

>   va_start(ap,tempstring);

Da steht aber nicht p_flashstring. Da steht tempstring.

-> Du beachtest nicht wie vastart benutzt werden will.

von Andreas K. (a-k)


Lesenswert?

Und Du beachtest nicht die Regeln. Crossposting in mehrere Foren ist 
nicht so gern gesehen.

Beitrag "Re: WINAVR GCC Optimierungs Problem"

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.