Forum: Mikrocontroller und Digitale Elektronik printf verbiegen auf Port


von Klaus...(Norad) (Gast)


Lesenswert?

Hallo! an Alle,
weiss jemand zufällig wie man printf so verbiegen kann,
das man es für Ausgaben auf ein LCD-Display benutzen kann.

Ich meine anstatt auf einem Bildschirm irgend Text oder Zahlen
Auszugeben eben auf dem LCD-Display.

Hinweis:
Das Display ist an 2Port's angeschlossen.

Wenn jemand Ideen oder Ansätze hat oder sogar weiss wie es geht, her
damit.

Gruß Klaus

von Rolf Magnus (Gast)


Lesenswert?

> Hallo! an Alle,
> weiss jemand zufällig wie man printf so verbiegen kann,
> das man es für Ausgaben auf ein LCD-Display benutzen kann.

Das hängt davon ab, welche C-Library du verwendest.

von Grimm_zek (Gast)


Lesenswert?

>...her damit.

So fressen meine Elephanten das Grünzeug von den Bäumen.

von Klaus...(Norad) (Gast)


Lesenswert?

@Grimm_zek

Bitte mal einfach mal die Schnauze halten.

@Rolf
Ich hoffe Du kennst Ride von Raisonance.
Nun ich benutze die Standard  C-Library bzw. das was von Raisonance
mitgeliefert wird in der Demo Version.
Aber es ist im Prinzip mal egal ich wollte einfach nur wissen ob man
den printf befehl für eigene Ausgaben nutzbar machen kann, Ich würde
ungern das Rad neu erfinden wollen.

Vielleicht ist es auch besser eine eigen Routine zuschreiben.

Gruß Klaus

von cazy horse (Gast)


Lesenswert?

sprintf() benutzen, schreibt die printf()-Ausgabe in einen RAM-Puffer.
Von dort aus ab ans Display.

von Klaus...(Norad) (Gast)


Lesenswert?

@cazy

Danke für den Hinweis werd mich gleich mal dran machen.


Mfg  Klaus

von Michael (Gast)


Lesenswert?

<< Bitte mal einfach mal die Schnauze halten.

Der Vergleich mit den Elefanten hat wohl genau getroffen.

von Mighty (Gast)


Lesenswert?

Was sind denn das für Umgangsformen?!
Dem würde ich definitiv nichtmehr helfen...


MfG

von Klaus...(Norad) (Gast)


Lesenswert?

@Michael

Einfach die Schnauze halten wenn Du nichts Konstruktives beitragen
möchtest.

Wer sich hier über jeden Scheiß die Schnauze vereisst der ist hier wohl
falsch gepolt.

Ausserdem will ich hier niemanden beleidigen etc... wer sich jetzt auf
den Schlips getreten fühlt dafür kann ich nichts aber wer mich von der
Seite blöd anmacht dem gebe ich schon kontra.

Ausserdem weiss niemand alles und ich denke doch, das dies ein Forum
ist in dem Wissen ausgetauscht bzw. weiter gegeben darf.

Ich hab von niemanden gefordert einen kompletten Code bereitzustellen
um ihn einfach zu kopieren,  oder!

bissel will ich schon noch selber machen. ;-)

Mfg  Klaus

von Klaus...(Norad) (Gast)


Lesenswert?

@Mighty

meinste mich damit??


Mfg Klaus

von Wolfgang (Gast)


Lesenswert?

Um wieder zum Anfangsthema zurückzukommen:
@cazy horse
Wie kann man mit printf in den RAM schreiben und wie holt man den
Inhalt wieder heraus, um ihn dann an ein LCD zu schicken?
Wie es mit einem  [Feld] geht, weiß ich, aber nach stundenlangen
vergeblichen Versuchen mit printf muss ich doch hier noch einmal
nachfragen.
MfG
Wolfgang

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Hi
1
char buffer[50];
2
int foo;
3
int bar;
4
5
sprintf(buffer, "foo:%d bar:%d",foo,bar);
6
7
writeStringToLCD(buffer);

Matthias

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Sicherer:

  snprintf(buffer, 50, "foo:%d bar:%d", foo, bar);

Desweiteren ist üblicherweise bei der Beschreibung der C-Library des
Compilers beschrieben, welche Funktion für die Ausgabe einzelner
Zeichen zuständig ist, die von printf/puts/etc. verwendet wird, und wie
diese durch eine eigene zu ersetzen ist.
Möglicherweise heißt die putchar oder putc oder so.
Der Compiler liefert (zumindest in diesem Falle) eine mit, die die
Zeichen auf der seriellen Schnittstelle ausgibt.

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Hi

wobei man dann auch unbedingt den Rückgabewert von snprintf() prüfen
sollte, denn snprintf() schreibt AFAIK n Zeichen in den Puffer. Ist n
erreicht bricht die Funktion ab und schreibt kein \0 mehr in den
Puffer und das resultiert in einem unterminierten String. Als minimale
Fehlerbehandlung empfiehlt sich dann sowas:
1
char buffer[50];
2
int foo;
3
int bar;
4
5
if(snprintf(buffer, sizeof(buffer)-1, "foo:%d bar:%d",foo,bar)<0)
6
{
7
    buffer[sizeof(buffer)-1] = '\0';
8
}
9
10
writeStringToLCD(buffer);

Matthias

von Michael (Gast)


Lesenswert?

''Wer sich hier über jeden Scheiß die Schnauze vereisst der ist hier
wohl falsch gepolt.

Was bist Du denn für ein Nikolaus ?
Wohl zuviel Unterschichtenfernsehen gekuckt.

von Rolf Magnus (Gast)


Lesenswert?

> Ich hoffe Du kennst Ride von Raisonance.

Nein, leider nicht.

> Aber es ist im Prinzip mal egal ich wollte einfach nur wissen ob
> man den printf befehl für eigene Ausgaben nutzbar machen kann,

Nun, wenn du eine allgemeine Antwort willst, so lautet diese "nein".
In der C-Norm ist nichts dafür vorgesehen. Einige Implementationen
bieten aber dennoch eine Möglichkeit, die Ausgaben an eine
selbstgeschriebene Funktion zu leiten, aber die sieht dann eben je nach
Implementation unterschiedlich aus. Daher meine Frage. Schon mal in der
Doku nachgelesen, ob da was dazu steht?

Die Alternative ist das shcon angesprochene snprintf, mit dem du eben
in einen Puffer schreibst, den du dann ausgeben kannst. Ist halt nicht
so elegant wie direkt mit printf, geht aber zur Not auch.

@Matthias:

Ich würde die Prüfung einfach bleiben lassen und immer ans Ende das
'\0' hängen. Meist braucht das if alleine schon mehr Zeit als das
Schreiben dieses Bytes.

von Klaus...(Norad) (Gast)


Lesenswert?

@Rolf und Matthias!

Vielen Dank für euere Info und Beispiele! Wird mir sicher weiter
helfen.


Mfg  Klaus

von Klaus die Maus (Gast)


Lesenswert?

*huhuuuu LCD LCD LCD !

von Wolfgang (Gast)


Lesenswert?

Danke für die Hinweise,  mit sprintf läuft es jetzt.
Schade, dass ein Teil der Beiträge nur Mist enthalten.
MfG
Wolfgang

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.