| ||||||||
Technical Support Support Resources Product Information | C51: STATIC POINTERS VS EXPLICITLY PLACED VARIABLESInformation in this article applies to:
SYMPTOMMy project includes several peripherals mapped into XDATA space. I want to access the registers of these peripherals, and I've declared a series of static pointers to address them. For example: xdata volatile unsigned char *pReg1 = 0x1234; I also assigned these values to other pointers, like this: xdata volatile unsigned char *regPtr = pReg1; The optimizer can alter these pointers so that I cannot access these registers. CAUSEThe optimizer recognizes the locations you specified as arbitrary and not necessary to be reserved. It re-assigns your "registers" to other locations to streamline program flow. RESOLUTIONInstead of using static pointers you should declare a variable for each XDATA register location and force it to the proper address using the _at_ keyword. You can then use this address to create pointers. The following is an example of how this can be done. xdata volatile unsigned char Reg1 _at_ 0x1234; xdata volatile unsigned char *regPtr = &Reg1; MORE INFORMATION
SEE ALSOLast Reviewed: Friday, July 15, 2005 | |||||||
| ||||||||