I got my program to a point where I needed to test so I ran it in the uVision simulator. It was flawless. I fired up my Nohau emulator and ran it on our new PC board. Perfect.
I burned a chip (89C51RD2) and popped it in the board...nothing.
Since I am now the only embedded guy in the shop I work alone I have no one to bounce ideas off. So I've come here.
The oscilloscope shows that timer_0 is running, and my ISR is OK because the watchdog strobe is happening and the timer values are being reloaded.
Has anyone seen this before? Do you have a suggestion of of path to find the differences between the simulated and emulated situation and running on the board?
I wish I could. I have just one board at this point. It is the exact same board that I'm using on the emulator and since the socket seems to work there, I'm currently assuming that it is OK. Usually the pod into the socket is very fragile and if that works I usually trust the socket.
I strongly suspect the RAM on the emulator is different than the RAM on the chip. That, however, leads me back to the simulator which, I assume, models the chips RAM closely.
I do think this is the correct track.
That, however, leads me back to the simulator which, I assume, models the chips RAM closely.
That assumption is not particularly safe, to put it mildly. Real static RAM tends to come out of power-up or reset containing random garbage, whereas the simulator starts with all-zeroes.
If anything, it would be the emulator that more closely models real RAM behaviour.
Real static RAM tends to come out of power-up or reset containing random garbage, whereas the simulator starts with all-zeroes. thus if the sizes in startup.a51 are wrong that would give the described effect.
Erik
Use the Led or a pin. Put a pulse on it at several points in the code ( Including startup) and count the pulses. That way you at least know where to look.
Does your emulator allow you to use the off chip RAM?