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

BF518F и Error li1040

Доброе всем время суток, вот столкнулся с ситуацией - объявляю буфер в 16384 слов (unsigned short).

В самом плавнике есть Data bank A SRAM и data bank B SRAM - всего 64 Кб, 4 по 16К. По умолчанию все настроены как SRAM.

 

Ошибка выглядит следующим образом:

 

[Error li1040] "C:\Program Files\Analog Devices\VisualDSP 5.0\Blackfin/ldf/adsp-BF518.ldf":557 Out of memory in output section 'bsz_L1_data_b' in processor 'p0'

Total of 0x92d8 word(s) were not mapped.

For more details, see 'linker_log.xml' in the output directory.

 

 

[Error li1040] "C:\Program Files\Analog Devices\VisualDSP 5.0\Blackfin/ldf/adsp-BF518.ldf":620 Out of memory in output section 'bsz_L1_data_a' in processor 'p0'

Total of 0x92d8 word(s) were not mapped.

For more details, see 'linker_log.xml' in the output directory.

 

Как линкер побороть, может кто сталкивался?

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

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


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

Как линкер побороть, может кто сталкивался?

У вас там, по ходу, просто нет в памяти непрерывного места в 32К. В проце есть две области по 32К, и для того, чтобы ваш массив можно было разместить в памяти проца, хотя бы одна из областей должна быть полностью отдана под это. Если там хотя бы байт отдан по что-то другое, всё, ваш массив уже не поместится. Смотрите скрипт линкера (ldf файл), куда там что замаплено. Но, вообще-то, нехорошо такие объекты туда пихать, гибкости нет.

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


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

Угу, именно за место под солнцем и воевал, уменьшил стек и хеп (не знаю, можно ли их в MEM_L1_SCRATCH поместить), а дальше руками разместил:

#pragma section("L1_data_b")

unsigned short IsprL[15360];

 

#pragma section("L1_data_a")

unsigned char UART0_BUFFER_RX[1038];

#pragma section("L1_data_a")

unsigned char UART0_BUFFER_TX[1048];

#pragma section("L1_data_a")

unsigned char UART1_BUFFER_RX[1038];

#pragma section("L1_data_a")

unsigned char UART1_BUFFER_TX[1048];

 

Просто объемы изначально были меньшие, а теперь вот как обычно.. переиграли на лету.

 

Продолжение приключений моих - не запускается программа(((

#pragma section("L1_data_b")

unsigned short ExtCh0[15360];

unsigned short *pExtCh0 = &ExtCh0[0];

больше ничего не добавлял.

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

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


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

Продолжение приключений моих - не запускается программа(((

В железе не работает или линкер по-прежнему ругается?

 

Посмотрите в мап файле, какие ещё сущности размещены в сегменте памяти, куда вы пытаетесь засунуть свой массив. Линкер рожает мап файл в формате xml (он об этом в сообщении об ошибке выдавал), этот файл можно сконвертить в html, для этого в VDSP есть утилитка (xml2html называется или как-то так).

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


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

Да сам линкер не ругается, говорит все гуд. мап я смотрел много раз, криминала вроде не увидел. Возникло подозрение что это может быть стартап код, который добавляет ДСПстудия. Как-то оно все диковинно. Если буфер меньше сделать - программа запускается в железяке, увы нет джетаг борды...

 

Вот что еще заметил - сменил конфигурацию с дебаг на релиз, железяка заморгала, криво работает программа, но хоть как-то.... похоже линкер чего-то не договаривает... или я уже не знаю что думать.

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

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


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

Да сам линкер не ругается, говорит все гуд. мап я смотрел много раз, криминала вроде не увидел. Возникло подозрение что это может быть стартап код, который добавляет ДСПстудия. Как-то оно все диковинно. Если буфер меньше сделать - программа запускается в железяке, увы нет джетаг борды...

 

Вот что еще заметил - сменил конфигурацию с дебаг на релиз, железяка заморгала, криво работает программа, но хоть как-то.... похоже линкер чего-то не договаривает... или я уже не знаю что думать.

Тогда это сильно похоже на то, что стек наползает на используемую память (там что угодно может быть, но чаще всего возникает какое-нибудь из аппаратных исключений). Т.е. по факту памяти всё же не хватает. Увеличьте размер стека и погоняйте.

 

Конечно, тут неплохо бы хоть какие-то отладочные средства. Память, граничащую со стеком забить каким-нибудь паттерном и смотреть, до какого адреса паттерн будет перезаписан - т.е. до куда стек реально достаёт.

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


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

Да, уже была мысль переделать проект под отладочную борду и там смотреть. Заметил еще следующее (добавил стартам код, тот что автоматом добавляется) стартует программа с адреса ффа00000, щелкает режимы(супервизор мод и юзер мод, несколько обходных конструкций для ошибок ревизии кристала, совтовое прерывание на 15 эвент по ресету) и дальше на мейн мойн передает управление, но даже таймеры не запускаются.... пробовал сразу после старта на мейн управление передавать, та же история.

Видимо я уже горячку порю)))))

 

Как с этим стартап кодом надо обходится, он асмовский, я все на си сгородил. Может там нужно вызвать свою инициализацию?

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


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

Да, уже была мысль переделать проект под отладочную борду и там смотреть. Заметил еще следующее (добавил стартам код, тот что автоматом добавляется) стартует программа с адреса ффа00000, щелкает режимы(супервизор мод и юзер мод, несколько обходных конструкций для ошибок ревизии кристала, совтовое прерывание на 15 эвент по ресету) и дальше на мейн мойн передает управление, но даже таймеры не запускаются.... пробовал сразу после старта на мейн управление передавать, та же история.

Видимо я уже горячку порю)))))

 

Как с этим стартап кодом надо обходится, он асмовский, я все на си сгородил. Может там нужно вызвать свою инициализацию?

Я сразу свой стартап сделал (по мотивам, конечно, - выкинул лишнее, добавил нужное).

 

Попробуйте пройти по шагам в симуляторе, посмотрите внимательно, что оно там делает. Как до main() доходит или не доходит. Если ошибка сугубо логическая и локализуется где-то в этом месте, то и на симуляторе сможете увидеть.

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


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

Спасибо ,что помогаете. Тот же проект, даже частоты не перенастраивал, запустился сразу на борде, фонари замигали, т е таймеры запустились. При всех прочих равных на самопальной железяке не захотела, таймеры молчат. При меньшем буфере - запускаются(но надо 15360). Есть такой участок кода, что дсп студия докидывает - обработчик эксепшенсов, подозреваю туда уходит, как бы найти его в коде?

 

Стек и хеп в настройках проекта выставил в 512 байт.

В моей железяке мейн мой вообще не запускается(((. Уже жалею что с С связался.))

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

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


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

Нашел глюк, загрузка через уарт не проходит, а если бинарник во флешу - то запускается. Непонятна пока причина.

Может кто подскажет куда рыть? Т е если выставить с свойствах проекта загрузка через уарт (ASCII) - ничо не работает, если шить через дебаг агент бордовский(саму борду) или бинарник (тот же уарт, тока бинарник) во флешу - работает.

 

Суть ошибки - загрузчик встроенный теперь не устраивает скорость общения (когда по уарт заливается прога), было 57600, пока сделал 9600.

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

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


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

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

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

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

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

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

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

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

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

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