mikrocontroller.net

Forum: Compiler & IDEs Text übergeben


Autor: wolf4124 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Hat jemand eine kleine Duko für den Einstieg in C mit Zeigern.
Es geht speziel über die Übergabe von dem String 'Hallo' in eine
Funktion. Kommen da nicht weiter.

Gruß

Autor: Unbekannter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
void eine_funktion(const char * str)
{
  // mach was mit 'str'
}

int main()
{
  eine_funktion("Hallo Welt");
  return 0;
}

Autor: wolf4124 (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Habe es hingebracht.
Ich habe nur noch eine Variable dazwischen geschaltet.

Habe aber noch ein Problem.
Das Programm gibt mir nur jedes zweite Zeichen auf dem Display aus.
Ich dachte man dann den Wert im Zeiger um eins erhöhen
String++;
Und er zeigt dann auf das nächste Zeichen.
Habe ich da einen Denkfehler, oder hat sich wo anders ein Fehler
eingeschlichen?

Gruß

Autor: Unbekannter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh je...

Schalte an Deinem Compiler mal alle Warnungen ein. Beim gcc geht das
mit "-Wall -O". Dein Code strozt vor Fehlern:


  void send_LCD(int zeile, int stelle,int *String)
                                      ~~~~~~~~~~~~

Wieso verwendest Du da einen Zeiger auf ein "int"??? Schau nochmals
mein Beispiel an, was da steht...


Hier mal eine verbesserte Version Deines Programms:



#define DELAY_SEND 100


void delay()
{
  for (int i=0; i < DELAY_SEND; i++)
    ;
}


void send_LCD(int zeile, int stelle, char * text;)
{
  int adresse;

  switch (zeile)
  {
    case 1: adresse = 0x80; break;
    case 2: adresse = 0xC0; break;
    case 3: adresse = 0x90; break;
    case 4: adresse = 0xD0; break;
    default: return;  // Fehler: Ungültige Zeile!
  }

  adresse += stelle - 1;

  //Adresse umstellen
  *LCD_Daten = adresse;
  *LCD_Steuer =0x04;
  *LCD_Steuer =0x00;
  delay();

  while (*text)
  {
    *LCD_Daten = *text++;
    *LCD_Steuer = 0x05;
    *LCD_Steuer = 0x01;
    delay();
  }

}

Autor: wolf4124 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ahh. Jetzt haut es hin.
Das mit den Fehlern glaube ich gern.
Gruß und Danke für die Hilfe.

wolf4124

Autor: Stefan Kleinwort (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein Zeiger besteht nicht nur aus einer Adresse, sondern definiert auch
die Größe des Elements, auf das es zeigt.

Wenn Du den Zeiger als Pointer auf ein int deklarierst, dann stellt
string++
den Zeiger auf die nächste int-Position im Speicher. Bei int = 2 Byte
also auf +2 Byte. Deswegen zeigte Dein lcd nur jedes 2.Zeichen an.

Gruß, Stefan

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.