Forum: Mikrocontroller und Digitale Elektronik C Syntax Fehler :syntax error near/undefined identifier


von Mohamed S. (soo)


Lesenswert?

Hi!
Ich kriege diese 2 Fehlermeldungen. Es ist primitiv aber verstehe ich 
nicht warum ist hier ein Fehler aufgetretten.

C51 COMPILER V8.18 - SN: Eval Version
COPYRIGHT KEIL ELEKTRONIK GmbH 1987 - 2009
*** ERROR C141 IN LINE 155 OF USB I2C T5300 MAIN.C: syntax error near 
'unsigned'
*** ERROR C202 IN LINE 155 OF USB I2C T5300 MAIN.C: 'i': undefined 
identifier
*** ERROR C202 IN LINE 156 OF USB I2C T5300 MAIN.C: 'i': undefined 
identifier
*** ERROR C202 IN LINE 160 OF USB I2C T5300 MAIN.C: 'i': undefined 
identifier
*** ERROR C141 IN LINE 193 OF USB I2C T5300 MAIN.C: syntax error near 
'unsigned'
*** ERROR C202 IN LINE 193 OF USB I2C T5300 MAIN.C: 'data_in': undefined 
identifier
*** ERROR C202 IN LINE 212 OF USB I2C T5300 MAIN.C: 'data_in': undefined 
identifier
*** ERROR C202 IN LINE 214 OF USB I2C T5300 MAIN.C: 'data_in': undefined 
identifier
*** ERROR C141 IN LINE 216 OF USB I2C T5300 MAIN.C: syntax error near 
'data_in'
*** ERROR C141 IN LINE 463 OF USB I2C T5300 MAIN.C: syntax error near 
'}'

C51 COMPILATION COMPLETE.  0 WARNING(S),  10 ERROR(S)


Das ist der Code. Das Fehler wiederholt sich 2 mal für jede for Schleife 
mit dem Laufvariable i und data_in
8 bit µC _8051F320
while(!SDA)
   {
      // Provide clock pulses to allow the slave to advance out
      // of its current state. This will allow it to release SDA.
      XBR1 = 0x40;                     // Enable Crossbar
      SCL = 0;                        // Drive the clock low
      unsigned char i;
      for(i = 0; i < 255; i++);        // Hold the clock low
      SCL = 1;                         // Release the clock
      while(!SCL);                     // Wait for open-drain
                                       // clock output to rise
      for(i = 0; i < 10; i++);         // Hold the clock high
      XBR1 = 0x00;                     // Disable Crossbar
   }

Danke für die Hilfe
MFG
Soo

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

In C dürfen Variablen nur zu Beginn eines Blocks definiert werden.

Die Zeile

      unsigned char i;

aber steht mittendrin.


Gewöhn' Dir an, Quellcode in [ c ] und [ / c ] einzuschließen, dann wird 
er lesbarer!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Wo werden üblicherweise in Ansi-C Variablen deklariert?

von dieter (Gast)


Lesenswert?

probier mal
1
      for(unsigned char i = 0; i < 255; i++);

manche antiquierten compiler machen sonst probleme.

von dieter (Gast)


Lesenswert?

Rufus t. Firefly schrieb:
> In C dürfen Variablen nur zu Beginn eines Blocks definiert werden.

seit wann denn das?

von dieter (Gast)


Lesenswert?

dieter schrieb:
> Rufus t. Firefly schrieb:
>> In C dürfen Variablen nur zu Beginn eines Blocks definiert werden.
>
> seit wann denn das?

gerade gelesen C89/ANSI-C.

von Mohamed S. (soo)


Lesenswert?

Hi,
Danke für die Hilfe!
Es hat geklappt! Der Kompiler kompliert das Code problemlos.
Ich muss jetzt schauen ob es die gezielte Funktion erreicht wird und 
zwar
Sensordaten durch die I2C Schnittstelle der µC die Daten lesen und diese 
Daten müssen dann im µC 8051F320 verarbeitet werden und dann via USB an 
PC schicken.

Mit der USB zu PC Geschichte weiß ich bis jetzt nicht viel.
Wenn jemand von Euch schon Erfahrung mit solcher Aufgabe, bitte um 
Hilfe.

MfG
Soo

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Wie bereits in Deinem anderen Thread zum Thema beschrieben kannst Du 
das Thema auf die Ausgabe auf einer seriellen Schnittstelle reduzieren.
Die USB-Umsetzung übernimmt dann ein USB-Seriell-Adapter.

von Rolf Magnus (Gast)


Lesenswert?

dieter schrieb:
> Rufus t. Firefly schrieb:
>> In C dürfen Variablen nur zu Beginn eines Blocks definiert werden.
>
> seit wann denn das?

Falsche Frage. Es hätte heißen müssen: "bis wann denn das?"
Darauf wäre die Antwort: Bis 1999, als C99 seinen Vorgänger offiziell 
ersetzt hat. Leider hat es in den 11 Jahren immer noch nicht jeder 
Compiler geschafft, das auch umzusetzen.

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.