Forum: Mikrocontroller und Digitale Elektronik Keil µVision2


von BORIS (Gast)


Lesenswert?

Hi,

kann mir jemand weiterhelfen:
Arbeite mit Keil µVision2 und er kann den folgenden Befehl nicht
interpretieren (Meldung: ERROR C141: syntak error near '<'):

temp2=<6;

Gruß,
BORIS

von Schoaschi (Gast)


Lesenswert?

willst du sagen das temp2 grösser gleich 6 sein soll? oder was willst du
machen?

wenn temp2 grösser gleich 6 sein soll, dann musst du:

temp2<=6;

schreiben.

von Dirk (Gast)


Lesenswert?

"wenn temp2 grösser gleich 6 sein soll, dann musst du:

temp2<=6; "


LOL!

von BORIS (Gast)


Lesenswert?

hab ich auch schon versucht, aber da bringt mir das programm immer:
warning C275:expression with possibly no effect

von Christian Dresel (Chrisi01) (Gast)


Lesenswert?

ganz blöd von php abgeleitet kann man einer variabel doch keinen wert
"größer als x" zuweißen sondern nur einen festen wert also z.b.
temp2=6; . temp2<=6 würde in dem fall nur bei if gehen

wenn temp <= 6 dann ....

kann sein das ich unsinn laber aber wer weiß....

von Schoaschi (Gast)


Lesenswert?

@dirk ups... kleiner gleich... nicht grösser gleich .... sorry, ist aber
ja schon spät ;-)

@christian: bei if benutzt du das nicht, denn dann würde stehen:
if(temp2<=6)

in der schreibweise könnte das nur in einer for-Schleife vorkommen.
aber ich hoffe nicht das hier nur ein teil der schleife dargestellt
wird ;-)

@ Boris: könntest du bitte genauer sagen was es bewirken soll? wenn
einfach nur eine zahl kleiner gleich 6 erzeugt werden soll, dann würde
ich eine zufallszahl generieren und eine modulodivision durch 6 machen
;-) aber ich glaube das ist nicht das, was du suchst. Also zeig mehr
code oder beschreibe einmal!

von Peter D. (peda)


Lesenswert?

"warning C275:expression with possibly no effect"


Da hatter doch recht. Du machst einen Vergleich und schmeißt das
Ergebnis dann weg.

i = temp2=<6;

hätte z.B. einen Effekt. Oder eben innerhalb eines if, for, while.


Peter

von Peter D. (peda)


Lesenswert?

Meinte natürlich:

i = temp2<=6;

Vergleiche sind: ==, !=, >=, <=


Peter

von Peter D. (peda)


Lesenswert?

Und <, >


Peter

von BORIS (Gast)


Lesenswert?

Hi,
danke für die Hilfe!

Hier mein Code (habe ein Komentar beim Problem vermerkt):

struct date        // Struct für das Datum
  {
  uchar tag;
  uchar monat;
  int jahr;
  };

uchar DectoHex(uchar value);
uchar HextoDec(uchar value);
void get_datum(struct date *t);
void set_datum(struct date *t);


void get_datum(struct date *t)
  {
  volatile uchar temp;
  volatile uchar temp1;
  volatile uchar temp2;
  volatile uchar temp3;
  volatile uchar jahrtemp;
  volatile int t_jahr;
  i2c_start();
  i2c_schreiben(0xa0);
  i2c_schreiben(0x05);
  i2c_start();
  i2c_schreiben(0xa1);
  temp=i2c_lesen(1);
  i2c_stop();
  temp1=temp&0x0f;
  temp2=temp&0x30;
  temp3=temp&0xc0;
  temp3=temp3>>6;
  temp2=temp2>>4;
  temp=temp1 + ( 10*temp2);
  t->tag=temp;
  jahrtemp=temp3;
  i2c_start();
  i2c_schreiben(0xa0);
  i2c_schreiben(0x06);
  i2c_start();
  i2c_schreiben(0xa1);
  temp=i2c_lesen(1);
  i2c_stop();
  temp1=temp&0x0f;
  temp2=temp&0x10;
  temp2=temp2>>4;
  temp=temp1 + ( 10*temp2);
  t->monat=temp;
  i2c_start();
  i2c_schreiben(0xa0);
  i2c_schreiben(0x2f);
  i2c_start();
  i2c_schreiben(0xa1);
  temp=i2c_lesen(1);
  i2c_stop();
  temp1=temp;
  i2c_start();
  i2c_schreiben(0xa0);
  i2c_schreiben(0x3f);
  i2c_start();
  i2c_schreiben(0xa1);
  temp=i2c_lesen(1);
  i2c_stop();
  temp2=temp;
  i2c_start();
  i2c_schreiben(0xa0);
  i2c_schreiben(0x4f);
  i2c_start();
  i2c_schreiben(0xa1);
  temp=i2c_lesen(1);
  i2c_stop();
  temp3=temp;
  t_jahr=(temp1*100)+temp2;
  if (temp3==jahrtemp) t->jahr=t_jahr;
    else
      {
      t_jahr++;
      t->jahr=t_jahr;
      temp2=t_jahr%100;
      temp1=t_jahr/100;
      i2c_start();
      i2c_schreiben(0xa0);
      i2c_schreiben(0x2f);
      i2c_schreiben(temp1);
      i2c_schreiben(temp2);
      i2c_schreiben(jahrtemp);
      i2c_stop();
      };
  }

void set_datum(struct date *t)
  {
  volatile uchar temp;
  volatile uchar temp1;
  volatile uchar temp2;
  volatile uchar temp3;
  volatile uchar speicher1;
  volatile uchar speicher2;
  volatile uchar jahrt;
  temp=t->tag;
  temp1=temp/10;
  temp2=temp%10;
  temp3=(temp1<<4)|temp2;
  temp=t->jahr;
  temp2=temp%4;
  jahrt=temp2;
  temp2=<6;                                // HIER DAS PROBLEM
  speicher1=temp2|temp3;
  temp3=get_wochentag();
  temp3=<5;
  temp=t->monat;
  temp1=temp/10;
  temp2=temp%10;
  temp1=<4;
  speicher2=temp1|temp2|temp3;
  i2c_start();
  i2c_schreiben(0xa0);
  i2c_schreiben(0x05);
  i2c_schreiben(speicher1);
  i2c_schreiben(speicher2);
  i2c_stop();
  temp=t->jahr;
  temp1=temp/100;
  temp2=jahr%100;
  i2c_start();
  i2c_schreiben(0xa0);
  i2c_schreiben(0x2f);
  i2c_schreiben(temp1);
  i2c_schreiben(temp2);
  i2c_schreiben(jahrt);
  i2c_stop();
  }

von Rufus T. Firefly (Gast)


Lesenswert?

Was sollen denn diese Zeilen bezwecken?

  temp2=<6;                                // HIER DAS PROBLEM

  temp3=<5;

  temp1=<4;

Könnte es sein, daß Du etwas ähnliches vorhast, wie weiter oben in
Deinem Sourcecode?

  temp3=temp3>>6;
  temp2=temp2>>4;


Dann würde

  temp2 <<= 6;

(was äquivalent zu
  temp2 = temp2 << 6;
ist)

temp2 um sechs Bits nach links schieben (also mit 64 multiplizieren).

Im übrigen ist das schwer lesbarer Spaghetticode.
Man darf auch selbsterklärende Variablennamen, Kommentare und logisch
strukturierenden Whitespace sowie Leerzeilen verwenden, das ist alles
andere als verboten.

Hast Du das wirklich selber geschrieben?

von BORIS (Gast)


Lesenswert?

Nein, das ist genau das Problem. Das ist von einem Vorgänger und ich
steig absolut nicht durch. Das ganze Prog. ist so geschrieben und
dieser Teil ist nur etwa ein fünfzigstel des ganzen Codes...
Danke für die Hilfe, das bringt mich schon weiter.

BORIS

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.