According to debug session trough simulator,
R1 (bss start) is loaded with 0x40000380 and R2 (bss end) with
0x40001748, in other words the exact same addresses as in the .map
file.
After investigating further I have found that the range of memory,
where clearing causes software to hang, is the same as bss range used
by standard c libraries, below follows excerpt from the .map file.
Feels weirder and weirder...
.bss 0x40000b0c 0xc
/cygdrive/c/Cygnus/Arm-Tools/Bin/../lib/gcc-lib/ar
m-thumb-elf/3.3.1/../../../../arm-thumb-elf/lib/li
bc.a(__uClibc_main.o)
0x40000b0c __environ
0x40000b0c environ
0x40000b10 __progname
.bss 0x40000b18 0xc
/cygdrive/c/Cygnus/Arm-Tools/Bin/../lib/gcc-lib/ar
m-thumb-elf/3.3.1/../../../../arm-thumb-elf/lib/li
bc.a(__exit_handler.o)
0x40000b1c __exit_function_table
0x40000b18 __exit_count
0x40000b20 __exit_slots
.bss 0x40000b24 0x4
/cygdrive/c/Cygnus/Arm-Tools/Bin/../lib/gcc-lib/ar
m-thumb-elf/3.3.1/../../../../arm-thumb-elf/lib/libc.a(exit.o)
0x40000b24 __exit_cleanup
.bss 0x40000b28 0x4
/cygdrive/c/Cygnus/Arm-Tools/Bin/../lib/gcc-lib/ar
m-thumb-elf/3.3.1/../../../../arm-thumb-elf/lib/libc.a(abort.o)
.bss 0x40000b2c 0x98
/cygdrive/c/Cygnus/Arm-Tools/Bin/../lib/gcc-lib/ar
m-thumb-elf/3.3.1/../../../../arm-thumb-elf/lib/libc.a(malloc.o)
.bss 0x40000bc4 0x4
/cygdrive/c/Cygnus/Arm-Tools/Bin/../lib/gcc-lib/ar
m-thumb-elf/3.3.1/../../../../arm-thumb-elf/lib/libc.a(brk.o)
0x40000bc4 ___brk_addr
.bss 0x40000bc8 0x8
/cygdrive/c/Cygnus/Arm-Tools/Bin/../lib/gcc-lib/ar
m-thumb-elf/3.3.1/../../../../arm-thumb-elf/lib/libc.a(errno.o)
0x40000bcc _h_errno
0x40000bc8 errno
0x40000bcc h_errno
0x40000bc8 _errno
.bss 0x40000bd0 0xa
/cygdrive/c/Cygnus/Arm-Tools/Bin/../lib/gcc-lib/ar
m-thumb-elf/3.3.1/../../../../arm-thumb-elf/lib/li
bc.a(_ppfs_parsespec.o)
*fill* 0x40000bda 0x2 00
.bss 0x40000bdc 0x8
/cygdrive/c/Cygnus/Arm-Tools/Bin/../lib/gcc-lib/ar
m-thumb-elf/3.3.1/../../../../arm-thumb-elf/lib/libc.a(mbsrtowcs.o)
.bss 0x40000be4 0x8
/cygdrive/c/Cygnus/Arm-Tools/Bin/../lib/gcc-lib/ar
m-thumb-elf/3.3.1/../../../../arm-thumb-elf/lib/libc.a(__mbsnrtowcs.o)
.bss 0x40000bec 0x200
/cygdrive/c/Cygnus/Arm-Tools/Bin/../lib/gcc-lib/ar
m-thumb-elf/3.3.1/../../../../arm-thumb-elf/lib/libc.a(_stdio_init.o)
Kind Regards
/ DA
--- In lpc2000@yahoogroups.com, "xjag74" <detlef.weidner@w...> wrote:
> Hi,
>
> try to figure out with which values R1 und R2 are loaded before the
> loop (the values for the symbols __bss_start__ and __bss_end__).
>
> Regards
> XJAG
>
> --- In lpc2000@yahoogroups.com, "arkeryd" <arkeryd@y...> wrote:
> > Thanks, but...
> >
> > I checked the .map file and it shows the same thing, the bss area
> ends
> > at address 0x40001748.
> >
> > The ram area ranges from 0x40000000 to 0x40003FFF and the stack
is
> at
> > the end of the ram area, and total stack size is below 0x500
bytes.
> >
> > So as described below, it does't look like is an overlap
conflict,
> but
> > main() refuses to start unless commenting out the clear bss
code
> > from startup.s.
> >
> > I can't even get some dummy code just setting the leds - using
> MBC2100
> > dev board - followed by an eternal looop at beginning of main() to
> > run, unless commenting out the code for clearing bss section.
> >
> > Kind Regards
> >
> > / DA
> >
> >
> >
> > --- In lpc2000@yahoogroups.com, "xjag74" <detlef.weidner@w...>
> wrote:
> > > Hi,
> > >
> > > have a look to the Map-file.
> > > Check if the bss area is within the range of the RAM memory
area
> > > (below the stack area).
> > >
> > > regards
> > > xjag
> > >
> > >
> > > --- In lpc2000@yahoogroups.com, "arkeryd" <arkeryd@y...> wrote:
> > > > Hi,
> > > >
> > > > After adding several new source files to my application for
> > LPC2129,
> > > > it hangs when jumping from startup.s to main().
> > > >
> > > > The first thing that came to my mind was that perhaps too
much
> ram
> > > > memory was now used.
> > > > However, after checking by running startup.s trough the
> debugger,
> > it
> > > > doesn't seem like that.
> > > > I use the default startup.s for LPC2129.
> > > >
> > > > The last address used by the .data- and .bss-sections
> > > > (variables/arrays) in my application is 0x40001748.
> > > >
> > > > And this should not collide with stack either, as I use the
> > default
> > > > stack address and sizes:
> > > > Interrupt Mode size: 0x80
> > > > User/system mode size: 0x400
> > > > And just 4 bytes size in other modes.
> > > > Top of stack address: 0x40004000.
> > > >
> > > > The weird thing is even though no memory collision should
occur,
> > the
> > > > application starts if I comment out the "Clear .bss section
> code"
> > in
> > > > startup.s, so it must somehow be some collision, but I don't
> > > > understand why.
> > > >
> > > > # Clear .bss section (Zero init)
> > > > MOV R0, #0
> > > > LDR R1, =__bss_start__
> > > > LDR R2, =__bss_end__
> > > > LoopZI: CMP R1, R2
> > > > STRLO R0, [R1], #4
> > > > BLO LoopZI
> > > >
> > > > Any input to clear my confusion would be much appreciated! :)Message
Re: Application hangs before main(), seems ram related, but weird...
2005-09-14 by arkeryd
Attachments
- No local attachments were found for this message.