xdata unsigned long var_long _at_ 0x0150; unsigned char * pointer; pointer=0x0150; var_long=0x45213256; SBUF=*pointer; ... SBUF=*(pointer+1); ... SBUF=*(pointer+2); ... SBUF=*(pointer+3); ...
my uart communication work, when i send datas byte one byte. when i try to send a long variable in above form , uart com. dont work. is this format illegal? xdata unsigned long var_long _at_ 0x0150; unsigned char * pointer; pointer=0x0150; var_long=0x45213256;
*pointer : 0x45 ?? *(pointer+1) : 0x21 ?? *(pointer+2) : 0x32 ?? *(pointer+3) : 0x56 ??
"Or just get rid of the "magic numbers" altogether ..."
But then it wouldn't be nearly so magic when (if) it works and what's the fun in that?
like: pointer[0], pointer[1], pointer[2], pointer[3]
like
pointer = (unsigned char *) &longvar; ... SBUF = *pointer++; // msb (assumes big-endianness) ... SBUF = *pointer++; // 2sb ... SBUF = *pointer++; // 3sb ... SBUF = *pointer++; // lsb
To be pedantic, that's post-increment - not auto-increment
If the underlying architecture has an auto-increment facility, the compiler might use it to implement the post-increment...
Right you are, thank you. I stand corrected :)