Example: void kfunc(unsigned char * m) { unsigned char xdata * k;
REG = *k; }
If I hover over k, UVision says k = C:0x0000. If I define k as a global no such issues.
Am I missing something here?
It appears to be an issue with pointer + fixed offset. If I actually modify the pointer instead, I get the correct behavior. Though I still can't inspect the pointer or its target. I think that's due to optimizations, which is fairly reasonable. I'll respond again if I find out more.
Thanks all.
So, have you looked at the generated assembler code?
A lot of compilers would ignore your pointer variable, and just evaluate the real address for the individual memory accesses - all depending on how good the processor is at doing pointer manipulation.
In this case, it is porbably as cheap - or cheaper - for the compiler to join (BASE plus a constant offset) in the individual accesses (or as an decremented temp variable) and then add the Offset parameter before making the memory access.