eigene LCD_write Funktion

OP #3800380
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
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.