2016-01-05 11 views
1

RAM_HIGH_ADRS - это параметр, определенный в config.h и в файле makefile. Насколько я понимаю, он определяет адрес, на котором будут записываться данные программы + текст + bss-сегменты в ОЗУ.Что действительно означает RAM_HIGH_ADRS в VxWorks BSP?

Это означает, например, что если процессор имеет 64 Мб ОЗУ, а RAM_HIGH_ADRS равен 0x00A00000 (10 Мб), вся программа имеет 54 МБ для работы с сохранением текста + данных + bss + куча + стек.

Причина, по которой я задаю этот вопрос, я работаю над проектом, где я расширил сегмент данных с большим отрывом, из-за чего процессор не загрузился. Затем я увеличил RAM_HIGH_ADRS, который в этот момент позволил процессору загрузиться. Это меня смущает, поскольку единственное, что написано между RAM_LOW_ADRS и RAM_HIGH_ADRS, насколько я понимаю, - это изображение VxWorks, поэтому увеличение RAM_HIGH_ADRS должно только снизить доступный размер для сегмента данных.

+1

Возможный дубликат [Отображение изображения VxWorks в ОЗУ (BSP)] (http://stackoverflow.com/questions/9639443/mapping-a-vxworks-image-onto-ram-bsp) – Mogsdad

ответ

0

от vxworks-bsps-6.7.pdf страница 6:

высокого ОЗУ адрес. Когда используется bootrom, загрузчик размещает небольшое ядро ​​VxWorks (bootrom) в большой ОЗУ. RAM_LOW_ADRS..RAM_HIGH_ADRS используется ядром bootrom для хранения ядра VxWorks , извлеченного из сети, перед загрузкой. Обычно устанавливается на половина основной памяти + 0x3000, например 0x40203000 на системе с 4Mb Оперативная память.

+0

Является ли «ядро VxWorks» "хранятся в RAM_LOW_ADRS..RAM_HIGH_ADRS содержат большой расширенный сегмент данных моей программы? Если это так, это объясняет, почему увеличение RAM_HIGH_ADRS позволило процессору загрузиться. –

2

Если вы используете загрузку Vxworks для загрузки платы, то вот как это работает.

Загрузок загружается в RAM_HIGH_ADRS. Затем Bootrom загружает изображение VxWorks Kernel из сети (или любое другое место на основе того, что вы извлекаете изображение ядра vxWorks), и размещайте его в ОЗУ, начиная с RAM_LOW_ADRS.

Сначала он помещает сегмент .text, а затем сразу же он помещает .rodata, .data и .bss. Поэтому между RAM_LOW_ADRS и RAM_HIGH_ADRS должно быть достаточно места, которое может вместить .text + .rodata_.data + .bss. Если пространства недостаточно, пользователь увидит признак, который вы видели. В таком случае установите RAM_HIGH_ADRS на некоторое более высокое значение, чтобы .text + .rodata_.data + .bss мог поместиться между RAM_LOW_ADRS и RAM_HIGH_ADRS.