52197

Особенности написания LDF файла - резервирование области для NOP


Есть ли особенности при написании и использовании своего LDF файла?

При создании своего файл сценария для компоновщика (LDF файла) необходимо в первую очередь ориентироваться на стандартный base.ldf, который расположен по пути: CM-LYNX.2.xx.yy\toolchain\LDF.

В стандартном LDF файле в конец секции с кодом программы добавляется 10 инструкций "NOP", чтобы при выполнении программы в конвейер случайно не были загружены данные из неинициализированной области:
program##bank_num
{
    FILL(0xb3c00000) /* Fill any gaps with NOPs. */
    ...
    . = . + 10;      /* 10 NOPs */
}

Для добавления 10 инструкций "NOP" вручную изменяется значение счетчика местоположения ("."). При ручном изменении счётчика местоположения компоновщик не отслеживает его выход за границы сегмента памяти, предупреждения также не формируются. Поэтому, чтобы счетчик местоположения не выходил за пределы сегмента памяти, в конце каждого сегмента, который может включать в себя секции с кодом программы, резервируется 16 слов:
MEMORY
{
    M_STARTUP { TYPE(RAM) START(0x00000000) END(0x000000FF - 16) WIDTH(32) }
    M0        { TYPE(RAM) START(0x00000100) END(0x00000000 + (INT_MEM_BANK_SIZE - 1) - 16)
                                WIDTH(32) } //16 words reserved for adding NOPs after code
    ...
}

Таким образом ручное увеличение счетчика местоположения на 10 слов никогда не приведёт к его выходу за пределы физического сегмента памяти.

Теги

Был ли ответ полезным?