This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

XDATA Question

Hi,
I have a loop

for (address = 1; address <= 5; address ++)

ram_ptr[address] = 0xFA:

where unsigned char xdata *ram_ptr = 0x0000;
and unsigned int address;

Somehow when i watch the simulation the address never increments and it always write FA in the same address 0x0000. I have also tried using XBYTE[address] to no use.
Any solution to my problem would be greatly appreciated

Parents
  • Yes, in simulator everything seems to work fine, when i do real simulation with DW8051 it doesn't seem to work right. Let me give you an example.
    This works
    unsigned char xdata *ram_ptr = 0x0000;
    and then
    *ram_ptr = 0xAA;
    ram_ptr += 0x01;
    *ram_ptr = 0xBB;
    ram_ptr += 0x01;
    *ram_ptr = 0xCC;
    ...
    If i attempt to do the same thing using a for loop like
    for (address = 0; address <= 5; address ++)
    {
    *ram_ptr = 0xAA;
    ram_ptr += 0x01;
    }
    it somehow writes only AA to the location 0x0000 all the 6 times in the loop.

    Any reason why ?

    Thanks for your response

Reply
  • Yes, in simulator everything seems to work fine, when i do real simulation with DW8051 it doesn't seem to work right. Let me give you an example.
    This works
    unsigned char xdata *ram_ptr = 0x0000;
    and then
    *ram_ptr = 0xAA;
    ram_ptr += 0x01;
    *ram_ptr = 0xBB;
    ram_ptr += 0x01;
    *ram_ptr = 0xCC;
    ...
    If i attempt to do the same thing using a for loop like
    for (address = 0; address <= 5; address ++)
    {
    *ram_ptr = 0xAA;
    ram_ptr += 0x01;
    }
    it somehow writes only AA to the location 0x0000 all the 6 times in the loop.

    Any reason why ?

    Thanks for your response

Children
  • So I take it that we're talking about two different simulators here -- uVision's simulator works fine, but DW8051's (some 8051 core design tool???) simulator does not.

    You can convince yourself that there is nothing wrong with the Keil side of the toolchain by looking at the resulting assembly code and verifying that it's "doing the right thing". Then you'll have to figure out why DW8051 (or whatever) is broken. I can't help you out with that one, however.

  • Maybe address is located by the linker at 0x0000?
    If it is, you set address to 0xAA with your first pointer assignment and the loop stops.
    The same could have happened with your ram_ptr.