Bei der Beschreibung lcd.c (h) der Funktion steht z.B. drin: lcd_puts_p (const ..) lcd_puts (const ...) z.B. "Wert" lcd_putc (char ...) lcd_command(uint8_t cmd); lcd_data(uint8_t data); Zu einigen habe ich ein paar verständliche Erklärungen gefunden. Andere sind mir unklar. Da ich mich der eng. Erklärung streite, komme ich nicht weiter. Habe ein Beispiel hinter geschrieben. Könnte es mir jemand an Hand von Beispielen erläutern? achim
Achim Seeger schrieb: > Bei der Beschreibung lcd.c (h) der Funktion steht z.B. drin: > > lcd_puts_p (const ..) > lcd_puts (const ...) z.B. "Wert" > lcd_putc (char ...) > lcd_command(uint8_t cmd); > lcd_data(uint8_t data); > > Zu einigen habe ich ein paar verständliche Erklärungen gefunden. Andere > sind mir unklar. Da ich mich der eng. Erklärung streite, komme ich nicht > weiter. Habe ein Beispiel hinter geschrieben. Könnte es mir jemand an > Hand von Beispielen erläutern? > achim zuallererst mal gibt es so etwas wie eine 'Konvention' in der AVR-Programmierung. NIcht alle halten sich daran, aber doch viele. Endet ein Funktionsname auf '_p', dann bedeutet das, dass die zugehörigen Daten (meistens Strings) nicht im SRAM vorliegen, sondern im Flash. Da der Zugriff aufs Flash anders erfolgen muss, als wie wenn die Daten im SRAM liegen, muss man diese beiden Fälle unterscheiden und daher auch 2 verschiedene Funktionen haben. Damit haben wir * lcd_puts_p das puts weißt darauf hin, dass es sich um eine Funktion handelt, die einen String ausgibt. Das _p ist der Hinweis, dass dieser String im Flash vorliegt. lcd_puts_p gibt als einen String aus, der im Flash liegt * lcd_puts das puts ist wieder der Hinweis darauf, dass es sich hier um eine String ausgabe handelt. Da nichts weiter angegeben ist, liegt der String ganz normal im SRAM * lcd_putc so wie das 's' in 'puts' das Kürzel für String ist, so ist das 'c' in 'putc' ein Kürzel, nämlich das für Character. Wie ja auch unschwer am Datentyp des Arguments zu erkennen ist. Diese Funktion gibt also ein einzelnes Zeichen aus. Die Unterscheidung Flash-SRAM ist bei Charactern nicht wirklich relevant, da einzelne Character sowieso direkt im Code auftauchen (wenn es sich um Konstante Character handelt), bzw wenn man sie manipulieren musste dann liegen sie sowieso im SRAM. Kurz und Gut: Da es keinen Sinn macht, einzelne Character ins FLash zu legen, gibt es auch keine korrespondierende lcd_putc_p Funktion * lcd_command na, der Funktionsname ist aber recht eindeutig. Hier wird ein Kommando ans LCD geschickt. Zum Beispiel "LCD-löschen". * lcd_data das übergibt ein Daten-Byte ans LCD zur gefälligen Darstellung. lcd_command und lcd_data sind so etwas wie die unterste Schicht in den LCD-Funktionen, auf denen aufbauend dann der Rest gemacht wird. Bei der Übergabe ans LCD muss zwischen darzustellenden Daten und Kommandos unterschieden werden. lcd_command und lcd_data implementieren genau diesen Unterschied. Ich muss dich wieder fragen: Du hast den Source Code der Funktionen vor dir! Du darfst dir die Implementierung dieser Funktionen ansehen! Ganz im Gegenteil: Es ist eine wichtige Fertigkeit eines Programmierers, dass man aus vorhandenem Source Code rauslesen kann, was dieser Code macht und welche Eigenheiten bzw. Besonderheiten es gibt. Warum tust du das nicht? Die Funktionen lcd_putc, lcd_puts, lcd_puts_p sind allesamt nicht schwer zu verstehen. Alleine die Funtkionsargumente zeigen dir schon den Weg und der UNterschied zwischen lcd_puts und lcd_puts_p ist im Code mehr als eindeutig zu sehen. Disclaimer: Alle Angaben basierend auf den üblichen LCD Libraries, wie sie hier immer wieder auftauchen.
:
Bearbeitet durch User
Achim Seeger schrieb: > sind mir unklar. Da ich mich der eng. Erklärung streite, komme ich nicht > weiter. Sorry. Aber diese Ausrede lass ich nicht mehr gelten. Auch du wirst zur Kenntnis nehmen müssen, dass es ohne Englisch nicht geht. Technisches Englisch ist ganz einfach gestrickt. Das sind keine literarischen Meisterwerke. Wenn Chinesen und Japaner, deren Muttersprache komplett anders funktioniert als Englisch, damit klar kommen, dann wird man ja wohl von dir verlangen können, dass du mit deinem Deutsch, das dem Englischen im Vergleich dazu sehr ähnlich ist, die P.Fleury Doku, wie zb ...
1 | void lcd_putc( char c ) |
2 | |
3 | Display character at current cursor position. |
4 | |
5 | Parameters: |
6 | c character to be displayed |
7 | Returns: |
8 | none |
... lesen kannst. Das ist nicht wirklich weiter schwer. Und zur Not gibt es ja immer noch Online-Übersetzer. 'Display character' ... Aha, da ist von einem Character die Rede. Also ein Einzelzeichen. Passend dazu ist das einzige Argument der Funktion ein 'char'. Was wird mit diesem Character gemacht? Er wird 'display', also angezeigt/ausgegeben. Im übrigen liefert P.Fleury ein Testprogramm mit, das die meisten Funktionen in Aktion zeigt. Auch von dir kann man verlangen, dass du dieses Programm studierst. Was in C ein einzelner Character ist, wirst du ja wohl wissen. Und auch wie String-Verarbeitung in C funktioniert. Denn dieser Unterschied 'Einzelzeichen' versus 'String' ist ein fundamental Wichtiger in C. Wenn du damit Schwierigkeiten hast, dass ein Einzelzeichen in einfachen Anführungszeichen steht, wie zb 'A' oder 'B', während ein String in doppelten Anführungszeichen steht, wie zb "Test", dann solltest du dir schleunigst ein C-Buch besorgen und durcharbeiten. Denn dann fehlt es massiv an den Grundlagen.
:
Bearbeitet durch User
Hallo Karl Heinz ganz so richtig geht es mit eng nicht. Kriegsfuss ist stak übertrieben. Wenn ich den Online Übersetzer nehme kommen teilweise sehr komische Sachen raus, ist aber immer ein Hinweis was es sein könnte, auf könnte liegt aber die Betonung. Die Bedeutung war schon meistens klar. Das Problem waren die Buchstaben daran. Ein Beispiel sind die lcd_command. Damit kann ich Befehle schicken z.B. Display löschen. Das kann ich doch mit lcd_clrscr machen. Ist das nicht das gleiche? Das mit dem Text ist klar auch die Zeichen da vor und da hinter. Das Testprogramm - meinst du das mit lcd.c oder ist es noch ein anderes? das genannte habe ich als Grundlage für mich genommen, um verschiedene Sachen zu testen. Werde es mit Beispielen alles testen. Danke achim
Achim Seeger schrieb: > Problem waren die Buchstaben daran. Ein Beispiel sind die lcd_command. > Damit kann ich Befehle schicken z.B. Display löschen. Das kann ich doch > mit lcd_clrscr machen. Ist das nicht das gleiche? Grrrrrrrrrrrr! Schau dir mal die Funktion lcd_crlscr an. Hier ist sie, frisch aus dem lcd.c, direkt vom P.Fleury geholt
1 | /*************************************************************************
|
2 | Clear display and set cursor to home position
|
3 | *************************************************************************/
|
4 | void lcd_clrscr(void) |
5 | {
|
6 | lcd_command(1<<LCD_CLR); |
7 | }
|
Was sehen wir? Die Funktion lcd_clrscr ist nichts anderes als eine Funktion, die lcd_command benutzt und dieser Kommando Funktion das richtige Kommando mitgibt, so dass das LCD die Anzeige löscht. Anstelle dass du dir selbst die einzelnen Kommandos merken musst, hat sich Peter eine Funktion drumm herum gebastelt, so dass er sich das eben nicht merken muss. Das alles KANN man sehen, wenn man sich die Funktionen in der Implementierung ansieht. Da du dich aber weigerst, das zu tun, siehst du es auch nicht. > Das mit dem Text ist klar auch die Zeichen da vor und da hinter. > Das Testprogramm - meinst du das mit lcd.c oder ist es noch ein anderes? Im Zip-File, welches man vom Peter bekommt ist enthalten:
1 | lcd.c |
2 | lcd.h |
3 | test_lcd.c |
4 | makefile |
5 | ein HTML File |
6 | und 2 Files, die ein doxygen im Namen haben |
Welches davon wird wohl das Demo-File sein, welches die Funktionen in Aktion zeigt? PS: Man kann, man darf, ja man soll sogar *.c und *.h Files mit einem Texteditor mal aufmachen um zu sehen, was da drinnen steht. Die beissen nicht. Mir reicht es jetzt. Ich steig aus. Ich kann dir nur raten, massiv selbständiger zu werden. Die Dinge liegen vor deiner Nase und du siehst sie nicht. Manchmal hab ich das Gefühl, du willst sie gar nicht sehen. Am liebsten wäre es dir, wenn dir jemand alles vorkaut und auf einem Silbertablett präsentiert. Bloss nichts selber rausfinden. Bloss keine Eigeninitiative. Da könnte man ja was dabei lernen.
:
Bearbeitet durch User
Hallo Karl-Heinz Die Datein habe ich meinem Proz. angepasst. Bis auf den Hinweis das beide Datein im gleiche Ordner sein sollen, habe ich alles richtig gemacht. Seit gesten habe ich eine Anzeige auf meinem Display. Jetzt arbeite ich alles durch, auch die Datein von Peter als erstes. Es hat nur ein kleiner Anstoss gefehlt. Danke dafür achim
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.