ARM Technical Support Knowledge Articles

PROGRAM CRASHES WHEN LOADED BELOW 100H

Applies to: MCB520 Evaluation Board

Answer


Information in this article applies to:


SYMPTOMS

Help. I have a very small program that I download and run on the MCB520 board. The opcodes at address 3Bh, 3Ch, and 3Dh (or at 23h, 24h, and 25h) get corrupted and my program crashes. If I relocate my program to start at 100h, everything works fine. What's wrong with this configuration?

CAUSE

The monitor on the MCB520 board uses SIO1 on the 520 to communicate with the PC. It also uses the interrupt vector (interrupt 7 at address 3Bh) to halt program execution when you stop program execution in the debugger. The monitor overwrites this interrupt vector and that is what causes your program corruption.

If you change the monitor to use SIO0, interrupt vector 4 will be used instead of interrupt 7.

RESOLUTION

There are 2 ways you can resolve this problem.

  1. Locate your program code to start at 100h like you are doing with the linker:
    BL51 mycode.obj CODE(0100h)
    
  2. Define a dummy interrupt for interrupt 7 (or 4 if you use SIO0):
    void dummy_isr (void) interrupt 7
    {
    }
    

    This will reserve space for the interrupt vector (actually it will point to dummy_isr) and the monitor can overwrite this without corrupting your program code.

MORE INFORMATION

Refer to the Example Programs section in the MCB520 Evaluation Board User's Manual for more information.

For more information about the MCB520 evaluation board, refer to the following URL: http://www.keil.com/mcb520

Article last edited on: 2005-07-09 11:18:38

Rate this article

[Bad]
|
|
[Good]
Disagree? Move your mouse over the bar and click

Did you find this article helpful? Yes No

How can we improve this article?

Link to this article
Copyright © 2011 ARM Limited. All rights reserved. External (Open), Non-Confidential