Gradient 1 12 мая, 2008 Опубликовано 12 мая, 2008 · Жалоба Размещаю массив как глобальную переменную: section ("BT656_buffer") static unsigned char BT656_input_frame_buffer; в LDF файле описываю куда массив положить: /******************************************* sdram0_video NO_INIT { INPUT_SECTION_ALIGN(4) INPUT_SECTIONS($OBJECTS(BT656_buffer)) } > MEM_SDRAM0_BANK3 /******************************************* Компилирую. От раза к разу комилятор делит массив на 2 или более частей с одинаковым именем символа и разными адресами, но распологает эти части в одном банке - SDRAM0_BANK3 (смотрю в окне BlackFin Memory, Browse by Symbol) В итоге, получить верный указатель на начало массива не удаётся. Он возвращается как адрес второго или последующего куска. Где искать траблы? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fontp 0 12 мая, 2008 Опубликовано 12 мая, 2008 · Жалоба Размещаю массив как глобальную переменную: section ("BT656_buffer") static unsigned char BT656_input_frame_buffer; в LDF файле описываю куда массив положить: /******************************************* sdram0_video NO_INIT { INPUT_SECTION_ALIGN(4) INPUT_SECTIONS($OBJECTS(BT656_buffer)) } > MEM_SDRAM0_BANK3 /******************************************* Компилирую. От раза к разу комилятор делит массив на 2 или более частей с одинаковым именем символа и разными адресами, но распологает эти части в одном банке - SDRAM0_BANK3 (смотрю в окне BlackFin Memory, Browse by Symbol) В итоге, получить верный указатель на начало массива не удаётся. Он возвращается как адрес второго или последующего куска. Где искать траблы? Зачем он так делает я не разбирался. Но сделайте так и будет вам счастье sdram0_video NO_INIT { INPUT_SECTION_ALIGN(4) FORCE_CONTIGUITY INPUT_SECTIONS($OBJECTS(BT656_buffer)) } > MEM_SDRAM0_BANK3 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Gradient 1 12 мая, 2008 Опубликовано 12 мая, 2008 · Жалоба Нет счастья .... :( - Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 64 12 мая, 2008 Опубликовано 12 мая, 2008 · Жалоба Нет счастья .... :( Уверенности нет, что поможет, но попробуйте задать секцию с помощью прагмы: #pragma section("sdram0", NO_INIT) TFrame InfoFrame; Никаких проблем не испытываю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Gradient 1 12 мая, 2008 Опубликовано 12 мая, 2008 · Жалоба #pragma не помогла к сожалению Видимо нельзя использовать переменные как буфер. Тогда другой вопрос. Как зарезервировать область памяти с конкретного адреса и запретить компилятору его использовать под другие нужды? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 64 12 мая, 2008 Опубликовано 12 мая, 2008 · Жалоба #pragma не помогла к сожалению Видимо нельзя использовать переменные как буфер. Почему же нельзя? Странно как-то. Вполне успешно использую. И SDRAM, и флешку, и регистры управления внешней периферией (ПЛИС) отмаплены на физические адреса, все работает. Не понимаю, что у вас там не так. Вот у меня в ldf: MEM_SDRAM0 { TYPE(RAM) WIDTH(8) START(0x00000000) END(0x07FFFFFF) } ... sdram NO_INIT { INPUT_SECTION_ALIGN(4) INPUT_SECTIONS($OBJECTS(sdram0) $LIBRARIES(sdram0)) } >MEM_SDRAM0 В исходнике - в прошлом посте показывал. Все прекрасно работает. VDSP4.5 с каким-то апдейтом, не помню. Тогда другой вопрос. Как зарезервировать область памяти с конкретного адреса и запретить компилятору его использовать под другие нужды? Ну, создать в линкерном скрипте свой сегмент в этой памяти, вестимо. Компилятор туда ничего класть не будет, если ему прямо не сказать с помощью той же прагмы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Gradient 1 12 мая, 2008 Опубликовано 12 мая, 2008 · Жалоба у меня версия 5.0 upd2 И откровенно говоря, худшей среды ещё не видел ... По совокупности глюков и непоняток - впереди планеты всей. А уж USB эмулятор - мёртвого достанет... уже жалею что связался с Аналогом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fontp 0 12 мая, 2008 Опубликовано 12 мая, 2008 · Жалоба у меня версия 5.0 upd2 И откровенно говоря, худшей среды ещё не видел ... Не преувеличивайте. Не без дури конечно, но чтобы так... В версии 4.5 таких проблем не было. В версии 5 up 2 появилось дробление секций. Выдаёт Warning: Предлагает вставить тот скрипт FORCE_CONTIGUITY в ldf. Баг это или фича пока ещё не понятно Трудно сказать когда это появилось. В первоначальной версии не работал оптимизатор. Поэтому этой версией никто не пользовался. Исправлено только в 5_2 up 2 Попробуйте версию 5 up 1 :-) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Gradient 1 12 мая, 2008 Опубликовано 12 мая, 2008 · Жалоба ну... например я уже пару раз переустановил VDSP, после того как он потерял эмулятор и подвис а затем вообще перестал запускаться не говоря уж о том, что в конфигурационных регистрах отладчика есть лишние биты от других кристаллов Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fontp 0 12 мая, 2008 Опубликовано 12 мая, 2008 · Жалоба ну... например я уже пару раз переустановил VDSP, после того как он потерял эмулятор и подвис а затем вообще перестал запускаться не говоря уж о том, что в конфигурационных регистрах отладчика есть лишние биты от других кристаллов USB-эмулятор встроеный? Проблемы USB-эмулятора это чаще проблемы Windous драйвера У меня PCI-эмулятор и работает устойчиво Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Gradient 1 12 мая, 2008 Опубликовано 12 мая, 2008 · Жалоба Внешний Всё с нуля, куплено месяц назад ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fontp 0 12 мая, 2008 Опубликовано 12 мая, 2008 · Жалоба Внешний Всё с нуля, куплено месяц назад ... Может попробовать поставить заново версию 4_5 и поработать с нею Старые версии VDSP++ у аналога в архиве Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Gradient 1 13 мая, 2008 Опубликовано 13 мая, 2008 · Жалоба Всё бы хорошо .... но! Не открывается проект сделаный версией 5.0 в версии 4.5 Надо переделывать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_TOXA_ 0 28 мая, 2008 Опубликовано 28 мая, 2008 · Жалоба Размещаю массив как глобальную переменную: section ("BT656_buffer") static unsigned char BT656_input_frame_buffer; в LDF файле описываю куда массив положить: /******************************************* sdram0_video NO_INIT { INPUT_SECTION_ALIGN(4) INPUT_SECTIONS($OBJECTS(BT656_buffer)) } > MEM_SDRAM0_BANK3 /******************************************* Добрый день. Может быть поможет, я работаю с DSP TMS320evm5509a. Пишу в CCStudio v.3.3. Для размещения части кода в SDRAM я использовал #pragma CODE_SECTION(in_task, ".MySect"). Где in_task - имя подпрограммы, ".MySect" - секция в .cmd файле. Причем в .cmd файле вручную прописывал SECTIONS { .csldata: > SARAM .MySect: {} > SDRAM } А для размещения какой-то переменной в SDRAM необходимо использовать вместо CODE_SECTION #pragma DATA_SECTION (symbol, "section name") [;]. Например, #pragma DATA_SECTION(bufferB, "my_sect") char bufferB[512]; Только есть одно но! для работы SDRAM необходимо ее сконфигурировать, а точнее настроить регистры процессора для работы с памятью. В моем для связи с памятью служит EMIF шина. Там есть одно НО, если чем-то мой ответ поможет, пишите, расскажу про НО. А так, сам пробовал, все получается. Не знаю, может немного не по теме, но какое название темы, такой и ответ. :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Gradient 1 18 сентября, 2009 Опубликовано 18 сентября, 2009 · Жалоба Дело оказалось в неправильно разведённой плате. Младший адрес был перепутан со старшим, и переменные "двоились". После перепайки проблема решилась. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться