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

Keil's Simulation is right or wrong?

The MCU I used is SM8958A,which has 1K bytes on-chip RAM, 256 bytes of it are the same as general 8052 internal memory structure while the expanded 768 bytes on-chip RAM can be accessed by external memory addressing method (by instruction MOVX).The SCONF and RCON should be setting when the expanded 768 bytes on-chip RAM is used.The meaning of RCON is below:

SM8958A has 768 byte on-chip RAM which can be accessed by external memory addressing method only. (By instruction MOVX). The address space of instruction MOVX @Rn is determined by bit 1 and bit 0 (RAMS1, RAMS0) of RCON. The default setting of RAMS1, RAMS0 bits is 00 (page0).

RAMS1 RAMS0  MOVX @Ri i=0,1 mapping to expended RAM address

 0     0            $0000 ~ $00FF
 0     1            $0100 ~ $01FF
 1     0            $0200 ~ $02FF

Now I write the code below:

unsigned long pdata a;
unsigned long xdata b;
SCONF |= 0x02;  //enable the 768 Ram
RCON |= 0x01;  //$0100 ~ $01FF

When I press F5, I find the position of 'a' in the memory is X:0x0001A4,and the auto disassemble instruction is mov r0, #0xA4, however,the position of 'b' in the memory is X:0x0002BF,and the auto disassemble instruction is movx DPTR,#02BF.

Finally, the program where used 'a' runs wrong,but the program where used 'b' runs right.

But when I program the HEX file into the MCU, let it run in the hardware , the program runs ok.

So, I'm very puzzled: Keil's Debug is right or wrong?

Note
This message was edited to reduce width.

Parents
  • and the auto disassemble instruction is mov r0, #0xA4

    There's nothing wrong with that. So the problem must be elsewhere.

    Are you sure that you configured all parts of Keil correctly for using PDATA in page 0x01?
    And why use page 01 anyway? It's in the middle of your XRAM, so you're fragmenting your XDATA space for no apparent reason.

Reply
  • and the auto disassemble instruction is mov r0, #0xA4

    There's nothing wrong with that. So the problem must be elsewhere.

    Are you sure that you configured all parts of Keil correctly for using PDATA in page 0x01?
    And why use page 01 anyway? It's in the middle of your XRAM, so you're fragmenting your XDATA space for no apparent reason.

Children