www.mikrocontroller.net

Forum: Compiler & IDEs GCC Optimierungs problem!


Autor: Peter Pan (micropirate)
Datum:

Bewertung
0 lesenswert
nicht 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)

void DisplayStringFlash(PGM_P p_flashstring, ...)
{
  va_list ap;
  BYTE len= strlen_P(p_flashstring);
  char* tempstring;
  len+=4;  //safty for word
  //Allocate new memory if memory already exist
  if(displaybuffer.buffer)
  {
    //buffer needs to be deleted and newly allocated
    while(displaybuffer.bufferlock){};
    free(displaybuffer.buffer);
    displaybuffer.buffer=(char*)malloc(len);
    tempstring=(char*)malloc(len);
  }
  else
  {
    //buffer does not exist an need to be allocated
    displaybuffer.buffer = (char*)malloc(len);    
    tempstring=(char*)malloc(len);
  }
  strcpy_P(tempstring,p_flashstring);
  va_start(ap,tempstring);
  while(displaybuffer.bufferlock){};
  vsprintf(displaybuffer.buffer,tempstring,ap);  <- Das problem sitzt hier denk ich 
  va_end(ap);
  free(tempstring);
  displaybuffer.direction=LEFT;
  displaybuffer.scroll=1;
  displaybuffer.startindex=0;
}


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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andreas K. (a-k)
Datum:

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

Beitrag "Re: WINAVR GCC Optimierungs Problem"

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.