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

Исполнение всей программы в SDRAM

Требуется исполнять код в SDRAM

Процессор BF532

 

Почитал EE-240_Rev4.pdf

Пришёл к выводу, что надо создавать 2 ldf-файла и их склеивать.

Первый ldr - инициализация - с asm("RTS";) в конце

Второй ldr - собственно программа в SDRAM

 

Вопросы:

 

1) можно ли инит часть написать на Си? Будут ли заморочки при выходе из main()?

2) как в VDSP 5.0 Upd5 склеить два ldr? (Можно, конечно, ручками, но всё-же?)

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


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

1) можно ли инит часть написать на Си? Будут ли заморочки при выходе из main()?

2) как в VDSP 5.0 Upd5 склеить два ldr? (Можно, конечно, ручками, но всё-же?)

1) наверное можно, но зачем, есть возможность просто при создании нового проекта указать в Wizard'е:

"Add an LDF and startup code" и потом ответить на ряд дополнительных вопросов касательно памяти, стека, и пр.

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


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

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 в виде функции на языке Си

 

Подкиньте пример проекта, плиз, если так сходу не ответить..

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


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

Так вот же с ЕЕ-240 идет пример http://www.analog.com/static/imported-file...les/EE240v4.zip

 

спасибо, попробуем.

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


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

чем отличаются форматы dxe от ldr ?

из тогоже EE видно, что их структура одинакова

 

и как линкеру указать что код начнётся с адреса 0x00000000 ?

 

и ещё, как можно расположить переменную, буфер, код по определённому адресу так, чтобы линкер учитывал не накрывал эти адреса?

речь идёт о произвольном диапазоне адресов, к примеру скажем 0x00001000..0x00001FFF

Изменено пользователем denebopetukius

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


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

Из опыта работы с блекфином помниться, что есть какой-то баг с адресом 0x00000000, в своём проекте использовал стартовый адрес 0x00000004 - всё OK было.

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


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

Из опыта работы с блекфином помниться, что есть какой-то баг с адресом 0x00000000, в своём проекте использовал стартовый адрес 0x00000004 - всё OK было.

 

а где этот адрес указывать?

 

там только можно L1 или 0x20000000(8bit flash)

при задании других адресов - ошибка линкера (см. посты выше)

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


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

1) вначале в L1 грузится и исполняется инит-часть (включая инициализацию SDRAM)

2) затем в SDRAM по адресу 0x00000000 грузится приложение

3) инициализация SDRAM в виде функции на языке Си

1 и 2. Смотрите пример из поста uriy.

3. Увы, нет. Только для 54х семейства.

там только можно L1 или 0x20000000(8bit flash)

при задании других адресов - ошибка линкера (см. посты выше)

Разместите в L1 main() и из нее вызывайте свой UserMain(), расположенный в SDRAM.

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


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

Немного поменяли техзадание.

Нужно грузиться с SD-карточки.

 

Вопрос - как в VDSP v5.0 upd5 родить приложение, которое:

 

1) чистый бинарник

2) начинается с конкретного адреса (0x00000004 например)

 

?

 

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

И выбрать файл dxe - который по сути - ELF

Затем утилитой fromelf.exe (от армовского Кейла) из ELF сделать BIN

 

Где указывать линкеру стартовый адрес приложения?

В IDE RealView были окошки где адреса можно было забить вручную -для : code,data,stack

А тут как?

 

Если нужен ldf, подкиньте пример такого файла.

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


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

Немного поразмыслив, пришел к выводу что надо править 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 и можно их не объявлять?

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


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

пересмотрел и перелопатил кучу проектов.

пришёл к выводу что делать всякие секции типа default_section(CODE,"sdram") и default_section(ALLDATA,"sdram") не подходит,

так как в процессе выолнения программы идёт просто копирование этих функций из L1 в SDRAM

 

нужно создать приложение, чтобы оно лежало уже в SDRAM и исполнялось там полностью!

лежать оно будет там благодаря самописанному загрузчику(лежит в L1 и грузит приложение с сд-карточки)

увы, как это сделать, примеров не нашёл :(

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


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

Предлагаю уделить своё внимание SSL(Second Stage Loader). Есть пример для загрузки BF561. Или же написать InitCode.

Application Notes

EE-240, EE-314. Суть SSL простая. Некоторый код стартует и начинает копировать приложение в область указанную вами и затем стартует из этой области.

Изменено пользователем boom

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


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

Предлагаю уделить своё внимание 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 ???

Изменено пользователем denebopetukius

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


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

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

Приложение НЕ МОЖЕТ стартовать с произвольного адреса. Либо с 0х20000000 (в режиме bypass), либо с начала L1 code. Все, других вариантов нет.

нужно создать приложение, чтобы оно лежало уже в SDRAM и исполнялось там полностью!

Вы можете объяснить зачем вам это нужно?? Что вы собираетесь делать с 32 (а то и 48, если не использовать кэш) килобайтами очень быстрой памяти програм? Зачем вам ставить 400 МГц DSP и сразу на корню убивать всю его производительность, исполняя код из тормозной SDRAM?? Видимо я что-то в этом мире не понимаю :wacko:

Предлагаю уделить своё внимание SSL(Second Stage Loader)

SSL - это специальный "костыль" для загрузки двухядерников, и AFAIK, в одноядерных финах он не поддерживается.

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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