We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Hello all. I'm using 0x80000(, 0x90000..) as a mspace for external eeprom(s). Is there a way to avoid to check the (valid) mspace of constants? Or even better, to add a 'new' memory space?
#define T_SIZE 16 #define P_SIZE 4*T_SIZE #define Params_E (0x080000 | 0x0140) #define ParamTab_E(n) (Params_E+n*T_SIZE) #define Param_Chk_E (Params_E+P_SIZE) unsigned char * pp; unsigned char tmp = 0; // This doesn't work pp = (unsigned char *)0x80050; // This does work pp = (unsigned char *)(0x80000 | tmp); // This doesn't work pp = (unsigned char *)Params_E; // This doesn't work pp = (unsigned char *)ParamTab_E(0); // This does work pp = (unsigned char *)ParamTab_E(tmp); // This doesn't work pp = (unsigned char *)Param_Chk_E;
Thanks Drew, That's just what I have been searching for. I'll have to write an ASM-driver and voila. I have used something like this to avoid the error message:
unsigned int temp; unsigned int * anypointer; temp = 0x1234; // some address in eeprom anypointer = 0x80000 | temp; if ( (*(char *)anypointer) == 8 ) .. // special routine for eeprom else .. // ordinary memory handling
Look in your Keil\C51\Examples folder for examples of accessing EEPROM like this. I think the driver or compiler handles the decision on which memory handling to use - I don't think it needs to go in your application software?