Forum: Compiler & IDEs SprintF und sscanf und das programm wird riesig wieso


von Killer-Loop (Gast)


Lesenswert?

Also folgende Geschichte wenn ich in meinem Programm ein array in eine 
variable umwandle und diese dann wieder zurück um sie an den usart zu 
schicken wird mein programm gleich 10k groß.
wieso???
und kann ich das irgend wie umgehen zum beispiel mit einer eigenen 
funktion....

ich probier schon selber nen bsichen kriegs aber seit zwei stunden nicht 
wirklich gebacken.

danke schon mal für die antwort

cya

von Peter (Gast)


Lesenswert?

mach mal ein beispiel? Sind es es float werte die umwandelst?

von Killer-Loop (Gast)


Lesenswert?

hoi

  puffer ist mein char array was ich vom usart kriege
        und mit putstring packe ich es wieder auf den usart

        sscanf(puffer, "%d", &test);
  test++;
  putstring("\n\r Berechnete Ausgabe ");
  sprintf(puffer, "%d", test);


danke schonmal

von Peter (Gast)


Lesenswert?

verwende mal atoi und itoa das solllte wesentlich sparsarmner sein, aber 
10k kommen mir merkwürdig vor, hast du die optmierung eingeschaltet?

von Matthias K. (matthiask)


Lesenswert?

>wird mein programm gleich 10k groß

Mehr Details, Programm, µC-Familie?

sprintf usw. verbraucht immer eine Menge Speicher. Manche Compiler 
bringen Small- oder Tiny-Varianten mit. Meist kann man sich zur 
Formatierung aber selber eine optimierte Routine schreiben.

Andererseits, ist freier Speicher = verschenkter Speicher, wenn Du genug 
hast.

von Peter D. (peda)


Lesenswert?

Peter schrieb:
> aber
> 10k kommen mir merkwürdig vor

Die CPU hat er ja nicht genannt.
Das wird warscheinlich ein ARM sein, mit 32bit Befehlen kriegt man 10k 
schnell voll.

Auf nem 8051 wäre das natürlich entschieden zuviel, selbst ohne 
Optimierung.


Peter

von Killer-Loop (Gast)


Lesenswert?

danke für die schnelle antworten also

controller atmega32

programm welches meinst du damit ????

und wo finde ich im programmers notepad die speicheroptimierung ???

ich check das gleich mal mit atoi und itoa

cya

von Peter D. (peda)


Lesenswert?

Killer-Loop schrieb:
> controller atmega32

Linkerschalter:
-lm


Peter

von Killer-Loop (Gast)


Lesenswert?

ok danke schonmal

ich denke es wird mit atoi und itoa gehen.
lese mich gerade da ein
bekomme es aber noch nicht wirklich gebacken. danke für alles bist jetzt

von Killer-Loop (Gast)


Lesenswert?

Danke für alles ich habs jetzt geschafft.
Macht auch Sinn warum des teil so groß geworden ist.

Ich hab vorhin einfach nur die syntax von atof und atoi verplant.

das mit der speicheroptimierung hat auch gepasst jetzt ist das file 
sogar noch kleiner und ich krieg noch den rest vom projekt in den 
microcontroller.

also nochmal vielen dank

hier noch kurz die syntax falls es nochjemanden giebt der so verplant 
ist wie ich, was ich nicht vermute.

  putstring(puffer);
  test = atoi(puffer);
  test++;
  itoa( test, puffer, 10 );

cya

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Matthias K. schrieb:
> sprintf usw. verbraucht immer eine Menge Speicher.

Der Grund ist, dass sie den Formatstring zur Laufzeit auswerten und
daher alle möglichen Formatierungs-Routinen "vorhalten" müssen, egal,
ob diese am Ende benutzt werden oder nicht.

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.