www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Pointer in C (pic 24F)


Autor: Luck'n lol (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Seit längerem programmiere ich nun in C, habe aber noch nie mit Pointern 
gearbeitet. Ich bin nun bei einem Problem angelangt, bei welchem Pointer 
notwendig sind. Ich habe nach Pointern gegoogelt, jedoch nicht zu einer 
funktionierenden Lösung gekommen.

Nun zu meinem Problem:

Ich übergebe einer Funktion 3 Werte und einen String.
Diese Funktion schreibt einige Konstanten am Anfang (ab pos 1) eines 
Arrays mit festgelegter grösse. Dannach werden die drei übergeben 
Variabeln, und den übergebenen string (ohne das letze Zeichen) in das 
Array geschrieben. An letzer gebrauchter Stelle wird 0x00 in deas Array 
geschrieben. An Erster Stelle (pos 0) steht die letzte benuzte Stelle 
des Arrays.

Nun zu meinem Programm welches noch einige Fehler hat:

int8 lcd_data[65];

void lcd_printf(int8 x,int8 y,int8 p,int8 *string[])
  {
  int8 copy=6;
  lcd_data[1]=0x1B;
  lcd_data[2]='Z';
  lcd_data[3]=p;
  lcd_data[4]=x;
  lcd_data[5]=y;
  for(;*string!='';string++)
    {
    lcd_data[copy]=*string;
    copy++;
    }
  lcd_data[copy]=0;
  lcd_data[0]=copy;
  lcd_send();
  }

void main(void)
        {
  lcd_printf(15,13,'C',*"hallo");
        while(1);
        }

Nun ein Zahlen Beispiel was nach diesem Aufruf im Array stehen sollte, 
was aber nicht der fall ist:
lcd_data={11,0x1B,'Z','C',15,13,'h','a','l','l','o',0}


Danke für Ihre Hilfe

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Luck'n lol wrote:

> void lcd_printf(int8 x,int8 y,int8 p,int8 *string[])

Als Parameterdeklaration ist *string[] identisch mit **string und wohl 
nicht das was du erreichen willst. Und was dir zudem eine Fehlermeldung 
einbringen sollte.

Besser:
  void lcd_printf(int8 x,int8 y,int8 p,int8 string[])

> lcd_printf(15,13,'C',*"hallo");

wiederum ist eine etwas merkwürdige Form von
  lcd_printf(15,13,'C','h');
was den Compiler ebenfalls irritieren müsste. Besser:
  lcd_printf(15,13,'C',"hallo");

Wenn dir Pointer derart zusetzen: Das geht alles auch mit Array-Index 
statt Pointer.

Autor: Luck'n lol (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1. Danke für deine schnelle antwort

2. Habe diesbezüglich schon einiges mit dem try and error verfahren 
probiert. Den Funktionskopf habe ich korigiert, jedoch wenn ich den 
poiter beim aufruf entferne, gibt es folgenden Fehler beim compilieren:
Attempt to create a pointer to a constant

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann sein, dass der Compiler aus "hallo" ein Array mit "const" Attribut 
macht, obwohl das in C aus Kompatibilität mit Milliarden von 
existierenden Quellcodezeilen eigentlich nicht so gängig ist. Evtl. 
Compiler-Option.

Dann Parameter als
  , const int8 string[])
deklarieren.

Autor: Luck'n lol (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nun das mit const behab den Fehler nicht. Versuche es nun mal lieber mit 
einem Array.

Hier jedoch weis ich nicht genau wie die übergabe funktioniert.
Stimmt es, das ich im Funktionskopf

void lcd_printf(...,int8 string[58])

schreiben muss?

Kann ich diekt den string im Aufruf eingeben, oder muss ich zuerst ein 
array erstellen?

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Luck'n lol wrote:

> Stimmt es, das ich im Funktionskopf
> void lcd_printf(...,int8 string[58])
> schreiben muss?

Nein.

> Kann ich diekt den string im Aufruf eingeben

Ja.

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.