www.mikrocontroller.net

Forum: Compiler & IDEs ASM Befehl ROL in GGC


Autor: Arthur Brander (duri)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Liebe Netzbewohner

Gibt es in C einen Befehl der dem Assembler-Befehl ROL oder ROR 
enspricht ?

Gruss
   Duri

Autor: Profi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In gewisser Weise >> und <<, aber auch *2 und /2.
Beachte die Anweisungen   a*=2;   oder    a>>=1;   oder   a/=2;
Allerdings wird hier das Carry ignoriert, das musst Du extra (mit 
eigener Variable) behandeln, wenn Du es brauchst.

oder asm(ror);

Was möchtest Du denn genau machen?

Autor: Arthur Brander (duri)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Profi

Aber ich will rotieren (carryübertrag auf Bit 0) mit einem C-Befehl.

Ich will z.B. einen Lauflicht am Port B machen.

         PORTB<<=1;
  if (bit_is_set(SREG,0)) PORTB|= (1<<PB0);

Da sollte es einen Befehl in C geben der analog zu ROL funktioniert.

Gibt es das ?

Gruss
   Duri

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein.

Autor: FBI (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vieleicht so?
uint8_t i;
i = 0x01;
while(1) {
  PORTB = i;
  i <<= 1;
  if(!i) i = 0x01;
}

CU Frank

Autor: Arthur Brander (duri)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo A.K.

Das wollte ich wissen.

Gruss
  Duri

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

//ROR
PORTB = (PORTB<<1) | (PORTB>>7);

//ROL
PORTB = (PORTB>>1) | (PORTB<<7);


Matthias

Autor: Andreas Paulin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Geniale Lösungen sind immer einfach :)
Cool!
Musste ich doch mal loswerden, hab genau sowas gesucht!

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Aber ich will rotieren (carryübertrag auf Bit 0) mit einem C-Befehl.

Das geht nicht, da es in C Flags gar nicht gibt.

> Da sollte es einen Befehl in C geben der analog zu ROL funktioniert.

Du kannst auch inline-Assembler verwenden.

> //ROR
> PORTB = (PORTB<<1) | (PORTB>>7);

Etwas besser wäre dann noch:

uint8_t portb = PORTB;
PORTB = (portb<<1) | (portb>>7);

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.