I finally got the SYSCON overwrite problem fixed. The label
___lib_end_of_heap_descriptions in "seg_init.asm" was not getting
placed in memory but was being eliminated. I had to put the following
in my init code so that the variable was used and not eliminated :
.extern ___lib_end_of_heap_descriptions ;
.global _Init_DSP;
_Init_DSP:
leaf_entry
r0 = pm(___lib_end_of_heap_descriptions) ;
This is a dummy that I don't do anything with but it eliminated the
problem. The problem with the library is that the label CAN be
eliminated.
Depending on the state of memory after a reset, the library heap
loader may or may not find what it considers a "valid heap int"
section.
sholle@link-comm.com (Steve Holle) wrote in message news:<ba83847d.0403041413.57c4860a@posting.google.com>...
> I have a problem I'm hoping someone can help me with. I have an
> ADSP-20165L system with external SRAM and have moved the $C_CPP_LIBS
> to SRAM as shown in the snip from my ldf below:
>
> ...
> $DEF_LIBS = libdsp.dlb;
> $C_CPP_LIBS = libc.dlb, libcpp.dlb, libcpprt.dlb, libio.dlb;
> $LIBRARIES = $DEF_LIBS, $C_CPP_LIBS;
> ...
> seg_pm_sdram { TYPE(PM RAM) START(0x00020000) END(0x00027fff)
> WIDTH(32) }
> seg_dm_sdram { TYPE(DM RAM) START(0x00030000) END(0x0005ffff)
> WIDTH(32) }
>
> SECTIONS
> {
> ...
> // .text output section
> seg_pm_sdram
> {
> // INPUT_SECTIONS( $C_CPP_LIBS(seg_pmco) ... )
> INPUT_SECTIONS( $C_CPP_LIBS(seg_pmco) ... )
> } > seg_pm_sdram
>
> Ignore the sdram labels and substitute sram as this system has no
> sdram.
>
> When I load this program in the IDE using the F7 Build Project key, my
> SYSCON and WAIT registers get trashed. I have traced the problem to a
> section of the library initialization in "__lib_setup_heaps" in the
> section with the heading "loop_thru_heaps". After fairly large number
> of iterations, SYSCON and WAIT get overwritten, usually with
> 0x00000000.
>
> Any ideas?
Reply by Steve Holle●March 5, 20042004-03-05
Kenneth Porter <ken.blacklist@sewingwitch.com> wrote in message news:<Xns94A2D3022ED88shivawellcom@64.164.98.49>...
> sholle@link-comm.com (Steve Holle) wrote in
> news:ba83847d.0403041413.57c4860a@posting.google.com:
>
> > When I load this program in the IDE using the F7 Build Project key, my
> > SYSCON and WAIT registers get trashed. I have traced the problem to a
> > section of the library initialization in "__lib_setup_heaps" in the
> > section with the heading "loop_thru_heaps". After fairly large number
> > of iterations, SYSCON and WAIT get overwritten, usually with
> > 0x00000000.
>
> Did you define any heaps? You need a small amount of space in that section
> to satisfy one iteration of the initializer loop. It's been a long time
> since I looked at it so I don't recall in detail how much you need, but I
> think it was 4-6 words of zero.
The following is the heap sections of my ldf.
...
seg_heap { TYPE(DM RAM) START(0x0000ddb9) END(0x0000deff) WIDTH(32) }
...
heap
{
// allocate a heap for the application
ldf_heap_space = .;
ldf_heap_length = MEMORY_SIZEOF(seg_heap);
ldf_heap_end = ldf_heap_space + ldf_heap_length - 1;
} > seg_heap
Reply by Kenneth Porter●March 5, 20042004-03-05
sholle@link-comm.com (Steve Holle) wrote in
news:ba83847d.0403041413.57c4860a@posting.google.com:
> When I load this program in the IDE using the F7 Build Project key, my
> SYSCON and WAIT registers get trashed. I have traced the problem to a
> section of the library initialization in "__lib_setup_heaps" in the
> section with the heading "loop_thru_heaps". After fairly large number
> of iterations, SYSCON and WAIT get overwritten, usually with
> 0x00000000.
Did you define any heaps? You need a small amount of space in that section
to satisfy one iteration of the initializer loop. It's been a long time
since I looked at it so I don't recall in detail how much you need, but I
think it was 4-6 words of zero.
Reply by Steve Holle●March 4, 20042004-03-04
I have a problem I'm hoping someone can help me with. I have an
ADSP-20165L system with external SRAM and have moved the $C_CPP_LIBS
to SRAM as shown in the snip from my ldf below:
...
$DEF_LIBS = libdsp.dlb;
$C_CPP_LIBS = libc.dlb, libcpp.dlb, libcpprt.dlb, libio.dlb;
$LIBRARIES = $DEF_LIBS, $C_CPP_LIBS;
...
seg_pm_sdram { TYPE(PM RAM) START(0x00020000) END(0x00027fff)
WIDTH(32) }
seg_dm_sdram { TYPE(DM RAM) START(0x00030000) END(0x0005ffff)
WIDTH(32) }
SECTIONS
{
...
// .text output section
seg_pm_sdram
{
// INPUT_SECTIONS( $C_CPP_LIBS(seg_pmco) ... )
INPUT_SECTIONS( $C_CPP_LIBS(seg_pmco) ... )
} > seg_pm_sdram
Ignore the sdram labels and substitute sram as this system has no
sdram.
When I load this program in the IDE using the F7 Build Project key, my
SYSCON and WAIT registers get trashed. I have traced the problem to a
section of the library initialization in "__lib_setup_heaps" in the
section with the heading "loop_thru_heaps". After fairly large number
of iterations, SYSCON and WAIT get overwritten, usually with
0x00000000.
Any ideas?