GrafikLCD - String zurücksetzen?

Gast #3632927
Lesenswert?

Hallo, ich versuche derzeit ein LC Display anzusteuern. Jetzt bin ich an 
der Schriftdarstellung dran (Grafik LCD).


Ich übergebe der Funktion:


lcd_text("HALLO LINIE",1,11); (die hinteren beiden Zahlen sind die 
Startkoordinaten des Textes)


in der Funktion wird diese while Schleife 2 mal aufgerufen:


while(*text != '\0')
{....
*text++;
}

aber beim 2ten mal (so ist die Vermutung) steht der *text ja bei \0 und 
dann wird die nicht mehr aufgerufen.

Kann man den *text wieder "zurücksetzen" auf den Übergabewert?

void lcd_text(const char *text,uint8_t xvar, uint8_t yvar)
Gast #3632940
Lesenswert?

>habe mich falsch ausgedrückt. die while Schleife läuft 11 mal durch aber
>dann wird sie ein 2tes mal aufgerufen.

Wieso zeigst du den Code nicht einfach statt dir einen
mit Beschreibungen abzubrechen?
Gast #3632953
Lesenswert?

danke Christian, habe schon gesucht wo ich das finde :/. Kam immer eine 
Fehlermeldung, weil ich nicht wusste wie man einen Zeiger wieder 
zuweist.
Wollte den Code nicht schicken, da der grausam aussieht^^
Gast #3632961
Lesenswert?

string schrieb:
> danke Christian, habe schon gesucht wo ich das finde :/. Kam immer
> eine
> Fehlermeldung, weil ich nicht wusste wie man einen Zeiger wieder
> zuweist.
> Wollte den Code nicht schicken, da der grausam aussieht^^

Wenn du dich mit Strings beschäftigen willst, solltest du dir etwas über 
Arrays und Zeiger anlesen, z.B. das hier fürs erste:
http://www.mikrocontroller.net/articles/Zeiger
Gast #3632984
Lesenswert?

ok, gibt immernoch Probleme.

Mit dem was du gesagt hast funktioniert es:
http://www.c-howto.de/tutorial-strings-zeichenketten.html
Dann kann man das Programm umschreiben, sodass statt dem Zeiger immer 
ein Feld weitergegangen wird.
Aber ich will das so beibehalten.

Ich frage mich, wie ich dann diesen temporären Zeiger initialisiere.

void lcd_text(const char *text,uint8_t xvar, uint8_t yvar)
{
const char *vartext = *text;  //temporär
...
}

funktioniert jedenfalls nicht. Ich kann ja auch nicht einfach nur:

char vartext = *text;

machen.
Da muss ja irgendwie der gleiche Zeiger erstellt werden aber unter 
anderem Namen.
#3632994
Lesenswert?

>>> const char *vartext = *text;  //temporär

Geht auf jeden Fall nicht, wie willst du denn bitte einen const Pointer 
verändern.
Und vor allem: text ist ein Pointer aber was machst du hier:
konstanten Char Pointer erzeugen: vartext.
nun machst du vartext = *text;
text ist aber hier nicht mehr der Pointer sondern der dereferenzierte 
Wert von text...
allso wenn dann const char * vartext = text;

Warum

char *vartext = text;

Bei dir nicht gehen sollte weiß ich nicht... Da sehe ich nämlich kein 
Problem.

MfG
Gast #3633004
Lesenswert?

string schrieb:
> void lcd_text(const char *text,uint8_t xvar, uint8_t yvar)
> {
> const char *vartext = *text;  //temporär
> ...
> }

In diesem Fall brauchst du keine temporäre Variable. Die Variaböe text 
wird beim Funktionsaufruf kopiert und bleibt in der aufrufenden Funktion 
erhalten.

Richtig wäre const char *vartext = text;
Mit const char *vartext = *text; weisst du vartext den Wert zu, auf den 
text zeigt.

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