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


von Luck'n lol (Gast)


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

von (prx) A. K. (prx)


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.

von Luck'n lol (Gast)


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

von (prx) A. K. (prx)


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.

von Luck'n lol (Gast)


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?

von (prx) A. K. (prx)


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.

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
Noch kein Account? Hier anmelden.