Forum: Mikrocontroller und Digitale Elektronik long zu ascii - ARM7


von gast (Gast)


Lesenswert?

Hallo,

ich habe eine Frage:

Wenn ich im Speicher eine long-Zahl habe, zb 123456 und ich will diese 
in einen String konvertieren, wie mache ich das?

Im Voraus danke für eine Antwort!!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

In C:

itoa oder (s)printf

von gast (Gast)


Lesenswert?

Nein, ich muss die Funktion in Assembler für ARM7 realisieren!
Danke!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das hättest Du auch gleich schreiben können. Das Grundkonzept ist immer 
dasselbe, ob nun ein 8-Bit-Prozessor oder ein 32-Bit-Prozessor verwendet 
wird, daher solltest Du das Funktionsprinzip hier im Forum beschrieben 
finden - ist ja nicht so, daß die Frage das erste Mal gestellt würde.

Achja, und was bitte hat das mit "PC-Programmierung" zu tun?

Nichts, also -> verschoben.

von Karl H. (kbuchegg)


Lesenswert?

gast wrote:
> Nein, ich muss die Funktion in Assembler für ARM7 realisieren!
> Danke!


Die Zahl sei 3587

Wieviele Tausender sind in 3587?

  3587 - 1000 = 2587          1 mal
  2587 - 1000 = 1587          2 mal
  1587 - 1000 =  587          3 mal
   587 - 1000 = -413     negativ, ergo  sind 3 Tausender enthalten

Wiviele Hunderter sind in 587

   587 - 100 = 487            1 mal
   487 - 100 = 387            2 mal
   387 - 100 = 287            3 mal
   287 - 100 = 187            4 mal
   187 - 100 =  87            5 mal
    87 - 100 = -13       negativ, ergo sind 5 Hunderter enthalten

Wieviele Zehner

    87 - 10 = 77              1 mal
    77 - 10 = 67              2 mal
    67 - 10 = 57              3 mal
    ...
    27 - 10 = 17              7 mal
    17 - 10 =  7              8 mal
     7 - 10 = -3         negativ, ergo sind 8 Zehner

Wieviele Einer sind in 7

  Einfach, das sind 7

Wie wissen also, dass in 3587 enthalten sind
3 Tausender, 5 Hunderter, 8 Zeher und 7 Einer.
Das sollte doch jetzt kein Problem mehr sein, einen String
mit den entsprechenden ASCII Zeichen zu füllen.

von Dirk (Gast)


Lesenswert?

@Rufus:
"itoa oder (s)printf"


long zu String und dann itoa? Nee, ist klar.
ltoa ist Dein Freund...

von Falk B. (falk)


Lesenswert?

Hier wird das Grundprinzip gezeigt.

AVR-Tutorial: ADC

Mfg
Falk

von Ralph (Gast)


Lesenswert?

Gibt es einen vernünftigen Grund sowas in Assembler neu zu programmieren 
?

Der einzge Grund der mir einfällt ist, das ein Prof. an der Uni, Fh, 
oder ähnliches das als Übungsaufgabe stellt.
Und dan lös es selbst, wenn du eine Lösung abschreibst lernst du es 
nicht.
Geht spätestens bei der Klausur in die sch.....

von let (Gast)


Lesenswert?

>Gibt es einen vernünftigen Grund sowas in Assembler neu zu
>programmieren ?

Nun, der GNUARM z.B. kennt kein itoa. Und wenn eine Implementierung in C
zu langsam ist...

Den Ansatz von Herrn Buchegger habe ich mal auf einem AVR umgesetzt.
Das ist deutlich schneller als das übliche Verfahren mit div/modulo.

von Ralph B. (ralph-b)


Lesenswert?

/Und wenn eine Implementierung in C zu langsam ist.../

Die paar µS unterschied zwischen der C und der Assembler Implementierung 
auf einem ARM 7 wirst du nie merken.
Wenn dein µC deshalb zu langsam ist, dann hast du etwas grundlegendes 
falsch gemacht.
==> Falscher µC ausgewählt
Benötigte und Vorhanden Resourcen passen nicht zusammen
Das kommt von erst mal Anfangen, ohne zu wissen was man macht.

von let (Gast)


Lesenswert?

Amen

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> "itoa oder (s)printf"
>
> long zu String und dann itoa? Nee, ist klar.
> ltoa ist Dein Freund...

Sorry, da war ich etwas unaufmerksam. Auf den meisten Systemen, auf 
denen ich unterwegs bin ist sizeof (int) == sizeof (long).

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.