[ECOS] running code from RAM / Memory Regions

Jesper Skov jskov@redhat.com
Fri Aug 17 02:57:00 GMT 2001


>>>>> "Simpkins," == Simpkins, Andy <Andy.Simpkins@Transcomm.uk.com> writes:

Simpkins,> Am I approaching this the write way?  Are there any
Simpkins,> pitfalls I should watch out for?  Has this already been
Simpkins,> done (obviously it has) but is the code available?

Simply mark the function to be located in .2ram and it will
automagically do the right thing:

void flash_query(void* data) __attribute__ ((section (".2ram.flash_query")));


That is, assuming you are using eCos from CVS. Otherwise you'll need
to hack the arm.ld file so it contains a .data rule like this:

#define SECTION_data(_region_,  _vma_, _lma_) \
    .data _vma_ : _lma_ \
    { __ram_data_start = ABSOLUTE (.); *(.data*) *(.data1) MERGE_IN_RODATA \
    _GOT1_START_ = ABSOLUTE (.); *(.got1) _GOT1_END_ = ABSOLUTE (.); \
    _GOT2_START_ = ABSOLUTE (.); *(.got2) _GOT2_END_ = ABSOLUTE (.); \
    . = ALIGN (4); \
    KEEP(*( SORT (.ecos.table.*))) ;            \
    . = ALIGN (4); \
    __CTOR_LIST__ = ABSOLUTE (.); KEEP (*(SORT (.ctors*))) __CTOR_END__ = ABSOLUTE (.); \
    __DTOR_LIST__ = ABSOLUTE (.); KEEP (*(SORT (.dtors*))) __DTOR_END__ = ABSOLUTE (.); \
    *(.dynamic) *(.sdata*) *(.sbss*) \
    . = ALIGN (4); *(.2ram.*) } \
    > _region_ \
    __rom_data_start = LOADADDR (.data); \
    __ram_data_end = .; PROVIDE (__ram_data_end = .); _edata = .; PROVIDE (edata = .); \
    PROVIDE (__rom_data_end = LOADADDR (.data) + SIZEOF(.data));

Cheers,
Jesper



More information about the Ecos-discuss mailing list