mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Keil µVision2


Autor: BORIS (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Schoaschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"wenn temp2 grösser gleich 6 sein soll, dann musst du:

temp2<=6; "


LOL!

Autor: BORIS (Gast)
Datum:

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

Autor: Christian Dresel (Chrisi01) (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß....

Autor: Schoaschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meinte natürlich:

i = temp2<=6;

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


Peter

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und <, >


Peter

Autor: BORIS (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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();
  }

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: BORIS (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.