GCC Optimierungs problem!

OP #698484
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
#698505
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.