| ARM Technical Support Knowledge Articles | |
Applies to: ARM Developer Suite (ADS)
There is a bug in ADS 1.1 ARMulator which affects peripherals placed at high addresses beyond 0x80000000. Peripherals use ARMulif_ReadBusRange() to get their address base. Unfortunately, due to a coding error, this uses strtol(), which clips at 0x7fffffff, instead of strtoul(). Hence addresses > 0x80000000 give problems. This is fixed in ADS 1.2.
One workaround is to specify the address > 0x80000000 as a (signed) negative number, instead of an unsigned positive number, i.e.: in peripherals.ami , instead of changing:
Range:Base=0x0a800000
to:
Range:Base=0x84000000
use:
Range:Base=-2080374784
instead.
This is not be the most elegant solution, but it works!
The other (more elegant) workaround is to rebuild the peripheral model itself.
Locate ADSARMulatearmulext imer.c
err = ARMulif_ReadBusRange(&state->coredesc, state->hostif,
ToolConf_FlatChild(config, (tag_t)"RANGE"),
&state->my_bpar,
0x0a800000,0x40,"");
to:
err = ARMulif_ReadBusRange(&state->coredesc, state->hostif,
ToolConf_FlatChild(config, (tag_t)"RANGE"),
&state->my_bpar,
0x84000000,0x40,"");
Rebuild the model as described in the documentation
Article last edited on: 2008-09-09 15:47:28
Did you find this article helpful? Yes No
How can we improve this article?