Guten Morgen,
Ich habe ein eigentlich einfaches Problem, aber ich komme einfach nicht
drauf. Auch Google habe ich schon bemüht, aber nichts gefunden.
Ich benutze das Tool emWin (ursprünglich von Segger) in Verbindung mit
einem Touch-Display. Soweit sogut, aber ich schaffe es einfach nicht,
den Wert einer Variable auszugeben. Dazu wird die Funktion
1
TEXT_SetText(hItem, "Test");
verwendet, wobei hItem die Verbindung zum Textelemnt herstellt und der
zweite Parameter der Text ist. Bei konstanten Texten, die ich direkt im
Code eintippe (wie im obigen Beispiel) ist es kein Problem, aber wie
schaffe ich es nun den Wert einer Variable da auszugeben (Typ ist const
char *).
Z.B. will ich die Sekunden ausgeben - die Variable "second" beinhaltet
den Wert (z.B. 39). Ich will "39" ausgeben, aber wenn ich die Variable
gecastet übergebe, kommt irgendwas an das Display.
Ich hoffe, mein Problem ist verständlich geschildert und lösbar!! Vielen
Dank!
mfg
Andy
Hallo Andreas,
ich arbeite zwar nicht mit emWin, aber im aktuellen Manual zu emWin wird
zwischen Ausgabebefehlen für Text und Zahlen unterschieden. Hier heissen
die Befehle
void GUI_DispDec(I32 v, U8 Len);
void GUI_DispFloat(float v, char Len);
void GUI_DispBin(U32 v, U8 Len);
Mit der Textausgabe kommst Du nicht weiter, weil die Variable als const
definiert ist und direkt auf den Speicherinhalt zugegriffen wird, der
beim Befehl TEXT_SetText(hItem, "Test") zwischen den "" steht. Du wirst
in Deinem Handbuch nach Befehlen suchen müssen, die für die
Zahlenausgabe vorgesehen sind.
Darf ich fragen, ob Du emWin privat oder geschäftlich nutzt?
Gruß
kokisan
Hallo,
Danke für die Info... Die GUI_ - Befehle kann ich leider nicht nutzen,
weil ich mit den Widgets arbeite...
Aber ich habe in der Zwischenzeit eine Lösung gefunden:
Das funktioniert ganz gut. Ist zwar ein bisschen Tipperei, um die Texte
vorzubereiten, aber wenns funktioniert.... ;)
Ich benutze das emWin beruflich - ist eigentlich eine ganz nette
Library...
mfg
Andy
Andreas P. schrieb:> Das funktioniert ganz gut. Ist zwar ein bisschen Tipperei, um die Texte> vorzubereiten, aber wenns funktioniert.... ;)
Dafür hat der liebe Gott dann Funktionen erfunden, damit man sich den
immer gleichen Programmablauf in einer Funktion zusammenfassen kann.
Ansonsten
FAQ gleich der erste Eintrag
> Ich benutze das emWin beruflich
Das ist jetzt aber nicht dein Ernst? Du programmierst beruflich und hast
Schwierigkeiten eine Zahl in einen Text um zuformatieren?
Danke für den Hinweis!
Karl Heinz Buchegger schrieb:> Das ist jetzt aber nicht dein Ernst? Du programmierst beruflich und hast> Schwierigkeiten eine Zahl in einen Text um zuformatieren?
Es ist noch kein Meister vom Himmel gefallen, oder?? Ich arbeite das
erste Mal mit Displays und Ausgaben. Und deshalb gibt es ja Foren, damit
man einen Schups in die richtige Richtung bekommt, oder...
mfg
Andy
Andreas P. schrieb:> Es ist noch kein Meister vom Himmel gefallen, oder?? Ich arbeite das> erste Mal mit Displays und Ausgaben. Und deshalb gibt es ja Foren, damit> man einen Schups in die richtige Richtung bekommt, oder...
Ähm.
Dir ist aber schon klar, dass das C-Programmierung 3.ter oder 4.ter Tag
(von 30) ist?
Ich kenne zwar emWin nicht, aber ich kann mir vorstellen, dass diese
Implementierung potentiell einen Bug enthält.
Üblicherweise haben strings ein ende-Zeichen ( =0 ). Wenn Du time als
char [2] definierts ist kein Platz mehr für ein stringende. Das heißt es
hängt davon ab, was im Speicher nach time steht. Wenn es da mit Werten
<>0 weiter geht, dann wirst Du wieder Müll auf dem Display finden.
char time[3];
time[0] = '0' + (uint16)Clock_SystemClock.second/10;
time[1] = '0' + (uint16)Clock_SystemClock.second%10;
time[2] = 0;
ist das Minimum.
> Ähm.> Dir ist aber schon klar, dass das C-Programmierung 3.ter oder 4.ter Tag> (von 30) ist?
Komm, lass es gut sein. Du hast recht und ich meine Ruhe...
@MagIO:
Danke für den Hinweis. Muss ich testen. Aber ich habe jetzt schon ein
paar Ausgaben implementiert - ohne die 0 am Ende und noch keine Probleme
gehabt.
Aber wie gesagt, ich bin neu auf dem Gebiet der Display-Programmierung
und brauche nur ein wenig Starthilfe... :)
Lg
Andy
Vielleicht erspart dir das ein wenig Arbeit:
itoa() wandelt Interger-Zahlen automatisch in einen "String" um. Oder
die Kanone für den Spatz: sprintf(). ;-)
Vielleicht bringt das den Bug ans Tageslicht. Ansonsten müsste man sich
das binary, was beim compilieren/linken erzeugt wird mal ansehen. Wie
gesagt, es ist mehr ne Glückssache ob's geht oder nicht.
Das hat auch nichts mit Display-Programmierung zu tun, so werden in C
generell Strings gehandhabt.