- LiFePO4 Speicher Test         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 18

Thema: Bascom-Entsprechung von x<<y (AVR-C)

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    09.05.2004
    Ort
    Bielefeld / Paderborn
    Beiträge
    1.253

    Bascom-Entsprechung von x<<y (AVR-C)

    Anzeige

    E-Bike
    Tagchen!

    ich würde gern folgende Zeile Avr-C in Bascom übersetzen:

    Code:
    tmpc |= (1<<5);
    Das OR ist klar.

    Code:
    tmpc = tmpc OR ...
    Aber was ist mit dem Shift? Im C-Code wird eine 1 um 5 Stellen in das Byte geschoben. Das Bascom-Shift scheint sowas aber nicht zu ermöglichen:

    Syntax:
    SHIFT var , LEFT/RIGHT[ , shifts]

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Bedeutet das nicht einfach

    tmpc = tmpc OR &B00010000

    oder bedeutet 5 mal shiften

    tmpc = tmpc OR &B00100000

    Tatsächlich würde man wohl

    Set tmpc.4 (bzw. Set tmpc.5)

    eingeben

    Gruß

    Rolf

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    42
    Beiträge
    2.009
    Es gibt in Basic die Befehle SHIFT und ROTATE, die dem >>/<< entsprechen. Bei einem wird ein rausgeschobenes Bit erhalten, beim anderen gehts verloren.
    #ifndef MfG
    #define MfG

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    09.05.2004
    Ort
    Bielefeld / Paderborn
    Beiträge
    1.253
    Jaecko das ist jetzt keine Antwort auf meine Frage.

    Ich habs nun so gemacht:

    Code:
    Tmp_c = Tmp_c Or 32
    Das packt mir ne 1 direkt an die 5. Stelle.

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Hallo,

    wie for_ro schon geschrieben hat, in Bascom macht man es am einfachsten mit Set tmpc.5 um das Bit5 zu setzen.
    Ist für den einen oder anderen auch besser zu erkennen um welches Bit es sich handelt als mit 32.

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    09.05.2004
    Ort
    Bielefeld / Paderborn
    Beiträge
    1.253
    32 ist doch ganz eindeutig ^^

    welche version ist denn schneller? oder WAS genau macht tmpc.5 eigentlich (in ASM)

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    42
    Beiträge
    2.009
    upsa... sorry verlesen. Dachte es geht ums shiften, nicht ums Bit setzen.
    #ifndef MfG
    #define MfG

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Hallo Jaecko,
    bei den C-Programmierern ist Bit setzen immer mit Shiften verbunden.
    tmpc |= (1<<5);
    wäre eigentlich in Bascom

    tmp=1
    shift tmp,left,5
    tmpc=tmpc or tmp

    (1<<5) macht natürlich Sinn, wenn Variablen beteiligt sind (1<<i), ansonsten kannst du genausogut

    tmpc=tmpc or 32

    in Bascom bzw.

    tmpc| = 32

    in C schreiben

    Gruß

    Rolf

  9. #9
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Bei festen Wert (1<<5) macht der C kompiler gleich ein 0x20 draus,
    also im Code gleich tmp |= 0x20.

    Das hat Bascom dzt. nicht drauf

    Mit Variablen zur Laufzeit wäre das Äquivalent
    Code:
    DIM TMP AS BYTE 
    DIM POS AS BYTE 
         pos = 5
         TMP.pos = 1
    Btw: das mit dem Shiften und dann Odern geht natürlich auch, is aber mehr Code
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    09.05.2004
    Ort
    Bielefeld / Paderborn
    Beiträge
    1.253
    Ja Moment mal, Picknick!

    Du übergibts dem GCC ja auch ne Konstante (5) und dem Bascom-Compiler ne Variable (Pos = 5). Ist klar dass der GCC das zur Compilierzeit auswertet und der Bascom-Compiler nicht. Wie ist es denn wenn man in Bascom
    Code:
    tmp.5 = 1
    machen würde?

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress