extern byte RamByteArray[3];
#pragma CODE_SEG __PIC_SEG __NEAR_SEG NON_BANKED
void foo() {
byte *BytePtr;
word *__far FarWordPtr;
BytePtr = RamByteArray;
BytePtr[0] = 0x7F;
BytePtr[1] = 0x80;
BytePtr[2] = 0xC0;
FarWordPtr = (word *__far)BytePtr[0];
}
#pragma DEFAULT_SEG
Message Edited by CrasyCat on 2007-04-13 11:44 AM
CompilerGuru wrote:
The problem is that you cannot cast things like array or structs in C.
snip...
#include <string.h>
unsigned char ptrData[3]= {0x7F, 0x80, 0xC0};
unsigned char *__far farPtr;
static void confUnion(void) {
union {
unsigned char* __far ptr;
unsigned char asBytes[3];
} u;
(void)memcpy(u.asBytes, ptrData, sizeof(u.asBytes));
farPtr= u.ptr;
}
static void confCast(void) {
farPtr= *(unsigned char *__far*)ptrData;
}
void main(void) {
confCast();
if (farPtr != (unsigned char *__far)0x7F80C0) {
for(;;) {/* bug */}
}
farPtr= 0;
confUnion();
if (farPtr != (unsigned char *__far)0x7F80C0) {
for(;;) {/* bug */}
}
for(;;) {}
}
FarWordPtr = *(word *__far*)BytePtr;
^
*(word *__far)&BytePtr[0]
FarWordPtr = (word *__far)*(word *__far)&BytePtr[0]