Forum: Mikrocontroller und Digitale Elektronik "C" Problem mit Pointer für PIC18Fxxx


von Martin M. (ats3788)


Lesenswert?

Hallo bei dem guten Beitrag
http://www.mikrocontroller.net/articles/Festkommaarithmetik

bin ich auf ein Problem für PIC18Fxxx gestoßen.
Ich bekomme

main.c:129: error: (183) function or function pointer required
main.c:129: error: (981) pointer required

im Bezug auf den String. Hat jemand eine Idee wie man das für
Microchip XC8 PIC18Fxxx CPU lösen kann.

void my_print_LCD(char* string, uint8_t start, uint8_t komma, uint8_t 
frac) {
  uint8_t i;            // Zähler
  uint8_t flag=0;       // Merker für führende Nullen

  // Vorzeichen ausgeben
  if (string[0]=='-') lcd_data('-'); else lcd_data(' ');

  // Vorkommastellen ohne führende Nullen ausgeben
  for(i=start; i<komma; i++) {
    if (flag==1 || string[i]!='0') {
      lcd_data(string[i]);
      flag = 1;
    }
    else lcd_data(' ');         // Leerzeichen
  }

  lcd_data(',');                // Komma ausgeben

  // Nachkommastellen ausgeben
  for(; i<(komma+frac); i++) lcd_data(string[i]);
}

von Peter II (Gast)


Lesenswert?

Martin Michael schrieb:
> main.c:129: error: (183) function or function pointer required
> main.c:129: error: (981) pointer required

wenn man jetzt noch wüsste was die die Zeile 129 ist.

von Martin M. (ats3788)


Lesenswert?

Das ist doch klar da gibt es ja nur einen String

void my_print_LCD(char* string, uint8_t start, uint8_t komma, uint8_t
frac) {
  uint8_t i;            // Zähler
  uint8_t flag=0;       // Merker für führende Nullen

  // Vorzeichen ausgeben
  if (string[0]=='-') lcd_data('-'); else lcd_data(' ');

  // Vorkommastellen ohne führende Nullen ausgeben
  for(i=start; i<komma; i++) { /// hier
    if (flag==1 || string[i]!='0') {
      lcd_data(string[i]);  //// hier
      flag = 1;
    }
    else lcd_data(' ');         // Leerzeichen
  }

  lcd_data(',');                // Komma ausgeben

  // Nachkommastellen ausgeben
  for(; i<(komma+frac); i++) lcd_data(string[i]); //// hier
}


Kann man das formatieren ?

von Peter II (Gast)


Lesenswert?

> Das ist doch klar da gibt es ja nur einen String
wenn dir es klar ist dann löse doch keine Problem selber.

> for(i=start; i<komma; i++) { /// hier
und was soll uns das /// hier sagen? Dort kommt gar kein string vor.

> Kann man das formatieren ?
klar, einfach mal lesen was beim senden eine Post alles da steht.

von Max H. (hartl192)


Lesenswert?

Martin Michael schrieb:
> Das ist doch klar da gibt es ja nur einen String
Der genau 5 mal vorkommt.

>   for(i=start; i<komma; i++) { /// hier
>       lcd_data(string[i]);  //// hier
>   for(; i<(komma+frac); i++) lcd_data(string[i]); //// hier
Du hast also 3 Zeilen 129???

> Kann man das formatieren ?
1
[c]C-Code[/c]

von Sina A. (sinapse)


Lesenswert?

nenn mal alle string in str um... vielleicht wird von deiner umgebung 
string als typ vorgegeben oder so? kann sonst keinen fehler erkennen auf 
die schnelle...

von Martin M. (ats3788)


Lesenswert?

void my_print_LCD(char* DerSTR, uint8_t start, uint8_t komma, uint8_t
frac) {
  uint8_t i;            // Zähler
  uint8_t flag=0;       // Merker für führende Nullen

  // Vorzeichen ausgeben
  if (DerSTR[0]=='-') lcd_data('-'); else lcd_data(' ');

  // Vorkommastellen ohne führende Nullen ausgeben
  for(i=start; i<komma; i++) { /// hier
    if (flag==1 || DerSTR[i]!='0') {
      lcd_data(DerSTR[i]);  //// hier
      flag = 1;
    }
    else lcd_data(' ');         // Leerzeichen
  }

  lcd_data(',');                // Komma ausgeben

  // Nachkommastellen ausgeben
  for(; i<(komma+frac); i++) lcd_data(DerSTR[i]); //// hier
}

von Joe F. (easylife)


Lesenswert?

Du willst nicht, dass man dir hilft, oder?
Trotzig einfach geänderten Sourcecode hier reinknallen, ohne weiteren 
Kommentar, bringt doch nichts.
Verrate doch endlich mal, welche genau die Zeile 129 in main.c ist.
Ich könnte ja fast wetten, dass es die (unsichtbare) Zeile ist, in der 
my_print_LCD() aufgerufen wird...

von Max H. (hartl192)


Lesenswert?

Martin Michael schrieb:
> void my_print_LCD(char* DerSTR, uint8_t start, uint8_t komma, uint8_t
> frac) {
> ...
Was willst du uns mit diesem Code jetzt sagen, außer dass du es immer 
noch nicht geschafft hast die Code-Formatierung zu verwenden und 
nachzusehen welche Zeile Zeile 129 ist?

von mar IO (Gast)


Lesenswert?

wenn ich richtig sehe, dann ist der Code doch 1zu1 aus dem genannten 
Artikel => Der Fehler liegt vermutlich nicht in diesem Abschnitt

Alle Fehlermeldungen zeigen und die entsprchenden Codezeilen, wo der 
Fehler auftritt plus fünf Zeilen davor und danach.

von Martin M. (ats3788)


Lesenswert?

Das Problem taucht auf beim XC8 Compiler von Microchip

von Peter II (Gast)


Lesenswert?

Martin Michael schrieb:
> Das Problem taucht auf beim XC8 Compiler von Microchip

und? Dort gibt es wo keine Zeilennummern.

von Max H. (hartl192)


Lesenswert?

Martin Michael schrieb:
> Das Problem taucht auf beim XC8 Compiler von Microchip
Noch mehr Infos mit denen man nicht viel anfangen kann...
Willst du uns nicht endlich sagen was in dieser Zeile 129 steht?

BTW: Wenn du keine Hilfe willst ist es zeitsparender wenn du keinen 
Thread eröffnest.

von Mano W. (Firma: ---) (manow)


Lesenswert?

Max H. schrieb:
> BTW: Wenn du keine Hilfe willst ist es zeitsparender wenn du keinen
> Thread eröffnest.

Das frage ich mich auch, möchte der TO Hilfe oder ist es dem nur 
langweilig. Falls Hilfe gewünscht, entsprechende Fragen beantworten, die 
gestellt worden sind...

von Martin M. (ats3788)


Lesenswert?

Oh Sorry ich sehe wo das Problem liegt
mein Denkfehler war zu glauben

lcd_data ist ein String Array aber es ist eine Funktion
sorry mein Fehler

// Sendet ein Datenbyte an das LCD
void lcd_data( uint8_t data )
{
    LCD_PORT |= (1<<LCD_RS);    // RS auf 1 setzen

    lcd_out( data );            // zuerst die oberen,
    lcd_out( data<<4 );         // dann die unteren 4 Bit senden

    _delay_us( LCD_WRITEDATA_US );
}

von Peter II (Gast)


Lesenswert?

Martin Michael schrieb:
> Oh Sorry ich sehe wo das Problem liegt

schön wenn wir helfen konnten.

von Max H. (hartl192)


Lesenswert?

Martin Michael schrieb:
> Oh Sorry ich sehe wo das Problem liegt
Wenn du um 14:08 gepostet hättest was in der Zeile 129 steht wären wir 
vllt. schon vor 4.5 Stunden so weit gewesen.

P.S.: Was war eigentlich so verdammt schwierig daran zu Posten was in 
dieser Zeile 129 steht?

von Joe F. (easylife)


Lesenswert?

Und danke auch für das Posten der Funktion lcd_data(), die auch 
fehlerfrei aussieht, und mit dem beschriebenen Problem (Zeile 129) 
vermutlich nicht das Geringste zu tun haben wird. Der Fehler in Zeile 
129 scheint aber dermaßen peinlich zu sein, dass du ihn wirklich besser 
für dich behältst.
Da steht wahrscheinlich
lcd_data = "Hallo";
oder so.

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.