denebopetukius 0 15 марта, 2009 Опубликовано 15 марта, 2009 · Жалоба Требуется исполнять код в SDRAM Процессор BF532 Почитал EE-240_Rev4.pdf Пришёл к выводу, что надо создавать 2 ldf-файла и их склеивать. Первый ldr - инициализация - с asm("RTS";) в конце Второй ldr - собственно программа в SDRAM Вопросы: 1) можно ли инит часть написать на Си? Будут ли заморочки при выходе из main()? 2) как в VDSP 5.0 Upd5 склеить два ldr? (Можно, конечно, ручками, но всё-же?) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 25 16 марта, 2009 Опубликовано 16 марта, 2009 · Жалоба 1) можно ли инит часть написать на Си? Будут ли заморочки при выходе из main()? 2) как в VDSP 5.0 Upd5 склеить два ldr? (Можно, конечно, ручками, но всё-же?) 1) наверное можно, но зачем, есть возможность просто при создании нового проекта указать в Wizard'е: "Add an LDF and startup code" и потом ответить на ряд дополнительных вопросов касательно памяти, стека, и пр. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
denebopetukius 0 16 марта, 2009 Опубликовано 16 марта, 2009 · Жалоба 1) наверное можно, но зачем, есть возможность просто при создании нового проекта указать в Wizard'е: "Add an LDF and startup code" и потом ответить на ряд дополнительных вопросов касательно памяти, стека, и пр. Так и делаю, но он не спрашивает о прицеплении инит-кода просто втупую к хексу пририсовывает ldr-хедер: адрес/количество/флаги тоесть пока всю инициализацию пишу в одном тексте программы. при попытке указать стартовый адрес 0x00000000 вместо L1 приводит к ошибке линкера: [Error li1174] ".\NewProject.ldf":203 Failed to find memory segment for absolute address placement of symbol 'start'. Стеки находятся в L1, поставил в манагере проектов галочку "use external SDRAM" посмотрел стартапы - инициализации сдрам там нет вопрос - как сделать так, чтобы: 1) вначале в L1 грузится и исполняется инит-часть (включая инициализацию SDRAM) 2) затем в SDRAM по адресу 0x00000000 грузится приложение 3) инициализация SDRAM в виде функции на языке Си Подкиньте пример проекта, плиз, если так сходу не ответить.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
uriy 5 16 марта, 2009 Опубликовано 16 марта, 2009 · Жалоба Так вот же с ЕЕ-240 идет пример http://www.analog.com/static/imported-file...les/EE240v4.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
denebopetukius 0 16 марта, 2009 Опубликовано 16 марта, 2009 · Жалоба Так вот же с ЕЕ-240 идет пример http://www.analog.com/static/imported-file...les/EE240v4.zip спасибо, попробуем. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
denebopetukius 0 16 марта, 2009 Опубликовано 16 марта, 2009 (изменено) · Жалоба чем отличаются форматы dxe от ldr ? из тогоже EE видно, что их структура одинакова и как линкеру указать что код начнётся с адреса 0x00000000 ? и ещё, как можно расположить переменную, буфер, код по определённому адресу так, чтобы линкер учитывал не накрывал эти адреса? речь идёт о произвольном диапазоне адресов, к примеру скажем 0x00001000..0x00001FFF Изменено 16 марта, 2009 пользователем denebopetukius Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sysel 0 16 марта, 2009 Опубликовано 16 марта, 2009 · Жалоба Из опыта работы с блекфином помниться, что есть какой-то баг с адресом 0x00000000, в своём проекте использовал стартовый адрес 0x00000004 - всё OK было. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
denebopetukius 0 16 марта, 2009 Опубликовано 16 марта, 2009 · Жалоба Из опыта работы с блекфином помниться, что есть какой-то баг с адресом 0x00000000, в своём проекте использовал стартовый адрес 0x00000004 - всё OK было. а где этот адрес указывать? там только можно L1 или 0x20000000(8bit flash) при задании других адресов - ошибка линкера (см. посты выше) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vik0 0 16 марта, 2009 Опубликовано 16 марта, 2009 · Жалоба 1) вначале в L1 грузится и исполняется инит-часть (включая инициализацию SDRAM) 2) затем в SDRAM по адресу 0x00000000 грузится приложение 3) инициализация SDRAM в виде функции на языке Си 1 и 2. Смотрите пример из поста uriy. 3. Увы, нет. Только для 54х семейства. там только можно L1 или 0x20000000(8bit flash) при задании других адресов - ошибка линкера (см. посты выше) Разместите в L1 main() и из нее вызывайте свой UserMain(), расположенный в SDRAM. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
denebopetukius 0 16 марта, 2009 Опубликовано 16 марта, 2009 · Жалоба Немного поменяли техзадание. Нужно грузиться с SD-карточки. Вопрос - как в VDSP v5.0 upd5 родить приложение, которое: 1) чистый бинарник 2) начинается с конкретного адреса (0x00000004 например) ? По первому пункту полагаю, что в опциях проекта выставить вариант когда стартап и ldr не создавать И выбрать файл dxe - который по сути - ELF Затем утилитой fromelf.exe (от армовского Кейла) из ELF сделать BIN Где указывать линкеру стартовый адрес приложения? В IDE RealView были окошки где адреса можно было забить вручную -для : code,data,stack А тут как? Если нужен ldf, подкиньте пример такого файла. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
denebopetukius 0 17 марта, 2009 Опубликовано 17 марта, 2009 · Жалоба Немного поразмыслив, пришел к выводу что надо править ldf-файл вот как мне видится вариант ldf для всего кода в SDRAM: ARCHITECTURE(ADSP-BF532) SEARCH_DIR( $ADI_DSP\FRIO\lib ) $OBJECTS = $COMMAND_LINE_OBJECTS; MEMORY { PROGRAM { TYPE(RAM) START(0x00000000) END(0x07FFFFFF) WIDTH(8) } //PROGRAM In SDRAM L1_DATA { TYPE(RAM) START(0xFF804000) END(0xFF807FFF) WIDTH(8) } //L1 Data L1_DATB { TYPE(RAM) START(0xFF904000) END(0xFF907FFF) WIDTH(8) } //L1 Data } PROCESSOR p0 { OUTPUT( $COMMAND_LINE_OUTPUT_FILE ) SECTIONS { code { // Align all code sections on 2 byte boundary INPUT_SECTION_ALIGN(2) INPUT_SECTIONS( $OBJECTS(program)) }>PROGRAM L1_DATA { INPUT_SECTION_ALIGN(1) INPUT_SECTIONS( $OBJECTS(L1_data) ) } >L1_DATA L1_DATB { INPUT_SECTION_ALIGN(1) INPUT_SECTIONS( $OBJECTS(L1_datb) ) } >L1_DATB stack { // The data sections shouldn't be aligned. INPUT_SECTION_ALIGN(1) INPUT_SECTIONS( $OBJECTS(stack)) }>PROGRAM } } потом в Си писать #pragma section("program") void Func(void) { //.... } верно? какие секции зарезервированы по умолчанию в VDSP и можно их не объявлять? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
denebopetukius 0 17 марта, 2009 Опубликовано 17 марта, 2009 · Жалоба пересмотрел и перелопатил кучу проектов. пришёл к выводу что делать всякие секции типа default_section(CODE,"sdram") и default_section(ALLDATA,"sdram") не подходит, так как в процессе выолнения программы идёт просто копирование этих функций из L1 в SDRAM нужно создать приложение, чтобы оно лежало уже в SDRAM и исполнялось там полностью! лежать оно будет там благодаря самописанному загрузчику(лежит в L1 и грузит приложение с сд-карточки) увы, как это сделать, примеров не нашёл :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
boombox 0 17 марта, 2009 Опубликовано 17 марта, 2009 (изменено) · Жалоба Предлагаю уделить своё внимание SSL(Second Stage Loader). Есть пример для загрузки BF561. Или же написать InitCode. Application Notes EE-240, EE-314. Суть SSL простая. Некоторый код стартует и начинает копировать приложение в область указанную вами и затем стартует из этой области. Изменено 17 марта, 2009 пользователем boom Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
denebopetukius 0 17 марта, 2009 Опубликовано 17 марта, 2009 (изменено) · Жалоба Предлагаю уделить своё внимание SSL(Second Stage Loader). Есть пример для загрузки BF561. Или же написать InitCode. http://www.analog.com/en/embedded-processi...rces/index.html EE-240, EE-314. Суть SSL простая. Некоторый код стартует и начинает копировать приложение в область указанную вами и затем стартует из этой области. ссылка некорректна: "processi...rces" проблема не в написании загрузчика, а в создании приложения, которое было бы с конкретно указанного адреса. загрузчик с сд-карты мы сами напишем ;) кое-что нашёл по этой теме - Engineer-to-Engineer Note EE-239 конкретно: Running from Flash via Bypass Mode осталось переделать под Running from SDRAM via Bypass Mode там написано о том как слинковать No-Boot Image без всяких ldr-хедеров и прочей инициализации... кстати EE-314 - это для старших блекфинов. интересует 532. будем разбираться... P.S. неужели никто не писал SDRAM Application для ADSP ??? Изменено 17 марта, 2009 пользователем denebopetukius Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vik0 0 17 марта, 2009 Опубликовано 17 марта, 2009 · Жалоба проблема не в написании загрузчика, а в создании приложения, которое было бы с конкретно указанного адреса. Приложение НЕ МОЖЕТ стартовать с произвольного адреса. Либо с 0х20000000 (в режиме bypass), либо с начала L1 code. Все, других вариантов нет. нужно создать приложение, чтобы оно лежало уже в SDRAM и исполнялось там полностью! Вы можете объяснить зачем вам это нужно?? Что вы собираетесь делать с 32 (а то и 48, если не использовать кэш) килобайтами очень быстрой памяти програм? Зачем вам ставить 400 МГц DSP и сразу на корню убивать всю его производительность, исполняя код из тормозной SDRAM?? Видимо я что-то в этом мире не понимаю Предлагаю уделить своё внимание SSL(Second Stage Loader) SSL - это специальный "костыль" для загрузки двухядерников, и AFAIK, в одноядерных финах он не поддерживается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться