sprintf bringt nach Compilierung im Relaese Mode nur "?" als Wert

OP #4696461
Hallo,

ich arbeite mit AtmelStudio 6.2 und dem AVR Compiler. Bis zur 
Vertigstellung meines Programms arbeitete ich immer im Debug Modus. Da 
funktioniert alles wie gewollt. In meinem Programm arbeite ich mit allen 
Spannungen in Millivolt. Die Ergebnisse der Spannungen sende ich via 
GSM-Modul als SMS auf mein Smartphon. Dort sollen die Spannungsangaben 
in Volt erscheinen. Diese Wandlung und das Zuammensetzen des zu 
übertragenden String geschieht mit folgender Programsequenz.

1
#define LiIon  1
2
#define Text_buffer_size 160  
3
char Text[Text_buffer_size];    // Sendebuffer
4

5
  eeprom_read_block(Text, eeName, sizeof(eeName));
6
// LiIon Voltage 
7
  if(Flags116 & FMLiIon_alarm)
8
  {
9
    strcat_P(Text,PSTR("-> "));
10
  }
11
  sprintf(U_array_fl[LiIon],"%4.2f",((double)mVLiIon/1000));
12
  strcat_P(Text,PSTR("Backup battery: "));
13
  strcat(Text,U_array_fl[LiIon]);
14
  strcat_P(Text,PSTR("V\n"));
15

16
// Main Battery Voltage
17
  if(Flags116 & FMmb_alarm)
18
  {
19
    strcat_P(Text,PSTR("-> "));
20
  }
21
  strcat_P(Text,PSTR("Main battery: "));
22
  sprintf(U_array_fl[Akku],"%5.1f",((double)MainBatValue/1000));
23
  strcat(Text,U_array_fl[Akku]);
24
  strcat_P(Text,PSTR("V\n"));
25

26
  SMS_Send(TelNr,Text);

Jetzt habe ich in den Relaese Modus gewechselt und habe nun folgendes 
Problem. Auf meinem Smartphon erscheint statt der Spannungswerte nur ein 
"?". Ich vermute dass ich einen Fehler in der Konfiguration im 
AtmelStudio habe. Kann diesen jedoch nicht finden. Kennt jemand dieses 
Problem und kann mir weiterhelfen?

Gruß
Sebastian
Gast #4697084
Wie bereits geschrieben, deuten die Fragezeichen auf fehlende 
Unterstützung der Floating-Point Operationen (in printf) hin. Das ist 
übrigens die Default-Vorgabe der Toolchain, solange man es nicht 
ausdrücklich aktiviert.
Gast #4697416
Axel R. schrieb:
> "Wie geht das?" wird sicher gleich gefragt werden ...
>
> Nein - ich weis es auch nicht

Hat Stefan doch schon geschrieben:

Stefan U. schrieb:
> Im Makefile:
>
> # Enable floating-point support in printf
> LDFLAGS += -Wl,-u,vfprintf -lprintf_flt -lm

Und wenn man kein Makefile hat trägt man die entsprechenden Optionen 
halt in seiner IDE ein.
#4697438
guest schrieb:
> Axel R. schrieb:
> Stefan U. schrieb:
>> Im Makefile:
>>
>> # Enable floating-point support in printf
>> LDFLAGS += -Wl,-u,vfprintf -lprintf_flt -lm
>
> Und wenn man kein Makefile hat trägt man die entsprechenden Optionen
> halt in seiner IDE ein.

Falls das make-File tatsächlich benutzt wird. Es ist einfach verdächtig, 
wenn eine Build-Version geht, die andere nicht.

Ich benutze immer Eclipse, daher bin ich kein guter Ratgeber für die 
AtmelStudio-Details, kenne aber das Problem aus meiner Welt.

Zum Test einfach mal aus dem make-File rausnehmen. Wenn Debug-Build dann 
immer noch funktioniert ...
Gast #4697519
Carl D. schrieb:
> Falls das make-File tatsächlich benutzt wird. Es ist einfach verdächtig,
> wenn eine Build-Version geht, die andere nicht.

Da er das Atmel Studio benutzt w

Carl D. schrieb:
> Falls das make-File tatsächlich benutzt wird. Es ist einfach verdächtig,
> wenn eine Build-Version geht, die andere nicht.
>
> Ich benutze immer Eclipse, daher bin ich kein guter Ratgeber für die
> AtmelStudio-Details, kenne aber das Problem aus meiner Welt.

Da er das Atmel Studion benutzt, wird wohl eher kein Makefile benutzt 
(bzw. es wird vom Studio dynamiych erzeugt).
Im Atmel Studio kann man in den Projekteigenschaften die meisten 
Parameter halt für jede Build-Konfiguration einzeln einstellen. Und wenn 
man da nicht aufpasst ist es eigentlich auch gar nicht mehr so 
verdächtig wenn nur eine davon geht.
#4697816
guest schrieb:
> Da er das Atmel Studion benutzt, wird wohl eher kein Makefile benutzt
> (bzw. es wird vom Studio dynamiych erzeugt).
> Im Atmel Studio kann man in den Projekteigenschaften die meisten
> Parameter halt für jede Build-Konfiguration einzeln einstellen. Und wenn
> man da nicht aufpasst ist es eigentlich auch gar nicht mehr so
> verdächtig wenn nur eine davon geht.

Meine Rede!
Ich hab auch hauptsächlich geschrieben wie man diese "Theorie" 
überprüfen kann.
Bei Eclipse-CDT kann man solche Settings auch "für alle Konfigurationen" 
machen, Default ist aber die aktuelle. Mangels Debug-Hardware mache ich 
in der Regel nur "Release"-Builds, damit immer nur eine Konfiguration, 
ergo dieses Problem nicht.
OP #4698646
Hallo,

erstmal Entschuldigt, dass ich mich so lange nicht gemeldet habe. War 
bis heute Abend unterwegs. Und ein großes Danke für eure Hilfe.

Ja, der Fehler liegt meistens beim Programmierer. Ich arbeite nicht mit 
selbstgeschriebenen Makefiles sonder stelle im AtmelStudio im 
Projektmanager\Toolchain die Parameter ein. Und genau da habe ich nicht 
beachtet, dass im Release Modus das Häkchen in "Use vprintf 
Library(-WI,-u,vprintf) nicht gesetzt war.

Nochmals vielen Dank allen

Gruß
Sebastian

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.