Forum: Mikrocontroller und Digitale Elektronik sscanf surcery g++


von af (Gast)


Lesenswert?

Ich habe ein Problem, sobald ich die sscanf Funktion benutze, bekomme 
der stm32 einen HardFault error.

Die Compiler Optionen sind folgende:
-mcpu=cortex-m3 -mthumb -Wall -ffunction-sections -O0 -g3 
-mfloat-abi=soft


Die ganzen Sachen, die ich im Projekt auswerten soll, ist mit pointern, 
atoi etc. auszuwerten ist mühsam und fehleranfällig. Deshalb möchte ich 
auf sscanf nicht verzichten. Gibt es da noch irgendeine Chance? Gibt es 
vielleicht abgespeckte sscanf Funktionen die extra für embedded Bereich 
gemacht sind?
von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Moin,

zieg mal deinen Code. Kann es sein das einer der Pointer die du der Fkt 
übergibst auf keine gültige Speicheraddresse zeigt? Läuft sscanf in 
einem minimal Beispiel in dem du nur einen int o. ä. einliest?

MfG

Tec
von Karl H. (kbuchegg)


Lesenswert?

Den beliebten Fehler, an sscanf keine Pointer zu übergeben hast du ganz 
sicher nicht gemacht?

falsch

 int i
 sscanf( "%d", i );

richtig

 int i;
 sscanf( "%d", &i );
von af (Gast)


Lesenswert?

>Läuft sscanf in
>einem minimal Beispiel in dem du nur einen int o. ä. einliest?
Nein z.B. läuft nicht:
1
int i;
2
char str[20];
3
4
sscanf("hello 0815", "%s%d", str, &i);
5
printf("%s %d", str, i);
von af (Gast)


Lesenswert?

Ich habe jetzt zufälligerweise die o.g. Funktion in main() ausprobiert
bevor LwIP initialisiert wird und siehe da, es kommt zu einer printf 
Ausgabe und dann zum  HardFault error. Ich vermute, dass für die sscanf 
irgendwo ein buffer fester Größe reserviert wird? Und durch dir 
Speicherreservierung des LwIP Stacks kommt es zum HardFaul? kann man die 
Buffergröße vom sscanf beeinflussen?
von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Benutzt du ein RTOS? Wenn ja Stackoverflow? Läuft LwIP ohne sscanf?

MfG

Tec
von af (Gast)


Lesenswert?

Nein, LwIP läuft ohne RTOS. Habe jetzt MEM_SIZE von 8x1024 auf 2x1024 
reduziert, jetzt geht es auch mit sscans.

Vielen Dank
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.