Перейти к содержанию
    

Использование Blackfin + SDRAM

На плате есть Blackfin и SDRAM. Пишу софт для процессора, используя VisualDSP.

Как правильно разместить переменную (например массив) в памяти SDRAM, но чтобы при этом компилятор другие переменные в SDRAM без моего ведома не размещал?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как правильно разместить переменную (например массив) в памяти SDRAM..

#pragma section ("sdram0")

char array[256];

 

.. но чтобы при этом компилятор другие переменные в SDRAM без моего ведома не размещал?

#pragma section ("L1_data_b")

другие_переменные;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

#pragma section ("L1_data_b")

другие_переменные;

Можно и так. Но, по-моему, это правильней делать правкой ldf-файла:

sdram0_bank0
{
  INPUT_SECTION_ALIGN(4)
  INPUT_SECTIONS($OBJECTS(my_vars_in_sdram))
  /* Все остальное (нагенерированное VDSP) из секции выкинуть */
} > MEM_SDRAM0_BANK0

Ну и тогда, соответственно:

#pragma section ("my_vars_in_sdram")
char array[256];

PS. Править, естественно, надо секции для всех банков SDRAM

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На плате есть Blackfin и SDRAM. Пишу софт для процессора, используя VisualDSP.

Как правильно разместить переменную (например массив) в памяти SDRAM, но чтобы при этом компилятор другие переменные в SDRAM без моего ведома не размещал?

 

Еще есть #pragma default_section на группу переменных, в отличие от #pragma section, которая работает только с ниже следующим объявлением, в хелпе гляньте синтаксис.

Но, как уже сказали, лучше лдф подкорректировать под ваши задачи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

#pragma section ("sdram0")

char array[256];

 

 

#pragma section ("L1_data_b")

другие_переменные;

 

У меня тогда два вопроса:

1) Секцию "sdram0" надо создавать в ldf-файле? Или она по умолчанию уже есть?

2) Если не указать вторую прагму, то куда будут размещаться все переменные в проекте?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня тогда два вопроса:

1) Секцию "sdram0" надо создавать в ldf-файле? Или она по умолчанию уже есть?

2) Если не указать вторую прагму, то куда будут размещаться все переменные в проекте?

 

А у вас лдф подключен к проекту свой, или тот, который по умолчанию?

 

по умолчанию данные располагаются в секции data1

код - в секции program

 

а эти секции могут быть где угодно, зависит от лдф

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня тогда два вопроса:

1) Секцию "sdram0" надо создавать в ldf-файле? Или она по умолчанию уже есть?

2) Если не указать вторую прагму, то куда будут размещаться все переменные в проекте?

1) уже есть, если ldf создан визардом.

2) в любое свободное место.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1) уже есть, если ldf создан визардом.

2) в любое свободное место.

 

По поводу п.2:

Получается, что и в SDRAM может размещать (чего я не хочу)?

Как сделать, чтобы он этого не делал? Каждый раз использовать #pragma section ("L1_data_b") для других переменных или есть возможность каким-то образом запретить использовать SDRAM?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По поводу п.2:

Получается, что и в SDRAM может размещать (чего я не хочу)?

Как сделать, чтобы он этого не делал? Каждый раз использовать #pragma section ("L1_data_b") для других переменных или есть возможность каким-то образом запретить использовать SDRAM?

 

за комментируйте строку в лдф

INPUT_SECTIONS( $OBJECTS(data1) ), которая относится к области SDRAM

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

за комментируйте строку в лдф

INPUT_SECTIONS( $OBJECTS(data1) ), которая относится к области SDRAM

 

Ага, спасибо. А через "Project Options --> ..." это не делается?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ага, спасибо. А через "Project Options --> ..." это не делается?

 

Нет, через "Project Options --> ..." все не сделаешь :):) Там только типичные случаи.

Если разрешен SDRAM, то он добивает L1 до упора, а потом SDRAM.

 

 

Да, еще, глобальные переменные, которые инитятся нулями помещаются в bsz секцию, а const и строки проинициализированные, в constdata, так что лдф редактировать надо.

Почитайте доку по линкеру, а точнее, по синтаксису лдф файла.

Там много всего интересного.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нет, через "Project Options --> ..." все не сделаешь :):) Там только типичные случаи.

Если разрешен SDRAM, то он добивает L1 до упора, а потом SDRAM.

 

 

Да, еще, глобальные переменные, которые инитятся нулями помещаются в bsz секцию, а const и строки проинициализированные, в constdata, так что лдф редактировать надо.

Почитайте доку по линкеру, а точнее, по синтаксису лдф файла.

Там много всего интересного.

 

Уже читаю, спасибо. Действительно много и интересно :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уже читаю, спасибо. Действительно много и интересно :)

Будете править ldf, не забудьте визарду сказать "stop regenerate ldf", а то будет мучительно больно за пропавшие правки :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Будете править ldf, не забудьте визарду сказать "stop regenerate ldf", а то будет мучительно больно за пропавшие правки :)

Спасибо, что предупредили :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кстати никто не знает, почему использование SDRAM начинается не с 0-го адреса, а с 4-го (судя по описанию ldf-файла)?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...