![](https://electronix.ru/forum/uploads/set_resources_23/84c1e40ea0e759e3f1505eb1788ddf3c_pattern.png)
![](https://electronix.ru/forum/uploads/set_resources_23/84c1e40ea0e759e3f1505eb1788ddf3c_default_photo.png)
vik0
-
Постов
381 -
Зарегистрирован
Сообщения, опубликованные vik0
-
-
Был тут на семинаре вчера и представители фирмы кратенько представили сего зверя. :unsure:
....
А о [примерной] дате доступности этого "зверька" ничего не говорили?
-
нужно ли кешировать data L1, code L1 ?
Зачем? :07: L1 и так работает на частоте ядра
где лучше разместить стек - в write-back SDRAM, cached L1 или в scratchpad ?где будет быстрее?
Не в SDRAM однозначно. Если хватит 4к под стек (мне до сих пор хватало) - тогда в scratchpad. Если мало - в некэшируемой L1.
По скорости L1 и scratchpad одинаковы.
-
*pMDMA_S1_Y_MODIFY=1;
Нужно 2.
-
Вопросы:
1. Правильны ли те мои действия, кот я описал выше?
2. Как сформировать .ldr файл? .dxe файлы в папке проекта вижу, а .ldr нет.
3. В настройках ldf я поставил галку использовать внешнюю память SDRAM. Я так понял linker сам раскидает что грузить в L1, что в SDRAM, так?
Здравствуйте.
1. Да, все правильно
2. В окне Project Options поменять тип проекта (см. рис), и пересобрать проект.
3. Да
И потом, разрешать кеш данных...?Часто правильная организация потоков DMA позволяет обойтись без использования кэша данных.
-
мой загрузчик(который ldr, торчащий в L1, инициализирующий всё и грузящий в SDRAM) сам передаст управление на загруженный код в SDRAM
Тогда в чем проблема? Как "прыгнуть" в SDRAM?
разместить кучу, стек, интеррупт хэндлерыНе путайте мухи и котлеты. Кучу и стек в памяти программ вы не разместите. Интеррупт хэндлеры займут намного меньше чем 32кб. Зачем пихать всю програму в SDRAM?
Код явно превышает 48кБ, а делить его и резать напообие оверлеев не совсем хочется.Нужен шустрый вычислитель
Не режьте. Разместите критичные к скорости выполнения куски в L1 принудительно, код инициализации - в SDRAM (принудительно). Остальное оставьте на усмотрение линкера. И включите кэш. Все.
-
проблема не в написании загрузчика, а в создании приложения, которое было бы с конкретно указанного адреса.
Приложение НЕ МОЖЕТ стартовать с произвольного адреса. Либо с 0х20000000 (в режиме bypass), либо с начала L1 code. Все, других вариантов нет.
нужно создать приложение, чтобы оно лежало уже в SDRAM и исполнялось там полностью!Вы можете объяснить зачем вам это нужно?? Что вы собираетесь делать с 32 (а то и 48, если не использовать кэш) килобайтами очень быстрой памяти програм? Зачем вам ставить 400 МГц DSP и сразу на корню убивать всю его производительность, исполняя код из тормозной SDRAM?? Видимо я что-то в этом мире не понимаю
Предлагаю уделить своё внимание SSL(Second Stage Loader)SSL - это специальный "костыль" для загрузки двухядерников, и AFAIK, в одноядерных финах он не поддерживается.
-
1) вначале в L1 грузится и исполняется инит-часть (включая инициализацию SDRAM)
2) затем в SDRAM по адресу 0x00000000 грузится приложение
3) инициализация SDRAM в виде функции на языке Си
1 и 2. Смотрите пример из поста uriy.
3. Увы, нет. Только для 54х семейства.
там только можно L1 или 0x20000000(8bit flash)при задании других адресов - ошибка линкера (см. посты выше)
Разместите в L1 main() и из нее вызывайте свой UserMain(), расположенный в SDRAM.
-
может конденсатор в цепи сброса взять больше?
Эээ. Простите, а вы и для фина reset формируете с помощью RC-цепочки?
сможет ли блекфин нормально грузиться с еепром при подтяжках на miso/sck 100ком?, 43ком?Не вижу препятствий.
-
Вы просто не умеете готовить plain C:
Умею. Но просто мне больше по вкусу С++ :)
...
Как видите, все намного проще :)
Согласен. Я и не утверждал что это нельзя сделать на С. Просто (лично мне) С++ вариант кажется более изящным, что ли. А оверхеда (о чем, собственно, изначально и шла речь) он не вносит.
-
Нет не читал. Не читаю на русском техническую литературу. подозреваю, что ето "The Annotated C++ Reference Manual"..
Нет, я говорю о The Design and Evolution of C++
А че там?История развития языка с подробным описанием того, почему основные функции реализованы именно так, а не иначе.
он скрывает связь с ресурсами - например внутри конструктора может быть другой newчто сразу не очевидно.
Ага. А на чистом "С" внутри функции типа InitSomething() не может быть вызвана InitSomethingElse() и, даже (о ужас!!), malloc??...
Операторы могут быть переопределены...Ну и отлично! Лично я предпочту написать:
complex a, b, c, d; .... a += b - c*d;
а не:
a = complex_add(a, complex_sub(b, complex_mul(c, d)));
...и получить на выходе тот же самый код.
Деструкторы - надо помнить что при выходе из скопа вызывается деструктор и т.д.Ну и отлично! Лично я предпочту написать:
int DoSomething() { CriticalSection cs; ...bla-bla-bla... if (foo) return 1; ...bla-bla-bla... if (bar) return 2; ...bla-bla-bla... if (baz) return 3; ...bla-bla-bla... return 0; }
а не:
int DoSomething() { DisableInterrupts(); ...bla-bla-bla... if (foo) { RestoreInterrupts(); return 1; } ...bla-bla-bla... if (bar) { RestoreInterrupts(); return 2; } ...bla-bla-bla... if (baz) { RestoreInterrupts(); return 3; } ...bla-bla-bla... RestoreInterrupts(); return 0; }
...и получить на выходе (извините за самоцитирование :laughing: ) тот же самый код.
Ну и на последок: конечно, голову никто не отменял. Укладывать все возможности Си++ на AVR никто не собирается, но некоторые возможности почему бы не использовать?+100
-
Очень правильная "в принципе" идея, только в реальности С++ слегка провоцирует на дополнительные
накладные расходы, предоставляя взамен кучу не всегда нужных фич.
А вот людей которые могут не купиться на эти ненужные вещи не так уж и много...
Согласен. Все упирается в поиск баланса - чем вы готовы пожертвовать ради упрощения процесса разработки. Правда это подразумевает неплохое (как минимум) знание языка. С++ - сложный инструмент. А для эффективного использования любого сложного инструмента необходимо его хорошее знание и понимание.
-
Я так понял, что он вообще говоря немного устарел?
Нет, почему же? Для своего класса задач вполне неплохое ядрышко.
На чем вообще лучше учиться?Чему?
И есть ли открытые ядра посложнее - например, чтобы можно было на С программы писать??http://opencores.org/?do=projects&cat=...y&stage=any
На любой вкус и цвет. :rolleyes:
-
расходы как минимум на конструкторы/деструкторы, виртуальную таблицу, ну и все то, что приносит с собой дженерализейшн.
У Страуструпа есть весьма интересная книжка - "Дизайн и эволюция языка С++". Не читали? Рекомендую. Одна из ключевых идей книги - "вы не платите за то, что не используете".
Не используете виртуальные функции - не будет никакой таблицы. Не инициализируете члены класса - не будет никаких лишних конструкторов (default ctor, инициализирующий члены default значениями, нормальный компилятор успешно соптимизирует).
-
...буду рад если подскажете, где могут ждать неприятности...
http://www.analog.com/static/imported-file...evE.10.8.08.pdf
Аномалия 05000311.
И вообще крайне желательно внимательно изучить данный документ. Все (известные на данный момент :) ) аппаратные "грабли" там расписаны.
-
А какие ADuCи с DDS? Я почему-то не нашел...
7128/7129
-
По-хорошему, код инициализации внешней шины лучше выполнять глобально. Ну не должен драйвер периферийного устройства знать подробности внешнего подключения данного устройства, не должен.
Vik, Boom - cпасибо огромное за подсказки...Всегда пожалуйста :)
-
Ничего модифицировать не надо.
Достаточно правильно настроить EBIU (указать на необходимость работы с нужным банком асинхронной памяти в 16-ти битном режиме - биты 4-7 регистра EBIU_AMGCTL)
-
Где вы берете IBIS-модели для Гиперлинкс от Ментора?
На сайтах производителей микросхем.
-
Да, действительно, прошу прощения за "старье", бес попутал. :(
Перепутал с 2106
-
Купил парочку BF547BBCZ-5A в AUTEX'е.
Как давно и какой ревизии, если не секрет?
-
А вам точно нужна плата на этом старье? Я бы делал макетку с 214х.
По теме. Вы уверены что вам вообще нужно преобразовывать уровни? 90% ЖКИ вполне нормально воспринимают 3В сигналы.
Если таки нужно преобразование - 74LVC4245 вам поможет.
-
Коллега недавно "мучал" кит с 548-м.
Вроде громко не ругался - рискну предположить что серьзных проблем не было :laughing:
PPI "завелся" без проблем, USB нам не интересно. Выйдет из отпуска (через 2 недели) - узнаю подробней.
PS. Anomaly list, надеюсь, читали?
-
В исходниках libdsp, входящей в состав VisualDSP++.
Информация для real FFT, к примеру:
Cycles : Overhead of 25 cycles (n=0) and approximately nlogn (base 2) with theexact numbers for n=32 to n=8192 below:
~ for n=32, number of cycles = 390
~ for n=64, number of cycles = 498
~ for n=128, number of cycles = 1211
~ for n=256, number of cycles = 2179
~ for n=512, number of cycles = 5111
~ for n=1024, number of cycles = 10225
~ for n=2048, number of cycles = 23315
~ for n=4096, number of cycles = 47754
~ for n=8192, number of cycles = 106817
-
Киты - для студентов, которые хотят повторить какой-нибудь экзампл, но руки кривоваты.
Вы видели "кит" по ссылке HardJoker-а? Хочу я посмотреть на студента с этим "китом" и на его "экзампл" :07:
вопросы по линкеру vdsp 5.0
в Сигнальные процессоры и их программирование - DSP
Опубликовано · Пожаловаться
Как-то так:
Видимо неправильно объявлена. Для стека:
Включив телепатические способности, рискну предположить что у вас ошибка в строке 123 в файле foo.c
Шутка.
А редактировать .ldf в текстовом виде уже не гламурно? ;)
99.9% - не поможет. Ищите ошибки в своем коде.