??? 01/15/10 13:14 Read: times |
#172485 - Simulation vs. Embedded Discrepancy |
Hi folks,
I've been simulating a design for the AT89C51ID2 8051, and finally gotten a chance to run the code embedded. After a good deal of debugging some odd outputs, I seem to have located the root of my issues. I currently have a simple app to bring up the 8051 in a good state and then send a character out the SPI bus. The code works fine in simulation. When I run embedded, however, I have problems with the SPI output when passing variables. For example, the following works in simulation and embedded: spi_shiftByte(0x55); // as expected, I see 0x55 on the MOSI line The following works only in simulation: unsigned char test _at_ 0x702; // address is arbitrary test = 0x55; spi_shiftByte(test); // simulation outputs 0x55, while embedded outputs 0x02 (and seems to always be the least significant byte of the variable's address I also had some interrupt-driven serial port i/o I stripped out during debugging. Interestingly, I was seeing errors with it that could also be explained if passed variables (tx and rx buffer locations) were showing up as the LSByte of addresses instead of their values. Note that everything works in simulation and I'm fairly confident in this simulator. The assembly generated looks ok, and I'm stumped on how passing by value could yield a piece of the address. Maybe something funny on an internal bus? I was wondering if this is something anyone has seen before, or if anyone has any ideas on a good next step for debugging this. Unfortunately, I'm currently without an emulator. Thank you, Louis |