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

вопросы по линкеру vdsp 5.0

Требуется написать приложение,работающее полностью в sdram.

в ldf-файле есть 2 секции: rom(bank0)-хранит код,константы

ram(bank1)-всё остальное

 

при использовании обычного объявления массива (например: char m)-линкер создаёт огроменный hex-файл образа программы с заполненными нулями в некоторых адресах.

 

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

 

как разместить стек,кучу в scratchpad?

объявлена секция в лдф-файле,а линковщик упорно её избегает!

 

программа скомпилированная без оптимизации не запускается!

 

стоит задать максимальную оптимизацию- сразу работает.

 

почему?

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


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

По поводу глюков - в 5.0 с парой апдейтов Expert Linker у меня так и не заработал, помучался я с ним, плюнул, и остался на 4.5

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


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

пробовал собирать свои проекты в Green Hills, но увы- программы на середине повисают или глючат %)

 

надо попробовать 4.5 как вы посоветовали ;)

 

кстати почему программа с адреса 0х0 не идёт? только с 0х4 ?

лдф я переправлял!

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


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

при использовании обычного объявления массива (например: char m)-линкер создаёт огроменный hex-файл образа программы с заполненными нулями в некоторых адресах.

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

Как-то так:

sdram_no_init NO_INIT {
  INPUT_SECTION_ALIGN(4)
  INPUT_SECTIONS($OBJECTS(sdram_no_init))
}>MEM_SDRAM_BANK3

#pragma section("sdram_no_init", NO_INIT)
char m[size];

как разместить стек,кучу в scratchpad?

объявлена секция в лдф-файле,а линковщик упорно её избегает!

Видимо неправильно объявлена. Для стека:

scratchpad
{
  INPUT_SECTION_ALIGN(4)
  RESERVE(heaps_and_stack_in_SCRATCHPAD, heaps_and_stack_in_SCRATCHPAD_length = 2K,4)
  RESERVE_EXPAND(heaps_and_stack_in_SCRATCHPAD, heaps_and_stack_in_SCRATCHPAD_length , 0, 4)
  ldf_stack_space = heaps_and_stack_in_SCRATCHPAD;
  ldf_stack_end = (ldf_stack_space + (((heaps_and_stack_in_SCRATCHPAD_length * 2K) / 2K) - 4)) & 0xfffffffc;
} > MEM_L1_SCRATCH

программа скомпилированная без оптимизации не запускается!

стоит задать максимальную оптимизацию- сразу работает.

почему?

Включив телепатические способности, рискну предположить что у вас ошибка в строке 123 в файле foo.c

Шутка.

По поводу глюков - в 5.0 с парой апдейтов Expert Linker у меня так и не заработал, помучался я с ним, плюнул, и остался на 4.5

А редактировать .ldf в текстовом виде уже не гламурно? ;)

надо попробовать 4.5 как вы посоветовали ;)

99.9% - не поможет. Ищите ошибки в своем коде.

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


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

Получается,что перед объявлением каждого массива надо писать секцию?

по работе приходится иметь дело с чужим кодом- в проектах-куча файлов с разбросанными переменными-массивами...

нет другого способа?

пробовали делать #pragma default_section(BSZ,"noinitram")

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

 

ведь BSZ хранит память для неинициализированных переменных,так?

замечено,что если там разместить volatile буфер,с которым работают программа и интеррупт хэндлер- будут глюки- пишется не туда!

 

у меня код около 150кб, поэтому однозначно СДРАМ! данных ещё больше!

 

замечено, что выражение типa

(a+B)*(b=(a+B)) при а=1, b=2 даёт ответ 12(смотрел асм-листинг) и даёт warning

 

этот же проект под АРМ в Кейл работает отлично!

 

и выражение даёт ответ 9

 

неужели vdsp5 upd5 такой слабый?

если с кучей глюков, то увы, масштабные проекты в нем не сделать :(

 

рискну предположить,что линкер неверно считает размер и адрес переменных

 

киньте плиз лдф-файл который для всего проекта в sdram

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


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

А редактировать .ldf в текстовом виде уже не гламурно? ;)

Нет. Могу где-то накосячить, а если конф. файл загрузится успешно линкером и там можно посмотреть результаты, то это уже хорошо. JTAG у меня нет, поэтому стараюсь как можно меньше заниматься самодеятельностью.

 

кстати почему программа с адреса 0х0 не идёт? только с 0х4 ?

лдф я переправлял!

Может потому что в С значение NULL равно 0?

 

У BF есть вагон и маленька тележка с глюками. Чтобы было проще жить, стоит указать в свойствах проекта вкладка

Compile->Additional Options написать -workaround all

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


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

разбираюсь с линкером и лдф.

в опциях проекта указал использовать runtime initialization.

выдаётся ошибка:

unable to find symbol __inits in input file

 

.meminit has no enough space to hold processed data.

 

meminit execution failed

 

в лдф файле есть библиотека __initsbsz532.doj

и описана секция .meminit

 

память- два региона по 8мб -один на код с константами,таблицами

второй - на переменные

 

ну и секция стека-кучи, как написал vik0

 

что не так ?

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


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

решил проблему предыдущего поста путём пересоздания проекта

 

так как приложение запускается в СДРАМ, то не использую опцию add startup/ldf, а использую свой лдф, подключенный вручную.

 

правильно? или стартап нужен?

кто вызывает meminit?

помогите, у меня каша в голове :)

 

в опциях preprocessor2 надо ставить CPLBs enabled и SDRAM Bank0 is in use?

 

память уже проинициализирована загрузчиком, кеши инструкций и данных(банк А) включены.

 

можно ли в самом приложении включить второй банк кеша данных(установив биты в нужном регистре)?

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


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

Стартап - тоже кусок кода, только изменяемый посредством графического интерфейса. Мне не приходилось его использовать, все и так работает. В опциях, в принципе, можно и не ставить, если править ручками файл линкера, и самому инициализировать регистры управления памятью. Кэш можно включать и выключать произвольно, но тут очень легко огрести проблем с сохранностью данных, поэтому не рекомендую.

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


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

пробовали делать #pragma default_section(BSZ,"noinitram")

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

ведь BSZ хранит память для неинициализированных переменных,так?

замечено,что если там разместить volatile буфер,с которым работают программа и интеррупт хэндлер- будут глюки- пишется не туда!

этот же проект под АРМ в Кейл работает отлично!

неужели vdsp5 upd5 такой слабый?

рискну предположить,что линкер неверно считает размер и адрес переменных

 

Когда нашёл ошибку в программе(порча памяти - чистилось в 2 раза больше чем надо(копипаст старого проекта )) - стало смешно от отквоченного высказывания :cranky:

биру слова обратно - VDSP - мощная вещь! :)

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


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

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

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

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

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

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

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

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

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

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