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

Непонятки с Blackfin Init_code.asm

Хочу использовать в проекте код предварительной инициализации, который загружается раньше основной программы, включает SDRAM, меняет частоты PLL и т.п. Раскопал такой вот проект: Blackfin\ldr\init_code\ADSP-BF533 INIT CODE в VDSP. Взял оттуда файлик init_code.asm и создал новый проект под свой процессор (BF531). Все бы хорошо, так он, зараза, требует чтобы была описана функция main. Если её описать, скомпилять и получившийся .dxe добавить в свой проект, то при загрузке процессор считывает первую половину программы и зависает. Пробовал вообще убирать код инициализации, оставлял только сохранение/восстановление регистров - бестолку. Есть подозрение, что надо как-то линкеру объяснить, куда по какому адресу помещать код инициализации, но вот как это сделать - проблема. В документации этот момент не очень то освещён. Может кто использовал код инициализации, расскажете по шагам что и куда прописывать? :smile3046:

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


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

Скорее всего вы сгенерили свой LDF, вместо того чтобы взять из примера. Он написан вручную и main не требует. После генерации dxe забиваете его в опцию Load->Options->Initialisation file основного проекта и все. Ну и не забудьте подправить LDF под BF531 всесто BF533.

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


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

А по какому адресу размещать код для BF531?

Ничего вам размещать не надо - возьмите ldf файл из того же проекта, там уже все написано.

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


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

Тогда в моем проекте при сборке возникает ошибка

"Error: no section in the code memory space".

Где-то вычитал, что надо в ldf файл добавить строчки:

RESOLVE(initcode,0xFFA00000)

KEEP(initcode)

Добавил - другая ошибка - "[Error li1170] Failed to extract symbol 'initcode' needed for absolute placement.", хотя .GLOBAL initcode; описан. Можете скинуть заведомо рабочий ldf файл для загрузочного проекта и для того, куда он подключается, желательно для BF531 или BF532. Буду очень благодарен, давно бьюсь над этой проблемой :( Мыло oai на gorodok.net.

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


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

правильные строчки для BF531 будут:

 

ARCHITECTURE(ADSP-BF531)

....

PROGRAM { TYPE(RAM) START(0xFFA08000) END(0xFFA13FFF) WIDTH(8) } //L2

...

 

 

взяты из стандартного LDF для 531 ;)

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


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

Тогда в моем проекте при сборке возникает ошибка

"Error: no section in the code memory space".

Где-то вычитал, что надо в ldf файл добавить строчки:

RESOLVE(initcode,0xFFA00000)

KEEP(initcode)

Добавил - другая ошибка - "[Error li1170] Failed to extract symbol 'initcode' needed for absolute placement.", хотя .GLOBAL initcode; описан. Можете скинуть заведомо рабочий ldf файл для загрузочного проекта и для того, куда он подключается, желательно для BF531 или BF532. Буду очень благодарен, давно бьюсь над этой проблемой :( Мыло oai на gorodok.net.

Да, вроде, правильно все. У меня в ldf файле аналогично (правда, у меня тут для 533-го):

 

        /* Following address must match start of MEM_L1_CODE */
        RESOLVE(rtinit_start, 0xFFA00000)
        KEEP(rtinit_start)

 

а на асме:

 

    .extern _HardwareInit;
    .global rtinit_start;

    .section program;
    .align 2

//------------------------------------------------------------------------------

rtinit_start:

    [--sp] = astat;         //save regs onto stack
    [--sp] = rets;
    [--sp] = (r7:0);
    ...

 

Тут у вас дело не в ldf'е, а в том, что линкер почему-то не находит имени в объектных файлах. Посмотрите на файл листинга, который генерит линкер (в html формате он), там должны быть перечислены все имена, в том числе и их видимость - глобальные или локальные. Например, в моем файле есть (табличка там):

Symbol             Address     Size    Binding
rtinit_start      0xffa00000   0x56    GLOBAL
rtinit_start.end  0xffa00056    0x0    LOCAL

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


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

..

RESOLVE(initcode,0xFFA00000)

KEEP(initcode)

..

это если вы подключаете код(например startup) в котором эта метка определена.

в приведенном примере загрузчика все находится в одном файле вообще без метки начала и соответственно эти строчки будут ошибкой

адреса в LDF надо указывать в диапазоне реальные для данного процессора

для кода

BF533

0xFFA00000..0xFFA07fff

BF532

0xFFA08000..0xFFA0ffff

BF531

0xFFA08000..0xFFA0BFFF

 

рабочий файл для 532

 

ARCHITECTURE(ADSP-BF532)
SEARCH_DIR( $ADI_DSP\Blackfin\lib )
$OBJECTS = $COMMAND_LINE_OBJECTS;

MEMORY
{
    
       PROGRAM     { TYPE(RAM) START(0xFFA08000) END(0xFFA0ffff) WIDTH(8) } //L2
    SDRAM        { TYPE(RAM) START(0x00000000) END(0x07FFFFFF) WIDTH(8) } //SDRAM
}


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
        
    SDRAM
    {
        INPUT_SECTION_ALIGN(1)
        INPUT_SECTIONS( $OBJECTS(sdram) )
    } >SDRAM    
    
    stack
    {
        // The data sections shouldn't be aligned.
        INPUT_SECTION_ALIGN(1) 
        INPUT_SECTIONS( $OBJECTS(stack))
    }>PROGRAM
    }
}

 

 

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

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


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

Спасибо большое за помощь, все заработало! Теперь и грузится с AT45 гораздо быстрее (до 2МБ в сек.)

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


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

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

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

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

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

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

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

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

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

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