Lite Banging med Raspberry pi för I2C kontroll med perl (3 / 5 steg)
Steg 3: Intro till bakgrunden på hur perl lagrar information för hex och heltal
Perl hex siffror ser mycket mer ut som 8 byte stort heltal i databasen. För merparten av arbetet du gör det kommer ingen roll eftersom de inledande nollorna avkortas. Det finns en operation men som behöver lite ändring så att det visas att fungera korrekt. Det är lite kloka Invertera. Eftersom detta kommer att växla varje bit av det hela heltalet och ändra effektiv ordet bredd. Detta illustrerar också ineffektiviteten i med den här metoden, men det håller alla programmering i ett språk, och med ganska stor mängd minne som är tillgängligt i den hallon paj brukar det vara en fråga för de några byte data du kommer lite bang att köra I2C IO bussen. Programmet ovan visar några av de sätt du kan testa datatyperna. Resultatet är i inledningen fotografi
Låt oss titta på ett exempel på vad som händer och hur du löser den effektiva bredd förändringen.
om jag har en hex numret 0x01, som ser ut som 0000_0001b för ett exempel. Nu kan säga jag vill växla alla bitar i denna sträng med hjälp av den "~" drift och skriv ut värdet tillbaka ut i hex jag skulle få "FFFFFFFE" som resultat. Detta skulle inte vara lämplig för att använda med I2C kommandona på Raspberry pi. Detta kan lätt åtgärdas men kommer tillbaka och striping bort data du så om vi ändrar kommandot så här:
data_out = ~ data_in & 0xFF
Nu är vad vi får för utdata när du använder indata 0x01 0xFE. Varje bit växlas och en data-byte
för exemplen måste vi ändra tydlig bit formeln för att hantera databredd
0x24 | 0x04 = 0x24 < anger tredje biten, som bildades redan i det här exemplet
0x24 & ~ 0x04 * 0xFF = 0x20 < rensar den tredje biten och trunkerar databredd
0x24 ^ 0x04 = 0x20 < växlar den tredje biten