Ich verwende einen PIC18f-Mikrocontroller. Ich muss eine 16-Bit-Integer-Variable (2 Bytes) schreiben, die in eine Variable mit zwei Zeichen umgewandelt wurde, dh jedes Byte in eine fortlaufende Adresse des EEPROM schreiben. Zuerst muss ich ein oberes Byte (8-Bit-Daten) in das EEPROM schreiben. Ich kann die höheren 8 Bit der Integer-Variablen nicht mit dem folgenden Code abrufen (wobei ich die unteren 8 Bit der Integer-Variable schreiben kann). Mein Code ist
void int_EEPROM_putc(unsigned char address, unsigned char data);
unsigned char int_EEPROM_getc(unsigned char address);
unsigned char c;
unsigned int d;
unsigned char* e;
unsigned char f;
void main()
{
d=0xffff;
e=(unsigned char*)&d;
//f=*e
f=*(e+1);
int_EEPROM_putc(0x02,f);
delay_ms(100);
c=int_EEPROM_getc(0x02);
while(true)
{
if(c==255)
{
PORTB=~PORTB;
}
else
{
PORTB=0xff;
}
}
Der allgemeinste Ansatz zum Extrahieren von Teilen eines ganzzahligen Werts ist das Verschieben und Maskieren. So:
d = whatever;
c = d & 0xff; // extract low 8 bits
c = (d >> 8) & 0xff; // extract next 8 bits
Wenn Sie wie hier wissen, dass der Wert in d 16 Bit beträgt, können Sie den Code für die nächsten 8 Bit durch Schreiben etwas einfacher machen
c = d >> 8; // extract high 8 bits of 16-bit value
Im Allgemeinen ... ist es aus Gründen der Portabilität keine gute Praxis, für jedes int eine Bitgröße oder "Endian-Ness" anzunehmen. Je nach Prozessor und Compiler kann und int alles von 8-Bit bis 64-Bit oder sogar eine andere ungerade Größe haben und kann entweder im Little-Endian- oder im Big-Endian-Format gespeichert werden.
Was passiert, wenn Sie eines dieser beiden tun?
if(d==255)
{
}
// or
int d = 0xffff;
d >> 8;
char c = d;
if (c==255)
{
}
d>>8;
wird keine Wirkung haben. Es ist nur ein Wert für die rechte Hand, nichts zugewiesen. Du willst wahrscheinlichd=d>>8;
d >>= 8;
es d = d >> 8;
zu einem anderen Code kompiliert wird.
Rev
c
0xFF, aber das ist es nicht?Rev
0xFF
, ich würde einen Anfangswert verwenden,d=0xAABB;
um die Werte zu unterscheiden.KATHIR kamu
Rev
KATHIR kamu
Rev
c
Ihres Ports schreiben und den Wert auswerten.Grady-Spieler