Hallo, wie kann ich den Assemblerbefehl rol in GCC ersetzen? Danke
#include <stdint.h> uint8_t c; c = (c << 1) | (c & 0x80); uint10_t i; i = (i << 1) | (i & 0x8000); oder Inline-Assembler benutzen.
Was schreibe ich denn für einen Mist ;-) Es ist zu heiss... #include <stdint.h> uint8_t c; c = (c << 1) | ((c & 0x80) >> 7); uint16_t i; i = (i << 1) | ((i & 0x8000) >> 15);
Ja, ist heiß heute, und ich hab ne Baustelle vorm Fenster!!! Carry ist nicht so wichtig, ... nur die bits die links rausfallen müssen rechts wider rein in mein Byte. Noch Vorschläge ?? Ach ja, muss halt schnell gehen, ist in ner Interruptroutine.
@ Stefan
>Was schreibe ich denn für einen Mist ;-) Es ist zu heiss...
Wohl wahr. In der Ruhe liegt die Kraft.
uint8_t c;
c = (c << 1) | ((c >> 7) & 1);
uint16_t i;
i = (i << 1) | ((i >> 15) & 1);
MfG
Falk
@ tt >Noch Vorschläge ?? >Ach ja, muss halt schnell gehen, ist in ner Interruptroutine. Wens ohne Assembler sein soll, dann vielleicht so // unit8_t if (a & 0x80) a = (a<<1) | 1; else a = (a<<1); // uint16_t if (a & 0x8000) a = (a<<1) |1; else a = (a<<1); MfG Falk
@ Falk Danke, so hatte ich es auch bisher gemacht, dachte es gibt vielleicht noch was eleganteres.
@ tt >Danke, so hatte ich es auch bisher gemacht, dachte es gibt vielleicht >noch was eleganteres. Hmm, ich wüsste im Moment nicht, wie man es eleganter und schneller macht. Der AVR hat keinen ROL ohne Carry. MfG Falk
> Hmm, ich wüsste im Moment nicht, wie man es eleganter und schneller > macht. Der AVR hat keinen ROL ohne Carry. Na dann schau mal LSL und LSR an. LSL: >Shifts all bits in Rd one place to the right. Bit 7 is cleared. Bit 0 is >loaded into the C flag of the SREG. This operation effectively divides an >unsigned value by two. The C flag can be used to round the result.
@ Simon Küppers >> macht. Der AVR hat keinen ROL ohne Carry. >Na dann schau mal LSL und LSR an. LSL != ROL MFG Falk
@ Simon Küppers (simon) >Eben, denn LSL arbeitet ohne Carry. ROL mit. Sicher, aber wie ist dein Posing zu verstehen? Was willst du damit sagen? >>> Hmm, ich wüsste im Moment nicht, wie man es eleganter und schneller >>> macht. Der AVR hat keinen ROL ohne Carry. >>Na dann schau mal LSL und LSR an. MfG Falk
Also ich bin es dann nochmal. Im moment mach ich das: mst= (signal_out & 0x80); if (mst) PORTB |=(1<<PB3); else PORTB &= ~(1<<PB3); signal_out= signal_out<<1; geht das einfacher?
@ tt >Im moment mach ich das: >mst= (signal_out & 0x80); >if (mst) PORTB |=(1<<PB3); >else PORTB &= ~(1<<PB3); >signal_out= signal_out<<1; Wo brauchst du dabei ein ROL? Du willst doch nur das MSB auf ein Portpin kopieren und die Daten um ein Bit weiterschieben. Sieht nach Soft-SPI aus. >geht das einfacher? Nein. Wozu auch? MFG Falk
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.