denebopetukius 0 28 марта, 2009 Опубликовано 28 марта, 2009 · Жалоба Требуется написать приложение,работающее полностью в sdram. в ldf-файле есть 2 секции: rom(bank0)-хранит код,константы ram(bank1)-всё остальное при использовании обычного объявления массива (например: char m)-линкер создаёт огроменный hex-файл образа программы с заполненными нулями в некоторых адресах. как добиться,чтобы линкер не делал так, тоесть массив не инициализирован,указатель хранить по адресу за программой. как разместить стек,кучу в scratchpad? объявлена секция в лдф-файле,а линковщик упорно её избегает! программа скомпилированная без оптимизации не запускается! стоит задать максимальную оптимизацию- сразу работает. почему? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Itch 0 29 марта, 2009 Опубликовано 29 марта, 2009 · Жалоба По поводу глюков - в 5.0 с парой апдейтов Expert Linker у меня так и не заработал, помучался я с ним, плюнул, и остался на 4.5 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
denebopetukius 0 29 марта, 2009 Опубликовано 29 марта, 2009 · Жалоба пробовал собирать свои проекты в Green Hills, но увы- программы на середине повисают или глючат %) надо попробовать 4.5 как вы посоветовали ;) кстати почему программа с адреса 0х0 не идёт? только с 0х4 ? лдф я переправлял! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vik0 0 29 марта, 2009 Опубликовано 29 марта, 2009 · Жалоба при использовании обычного объявления массива (например: 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% - не поможет. Ищите ошибки в своем коде. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
denebopetukius 0 29 марта, 2009 Опубликовано 29 марта, 2009 · Жалоба Получается,что перед объявлением каждого массива надо писать секцию? по работе приходится иметь дело с чужим кодом- в проектах-куча файлов с разбросанными переменными-массивами... нет другого способа? пробовали делать #pragma default_section(BSZ,"noinitram") в начале программы- файл легчает, но программа работает не верно- видно, что некоторые данные потеряны- указатели не те-выводится лажа. ведь BSZ хранит память для неинициализированных переменных,так? замечено,что если там разместить volatile буфер,с которым работают программа и интеррупт хэндлер- будут глюки- пишется не туда! у меня код около 150кб, поэтому однозначно СДРАМ! данных ещё больше! замечено, что выражение типa (a+B)*(b=(a+B)) при а=1, b=2 даёт ответ 12(смотрел асм-листинг) и даёт warning этот же проект под АРМ в Кейл работает отлично! и выражение даёт ответ 9 неужели vdsp5 upd5 такой слабый? если с кучей глюков, то увы, масштабные проекты в нем не сделать :( рискну предположить,что линкер неверно считает размер и адрес переменных киньте плиз лдф-файл который для всего проекта в sdram Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Itch 0 30 марта, 2009 Опубликовано 30 марта, 2009 · Жалоба А редактировать .ldf в текстовом виде уже не гламурно? ;) Нет. Могу где-то накосячить, а если конф. файл загрузится успешно линкером и там можно посмотреть результаты, то это уже хорошо. JTAG у меня нет, поэтому стараюсь как можно меньше заниматься самодеятельностью. кстати почему программа с адреса 0х0 не идёт? только с 0х4 ? лдф я переправлял! Может потому что в С значение NULL равно 0? У BF есть вагон и маленька тележка с глюками. Чтобы было проще жить, стоит указать в свойствах проекта вкладка Compile->Additional Options написать -workaround all Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
denebopetukius 0 30 марта, 2009 Опубликовано 30 марта, 2009 · Жалоба разбираюсь с линкером и лдф. в опциях проекта указал использовать 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 что не так ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
denebopetukius 0 30 марта, 2009 Опубликовано 30 марта, 2009 · Жалоба решил проблему предыдущего поста путём пересоздания проекта так как приложение запускается в СДРАМ, то не использую опцию add startup/ldf, а использую свой лдф, подключенный вручную. правильно? или стартап нужен? кто вызывает meminit? помогите, у меня каша в голове :) в опциях preprocessor2 надо ставить CPLBs enabled и SDRAM Bank0 is in use? память уже проинициализирована загрузчиком, кеши инструкций и данных(банк А) включены. можно ли в самом приложении включить второй банк кеша данных(установив биты в нужном регистре)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
west 0 4 апреля, 2009 Опубликовано 4 апреля, 2009 · Жалоба Стартап - тоже кусок кода, только изменяемый посредством графического интерфейса. Мне не приходилось его использовать, все и так работает. В опциях, в принципе, можно и не ставить, если править ручками файл линкера, и самому инициализировать регистры управления памятью. Кэш можно включать и выключать произвольно, но тут очень легко огрести проблем с сохранностью данных, поэтому не рекомендую. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
denebopetukius 0 10 апреля, 2009 Опубликовано 10 апреля, 2009 · Жалоба пробовали делать #pragma default_section(BSZ,"noinitram") в начале программы- файл легчает, но программа работает не верно- видно, что некоторые данные потеряны- указатели не те-выводится лажа. ведь BSZ хранит память для неинициализированных переменных,так? замечено,что если там разместить volatile буфер,с которым работают программа и интеррупт хэндлер- будут глюки- пишется не туда! этот же проект под АРМ в Кейл работает отлично! неужели vdsp5 upd5 такой слабый? рискну предположить,что линкер неверно считает размер и адрес переменных Когда нашёл ошибку в программе(порча памяти - чистилось в 2 раза больше чем надо(копипаст старого проекта )) - стало смешно от отквоченного высказывания :cranky: биру слова обратно - VDSP - мощная вещь! :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться