MSP430 double in char um wandeln

#396759
Lesenswert?

Gar nicht.
Weil ein einziger char nur ein einzelnes Zeichen aufnehmen
kann.
Aber du kannst ein char-Array benutzen um darin eine String-
Repräsentierung des double abzulegen.

  char Buffer[28];
  double d = 2.0;

  sprintf( Buffer, "%lf", d );

Je nach Compiler gibt es meist auch noch andere Funktionen
die meist dtoa() oder _dtoa() oder so ähnlich heissen.
Gast #396760
Lesenswert?

klar, das mit den chars. hätte ich klarerausdrücken sollen. das man da
ein array benötigt war mir lar.

ich nutze iar, aber da habe ch leider noch keiner derartige fertige
funktion gefunden. atof und atoi gibts da, aber anscheinend nicht
umgekehrt.

in welcher form wird denn ein double gespeichert, vielleicht kann man
sich ja ne eigene funktion basteln.
Gast #396761
Lesenswert?

@rafael

das double format ist ein floating-point format.
ne eigene funktion ist machbar (allerdings auch nur mit
float-funktionen, und die dauern naturgemäss recht lange)
sprintf ist (wie karl-heinz meinte) schon ne gute wahl. vor allem weil
man noch formatangaben (anzahl stellen/genauigkeit) machen kann
Gast #396762
Lesenswert?

hi, das läuft auf IAR und MSP430F169 für LCD

#include <stdio.h>
void sendDouble(double a)
{
    int z,b;
    char txtDouble[33]="                                ";
  //sprintf (txtDouble,"%.2E",a);
  //sprintf (txtDouble,"%.3g %%",a);
  sprintf (txtDouble,"%.1f",a);
  for (z=0; z<=15;z++)
        {
           b=txtDouble[z];
           sendChar(b);
           if(b==0x00)z=15;
        }
}

void sendChar(char zeichen)
{
    P4OUT = zeichen;
    P5OUT=0x05;         // RS und E high, R/W low
    waitLCD(50);
    P5OUT&=~0x04;       // und jetzt auf low
}

viel Spass
Gast #396764
Lesenswert?

die frage ist nur wieviele stellen hinter dem komma du brauchst.
zunächst kannst du durch einen cast die stellen vor dem komma in eine
variable stelle

lPostDigits = (long)dDouble;

diese auf dem display darzustellen sollte kein problem sein.

nun extrahierst du die stellen hinter dem komma

dPastDigits = dDouble - (double)lPostDigits;

da du dir ja daüber bewust bist, wieviele stellen hinter dem komma
angezeigt werden sollen kanst du nun entsprechend multiplizieren

for ( i = 1; i < iNumDigits; i++)
  pot = pot * 10;

lPastDigits = (long)(dPastDigits * pot);

nu hast du wieder einen integer der relativ einfach darzustellen ist.

gruß
Tenner
Gast #396765
Lesenswert?

hallo,

ich habe mal die version von marcel versucht. leider stoße ich da
anscheinend an die grenze von meinem kostenlosen compiler. ich erhalte
immer folgende fehlermeldung, wenn ich sprintf verwende.

Fatal Error[e89]: Too much object code produced (more than 0x1000
bytes) for this package

so wie es scheint liegt das an der speicherbegrenzung des compilers
oder so.

mal sehen.
Gast #396766
Lesenswert?

Ich glaube in einer Version von IAR war diese Fehlermeldung ein Bug.
Welche Version benutzt du denn?
Wie groß ist denn der Code den du generierst (kann im Message Fenster
angezeigt werden)?
Gast #396767
Lesenswert?

Die Lib ist halt zu groß für den kostenlosen Kompiler. Die Meldung
stimmt schon so. Der kann nur 4096 Byte Programmcode erzeugen.
Nimmste halt den GCC. In Verbindung mit Eclipse fast genauso
komfortabel wie IAR.
Gast #396769
Lesenswert?

Die Größe zeigt er leider nur an, wenn es durch läuft. Wenn´s zu groß
ist, kommt vorher schon der Abbruch, und es wird nicht weiter
kompiliert.

Was für einen Debugger habt ihr denn? Also der USBFET von TI klappt
wunderbar.
Gast #396770
Lesenswert?

Erst mal sprintf wieder raus und dann noch mal durchlaufen lassen und
Code größe anzeigen lassen (Tool->Options->Messages->Show.. ->
"All")(IAR 3.20).
Wenn er dann schon nahe bei 4k ist, kann es wirklich an der größe
liegen.
Gast #396771
Lesenswert?

hallo,

wenn ich das sprintf raus nehme und das ganze durchlaufen lasse,
erhalte ich folgendes.

 1 046 bytes of CODE  memory
 88 bytes of DATA  memory (+ 22 absolute )
 74 bytes of CONST memory


nimmt denn das sprintf so viel speicher in anspruch?
Gast #396773
Lesenswert?

Da muss ich dann doch wohl mal auf GCC umsteigen, obwohl ich den IAR
klasse finde.

Weiß jemand zufällig, was so eine Lizenz von IAr kostet oder ob es da
vielleicht so etwas wie eine Studenten-Version von gibt.

Grüße
Rafael
Gast #396774
Lesenswert?

Eine volle IAR Lizenz kostet knapp 3000&#8364; netto. Laut TI-Homepage
gewährt IAR Hochschulen und Studenten 80% Rabatt.

Aber GCC kann ich mittlerweile empfehlen. Mit Eclipse macht das richtig
Spaß und man hat noch paar mehr Möglichkeiten (SVN zum Beispiel)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren