Troubleshooting

This page contains some hints and tips about solving problems that you might encounter when using PMON. Note that many of these solutions apply as much to IMON as they do PMON.

I can't get my Interrupts to work

The first thing to check is whether your peripheral's interrupts are reaching the CPU. You can do this very simply from the PMON command line.

This example is for the 2681 DUART that LSI uses on most of its eval boards. The values shown here are for the BDMR4101 eval board.

PMON> fill . .+100 0	-- fill memory with nops.
PMON> m be000017 ff	-- enable the 2681's interrupt mask.
PMON> m be000017	-- check the 2681's Interrupt status register.
be000017 09 .		-- looks good. TXA, TXB, and Timer ints are asserted.
PMON> t			-- single step. This causes PMON to reread 
			-- the CAUSE register.
PMON> r cause		-- read the CAUSE value.
C0_CAUSE: BD CE   IP   SW EXCODE
          0  0 000001 00   Bp	-- Good. Int0 is asserted.

2-port Download Hangs

This is usually caused by a download record that contains a reference to an unimplemented address. Check the .map file for strange addresses.

If you are suspicious about your cables, try using PMON's tr command to check out the connection. For example,

	PMON> tr
	% edown < file.rec
	-- one line of data should appear in the PMON console window
	press cntrl-F in the console window
	-- another line of data should appear in the PMON console window
	press cntrl-K in the console window to return to the PMON prompt

Single-port Download Hangs

This is usually caused by either,

  • A download record that contains a reference to an unimplemented address.
  • The host transmitting the data too fast for the target.
  • Because you are trying to download FastFormat records. FastFormat records can only be downloaded in 2-port mode.

Errors Reported from Download

This is usually caused by the host sending the characters too fast for the target system.

If this is an ATMizer system. The problem is most likely caused by a lack of download protocol. When downloading to an ATMizerR/T platform, you must use a download protocol. See the User's Manual for a discussion of how to configure the download protocol.

If you experience this problem when using other processors in LSI's MIPS family, the problem is most likely caused by the caches not being enabled.

Errors Reported from Ethernet Download

If you see 'protocol not supported' messages, it is likely that you have a duplicate IP or hardware address on your network. Each piece of equipment that is connected to your network must have a unique Ethernet hardware (MAC) address. PMON always uses the same value (currently aa:bb:cc:0:0:0), however if you have more than one PMON-based board on your network, you will need to choose different values for each board.

You can either change the value at the PMON prompt using the 'set etheraddr' command, or you can edit the file include/defines.h and build a new PROM. See also.

I get the message "out of symbol space" during download

PMON uses the heap to store the downloaded symbols. If you have a large number of symbols (or the symbols are very long), you will run out of heapspace. To correct this, set the heaptop using PMON's set command.

For example, to increase your heapspace by 64K bytes, perform the following steps.

	pmcc -T 80030000 -o test1 test1.c
	PMON> set heaptop 80030000
	PMON> load

How do I generate S-records when using the GNU toolset?

You call the GNU tools directly, you will need to use the utility objcopy. Try...

objcopy -O srec [infile] [outfile]

The ATMizer (64360) Doesn't DMA Correctly

This is usually caused by incorrectly using load or store half-word instructions to access the ATMizer's special registers (CREDIT etc). All these registers must be accessed using load and store word instructions. The only exceptions are PRU timers 0-7 which must be accessed using load and store half-word instructions.

PMON Overwrites the Contents of Registers a0 and a1

PMON always sets the value of a0 and a1 when you issue the g command. This is to permit command line arguments to be passed to the downloaded program. This is why the 'g' command must be be used once only after a program has been downloaded. The c command must be used to continue execution after a breakpoint.

PMON Overwrites the Contents of Registers k0 and k1

When single stepping, PMON requires the use of the k0 register (and k1 on some processors). This is unavoidable. But it does mean that you cannot single-step through a piece of code that uses these registers. See also PMON Limitations and IMON Limitations.

Win95/NT complains about "out of environment space"

If Win95/NT complains about "out of environment space" when typing the SETENV command, you probably need to add the following line to your CONFIG.SYS file:

	SHELL=C:\DOS\COMMAND.COM C:\DOS\ /E:1024 /p
Where C:\DOS is the directory that contains COMMAND.COM and other Win95/NT utilities.

Win95/NT complains about "too many parameters"

If Win95/NT complains about "too many args" when typing the SETENV command, you probably need to add double quotes around the %path% variable. For example,

	path "%path%";c:\lsipkg\lib

Can't open new Win95 apps after Tasking build

There appears to be some conflict between Microsoft's nmake and Tasking's compiler. As a result, a PMON build might either stop with some strange error at some arbitrary point, or if it completes, you might not be able to open some Win95 applications afterwards (eg. MS-DOS Prompt window).

If it stops with a strange error, you can usually continue by simply reissuing the nmake command again. Unfortunately the only way around the problem of not being able to open new apps, is to reboot your system. These problems should go away when Tasking starts shipping real 32-bit apps, rather than these 16-bit apps with DOS extenders.

Can I use PMON with the dbx Supplied by Sun?

No. The dbx supplied by Sun understands the Sparc architecture. You must use a dbx that is targeted to the MIPS architecture.

After I Type 'g' Cntrl-C Doesn't Return Control to the Prompt

Because PMON's I/O is not interrupt driven, it is unable to 'see' the cntrl-C unless your program is performing I/O via PMON. This limitation should not occur if you are using SerialICE.

Why does my program only work correctly the first time?

When you download a program, the .data section (initialized global data) gets initialized from the file on your host. Thus, the first time you run it, it gets these correctly initialized values. However, if you re-execute the program without re-downloading it, the .data section does not get reinitialized. Thus, the second time you run your program, it gets the data values left behind after the first time that it was executed. Depending on how you have written your program, that my cause your program to behave incorrectly, or even crash!

How do I port PMON to my own board?

For more information on porting PMON to a new board, read the description in the PMON User's Manual.

Does PMON run with interrupts disabled?

Normally PMON runs with interrupts disabled. But some processors have stuff like bus-error detection that needs interrupts enabled. On those processors interrupts will be enabled. However, if a downloaded client program enables interrupts, PMON will disable interrupts when a breakpoint is hit, but restore them when you continue (or single-step).

What do the ioctl calls with GETINTR and SETINTR do?

The SETINTR ioctl call is used to install the address of the code that handles the ^C event. The address passed must be the address of a jmp_buf that was previously set by setjmp(). GETINTR returns the current value.

Why does Install ask for the client ram size?

PMON needs to know how much RAM you have in order to be able to set the stack pointer to the top of memory. It sets the client sp to Client_PC+client_memory_size-24.

What to do if you get "Target not responding" messages

When using SerialICE, it is possible for the SerialICE Controller and the SerialICE Kernel to get out-of-step. To correct this situation press RESET on the target and then type 'sync'.