Как связать один и тот же объект как с данными, так и с программной памятью DSP? - PullRequest
0 голосов
/ 28 мая 2011

Мне нужно поместить один и тот же объект в разные разделы памяти. Я работаю над DSP с отдельными данными и программной памятью. Секции .text обычно хранятся внутри P-MEM. Но я хочу хранить тот же код и в памяти данных. Можно скопировать его во время выполнения, но я думаю, что это должно быть возможно и во время соединения.

Это то, что я ищу, но оно не работает, так как я не смог найти инструкцию «copy» или «duplicate», которая позволяла бы размещать один и тот же код в разных разделах.

MEMORY
{
/* MAP 1*/

    VECS:     org=0x00000000 len=0x00000400

    PMEM:     org=0x00000400 len=0x0000FC00 

    DMEM:     org=0x80000000 len=0x0000F800
    DMEM_FT:  org=0x8000F800 len=0x00000800 

}

SECTIONS
{

    vectors    > VECS
    .text      > PMEM <----- containing ALL code (also including func1.obj(.text) )
    .bss       > DMEM
    .cinit     > DMEM
    .stack     > DMEM
    .far       > DMEM
    .switch    > DMEM
    .data      > DMEM
    .sysmem    > DMEM
    .const     > DMEM
    .cio       > DMEM
    dmem_mirror: 
    {
        func1.obj(.text)
    }        > DMEM_FT

}

Если я использую скрипт компоновщика выше, он явно помещает func1.obj только внутри секции dmem_FT (это то, что должен делать компоновщик!), Но это не то, что я хочу: - /. Я работаю с компилятором и компоновщиком Texas Instruments, но синтаксис такой же, как у компоновщика GCC.

1 Ответ

0 голосов
/ 28 мая 2011

Быстрый просмотр руководства GNU ld не дает очевидного решения.Одно из возможных решений приходит на ум.Вы можете сделать частичную (ld -r) ссылку на func1.obj, отправив все разделы, кроме .text, в специальный раздел / DISCARD / и только выведя раздел .text, например, в func1a.obj.К сожалению, я думаю, вы увидите несколько ошибок определения символов от компоновщика, когда вы на самом деле сделаете последнюю ссылку.

...