Keil µVision2

Gast #172310
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.
Gast #172313
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ß....
Gast #172314
@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!
#172315
"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
Gast #172318
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();
  }
Gast #172319
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?
Gast #172320
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

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.