Problems in boot_card() with configuration
Gedare Bloom
gedare at rtems.org
Thu Feb 14 20:19:14 UTC 2013
On Thu, Feb 14, 2013 at 2:57 PM, Matthew J Fletcher <amimjf at gmail.com> wrote:
>
>
> On 14/02/13 19:16, Joel Sherrill wrote:
>> On 2/14/2013 1:09 PM, Matthew J Fletcher wrote:
>>> Hi,
>>>
>>> I am using RTEMS 4.10.2, and a custom BSP based on the ARM rtl22xx.
>>>
>>> I am running through the asm startup ok and calling into boot_card(),
>>> stepping through its all working fine, work_area_start, work_area_size,
>>> heap_start and heap_size are setup as i expect from my linkscript.
>>>
>>> But the test of "work_area_size <= Configuration.work_space_size" fails
>>> because Configuration.work_space_size looks like 0xfffffff, the only
>>> place that assigns to Configuration.work_space_size is a few lines
>>> further down.
>>>
>>> Does this code presume that the BSP has set the Configuration structure
>>> to zero, or the whole memory ? even so the aforementioned test seems odd
>>> as its just testing memory has been initialised.
>>>
>>> Or am i missing some RTEMS initialisation call that needs to be done
>>> before boot_card() ?
>> No but there may be some basic C language assumptions not
>> being met. Configuration is in the .data section and that value
>> does not look like it was initialized to.
>>
>> Is your download correct?
>
> Pretty sure, its via JTAG, am less sure about the .data section. The
> rtl22xx specific start.s only seems to zero the bss
>
> ldr r1, =_bss_end_
> ldr r0, =_bss_start_
>
> _bss_init:
> mov r2, #0
> cmp r0, r1
> strlot r2, [r0], #4
> blo _bss_init /* loop while r0 < r1 */
>
> I did think that was a bit remiss so in my of asm startup i do
>
> ldr r1,=_etext // -> ROM data start
> ldr r2,=_data // -> data start
> ldr r3,=_edata // -> end of data
> loop_a: ldr r0,[r1]
> str r0,[r2]
> add r1,#4
> add r2,#4
> cmp r2,r3 // check if data to move
> blo loop_a // loop until done
>
I don't think you want to do this.. it looks like you are initializing
your .data section to zero. But .data stores the program's already
initialized data including precomputed fields.
> and in my custom linkerscript i define
>
> /* .data section which is used for initialized data */
> .data : AT (_etext)
> {
> _data = .;
> *(.data)
> } > RAM
>
> . = ALIGN(4);
> _edata = . ;
> PROVIDE (edata = .);
>
> but the rtl22xx linkerscript it does
>
> .data :
> {
> *(.data)
> *(.data.*)
> *(.gnu.linkonce.d*)
> *(.jcr)
> SORT(CONSTRUCTORS)
> _edata = .;
> } > sdram
>
> i am not overly interested in C++ constructors but i guess the
> *(.data.*) is additional linker magic for gcc4, my previous usage of
> this linkerscript was gcc3.
>
>
>
>
>
>>>
>>> - Matthew
>>> _______________________________________________
>>> rtems-users mailing list
>>> rtems-users at rtems.org
>>> http://www.rtems.org/mailman/listinfo/rtems-users
>>
>>
> _______________________________________________
> rtems-users mailing list
> rtems-users at rtems.org
> http://www.rtems.org/mailman/listinfo/rtems-users
More information about the users
mailing list