eigene LCD_write Funktion

OP #3800380
Lesenswert?

Hallo zusammen,

ich arbeite an einer Funktion um Text an ein LCD zu senden.
Dazu habe ich eine Funktion geschrieben welche über ein Arry Buchstabe
für Buchstabe liest und an den LCD senden. Klappt auch.

Nun aber zum Problem. Ich muss den Text in eine Variable schreiben und
diese dann in die Funktion einfügen. Gibt es eine Möglichkeit den Text
direkt in die Funktion zu schreiben?


//Das ist die Funktion

void lcd_write(char txt)
{
     while(*txt)
  {
  Port_D = *txt;
  clock_set();
  *txt++;
  }
}

//So muss ich sie einsetzen:

char txt1[] = {"test"};
lcd_write(txt1);

Kann ich irgend wie die Variable umgehen und direkt lcd_write("Hallo")
machen?
Zur Info, ich benutze keine Libs, mache alles selber. Dem Lerneffekt
zuliebe :)

Ich danke für eure Hilfe
#3800391
Lesenswert?

Hallo,

Hilfe findest Du im Forum:

http://www.mikrocontroller.net/articles/Erweiterte_LCD-Ansteuerung

Siehe bitte hier nach: 
//////////////////////////////////////////////////////////////////////// 
////////
// Ausgabe eines Strings an der aktuellen Cursorposition
// String liegt im Flash
void lcd_string_P( PGM_P data );

Dann gibt's noch die avr gcc Hilfe für PROGMEM:

http://www.nongnu.org/avr-libc/user-manual/group__avr__pgmspace.html
Gast #3800497
Lesenswert?

Hans Wiederkehr schrieb:
> //Das ist die Funktion
>
> void lcd_write(char txt)
> {
>      while(*txt)
>   {
>   Port_D = *txt;
>   clock_set();
>   *txt++;
>   }
> }

Die Funktion geht so nicht durch den Compiler. Es sei denn Du hast 
irgendwie char zu char* umdefiniert. Es muss heißen:
1
void lcd_write(char* txt)

> //So muss ich sie einsetzen:
>
> char txt1[] = {"test"};
> lcd_write(txt1);

Das ist so auch falsch. Die geschweiften Klammern gehören da nicht hin. 
So wäre es richtig:
1
char txt1[] = "test";
2
lcd_write(txt1);

> Kann ich irgend wie die Variable umgehen und direkt lcd_write("Hallo")
> machen?

Wenn die Funktion richtig ist, ja.
OP #3800721
Lesenswert?

So ich hab jetzt ein bisschen umher gelesen und ausprobiert.
Es funktioniert.

Und zwar, muss ich bei der Funktion einfach
1
void lcd_write(Char ROM *txt)
 schreiben.
dann kann ich den text direkt in die Funktion setzten.
also:
1
lcd_write("Hallo")

Die Frage ist jetzt, warum muss ich da ein "char ROM" nehmen. Kennt sich 
da jemand aus. Ich würde gerne den Zusammenhang begreifen.

PS: ich benutze MBlab mit PIC
#3800738
Lesenswert?

Das ist doch dieser Mist, dass manche Compiler Konstanten automatisch 
ins Flash verlagern, was bei Harvard Architekturen ein ständiger 'Pain 
in the ass' ist, weil man dann eben nicht einfach Funktionen schreiben 
kann, die sowohl mit Stringliteralen als auch mit im Ram befindlichen 
Strings arbeiten können.
Na ja. wenigstens hat der Compiler ja offenbar den Versuch im 
Originalposting mit einer Fehlermeldung bedacht, die du hättest erwähnen 
und im Wortlaut veröffentlichen sollen. Dann hätte man dir schon vorher 
sagen können, dass es sich da um eine Eigenheit deines Compilers 
handelt, die nichts mit dem C-Standard zu tun hat.

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