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

PoDoNoK

Участник
  • Постов

    10
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о PoDoNoK

  • День рождения 22.12.1979

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array
  1. Абсолютно с Вами согласен! Тут момент немного иной. Я ни в коем случае не пренебрегаю документацией, но как это в жизни всегда происходит - нужно брать быка за рога. Пришлось пересесть с 2189 на 21160. А из-за смены от версии к версии протоколов загрузки, приходилось пользоваться какой то древней версией ВДСП. Мне и сейчас приходится пользоваться ВДСП 2.0 и среду подробнее изучить всё никак не получается, в приоритете ассемблера синтаксис. Но с Вашей подачи, как раз знакомлюсь, за что Вам огромное, человеческое спасибо =)! И за краткое резюме этого профайлера!
  2. Спасибо огромное! Про Profiling даже не знал! Очень полезная возможность. Век живи - век учись =).
  3. Здравствуйте! Приходится работать на АДСП 21160 и я чётко не могу понять, когда стоит писать функции на ассемблере, а когда на Си. Как вы для себя определяете, что этот алгоритм оптимальнее по скорости написать на ассемблере, а этот кусок на Си?
  4. Вопрос снимается, стороняя библиотека не поддерживается в VD 4.0. Отсюда все проблеммы.
  5. Здравствуйте товарищи! В качестве преамбулы. У меня есть несколько плат, выполненных на основе 4х ADSP 21160. Все проекты выполненны и отлаженны в среде SHARK 2.0 с использованием сторонних библиотек, разработанных фирмой производителем специфических плат. Теперь я пытаюсь перекомпилировать проект в VisualDSP++4.0. Незначительные ошибки были исправленны, такии как - доведения до типа и тд, которые пропустил ШАРК 2,0. НО! Последняя ошибка, с которой я справился нестандартным образом настараживает. Линкер мне выдал след.: [Warning li2060] The following input section(s) that contain program code and/or data have not been placed into the executable for processor 'P0' as there are no relevant commands specified in the LDF: libc160.dlb[irptl.doj](seg_int_code) [Error li1060] The following symbols are referenced, but not mapped: 'modify_instr' referenced from libc160.dlb[interrup.doj](seg_pmco) 'modify_two_instrs' referenced from libc160.dlb[interrup.doj](seg_pmco) Я взял libc160.dlb из версии SHARK 2.0 и скопировал в дирикторию, по аналогии в VisualDSP++4.0. Проект теперь компилируется, но я уверен это не выход. Я просто обманул компилятор. Как эту проблемму можно решить более цивилизованным образом?
  6. Спасибо, теперь всё встало на свои места, что, где и на кого лежит :) Благодарю.
  7. Хмммм.... и локальной и глобальной делал переменную, но кладёт он её исключительно в seg_dmda. Альтернативный хиип не делал, карта памяти представленна выше.
  8. Вы очень правильно сказали, что у Вас компилится. Мой же проект использует стороннюю библиотеку, в которой и возникают проблеммы. [Warning li2060] The following input section(s) that contain program code and/or data have not been placed into the executable for processor 'P0' as there are no relevant commands specified in the LDF: libc160.dlb[irptl.doj](seg_int_code) [Error li1060] The following symbols are referenced, but not mapped: 'modify_instr' referenced from libc160.dlb[interrup.doj](seg_pmco) 'modify_two_instrs' referenced from libc160.dlb[interrup.doj](seg_pmco) Это последняя ошибка одного из проектов. Прочитав в помощи об ошибке Error li1060, я не совсем понял кто должен добовлять перечисленные переменные в сегменты памяти. Толи это должен разработчик библиотеки при компиляции, то ли я, используя её у себя в проекте. Может я вообще ошибаюсь, но если долго мучАться, то что-нибудь получится. Кароче переход с ошибками из одной среды в другую это отдельная эпопея, умноженная на обьём проекта и используемых компонент. Будем разбираться....Благодарю за ответы :tort:
  9. Да, уже так сделал, посмотрел в Карту памяти куда чего кладёт. Согласен про версию 2,0, но если ставить новую версию, весь проект не компилируется, очень много ошибок. РАзбираться в чём дело времени нет. Любому начальнику наплевать, что у тебя стоит старая версия, ему подавай результат. PS А если не сложно, скажите ссылки на интересные конференции по ДСП программированию.
  10. ADSP-21160 и malloc

    Здравствуйте! Пришлось перелезать с 2181 на 21160 и возникает куча вопросов. В среде VDSP 2.0 SHARK появилось очень многое. Например карта памяти (*.LDF) Теперь, возникает простейшая задача, нужно разместить в памяти массив и с ним работать долгое время. Достался мне в наследство проект со статическими адресами. Теперь меня интересует, когда я пишу нечто: double* v=(double *)malloc(KOL_ANGLE*urr[uRR_KKD]); , где он разместит переменную v? Привожу листинг LDF файла: ARCHITECTURE(ADSP-21160) // ADSP-21160 Memory Map: // ------------------------------------------------ // Internal memory 0x0000 0000 to 0x000f ffff // ------------------------------------------------ // 0x0000 0000 to 0x0000 0?ff IOP Regs // 0x0000 0?00 to 0x0001 ffff (reserved) // Block 0 0x0002 0000 to 0x0002 7fff Long Word (64) Addresses // Block 1 0x0002 8000 to 0x0002 ffff Long Word (64) Addresses // 0x0003 0000 to 0x0003 ffff (reserved) // Block 0 0x0004 0000 to 0x0004 ffff Normal Word (32/48) Addresses // Block 1 0x0005 0000 to 0x0005 ffff Normal Word (32/48) Addresses // 0x0006 0000 to 0x0007 ffff (reserved) // Block 0 0x0008 0000 to 0x0009 ffff Short Word (16) Addresses // Block 1 0x000a 0000 to 0x000b ffff Short Word (16) Addresses // 0x000c 0000 to 0x000f ffff (reserved) // ------------------------------------------------ // Multiproc memory 0x0010 0000 to 0x007f ffff // ------------------------------------------------ // 0x0010 0000 to 0x001f ffff Hammerhead ID=001 Internal memory // 0x0020 0000 to 0x002f ffff Hammerhead ID=010 Internal memory // 0x0030 0000 to 0x003f ffff Hammerhead ID=011 Internal memory // 0x0040 0000 to 0x004f ffff Hammerhead ID=100 Internal memory // 0x0050 0000 to 0x005f ffff Hammerhead ID=101 Internal memory // 0x0060 0000 to 0x006f ffff Hammerhead ID=110 Internal memory // 0x0070 0000 to 0x007f ffff Hammerhead ID=all Internal memory // ------------------------------------------------ // External memory 0x0080 0000 to 0xffff ffff // ------------------------------------------------ // SEARCH_DIR( $ADI_DSP\211xx\lib ) $LIBRARIES = system.dlb, libdsp160.dlb, lib160.dlb, libc160.dlb, libio160_32.dlb , libsdsp1.dlb, libsdsp2.dlb, libsdsp3.dlb; $OBJECTS = $COMMAND_LINE_OBJECTS; MEMORY { seg_rth { TYPE(PM RAM) START(0x00040000) END(0x000400ff) WIDTH(48) } seg_init { TYPE(PM RAM) START(0x00040100) END(0x000401FF) WIDTH(48) } seg_pmco { TYPE(PM RAM) START(0x00040200) END(0x00049000) WIDTH(48) } seg_pmda { TYPE(PM RAM) START(0x0004e800) END(0x0004f3df) WIDTH(32) } seg_pm_cfdn_um{ TYPE(PM RAM) START(0x0004F3E0) END(0x0004F3FF) WIDTH(32) } seg_pm_cfdn { TYPE(PM RAM) START(0x0004F400) END(0x0004F5FF) WIDTH(32) } seg_pm_bs { TYPE(PM RAM) START(0x0004F600) END(0x0004F7FF) WIDTH(32) } seg_idat { TYPE(PM RAM) START(0x0004f800) END(0x0004ffff) WIDTH(32) } seg_in { TYPE(DM RAM) START(0x00051000) END(0x000517ff) WIDTH(32) } seg_rdat { TYPE(DM RAM) START(0x00051800) END(0x00051bff) WIDTH(32) } seg_dm_isr { TYPE(DM RAM) START(0x00054000) END(0x00054000) WIDTH(32) } seg_dm_cmd { TYPE(DM RAM) START(0x00054001) END(0x00054001) WIDTH(32) } seg_dm_state { TYPE(DM RAM) START(0x00054002) END(0x00054002) WIDTH(32) } seg_dm_source{ TYPE(DM RAM) START(0x00054003) END(0x00054003) WIDTH(32) } seg_dm_link_buf{ TYPE(DM RAM) START(0x00054004) END(0x00054004) WIDTH(32) } seg_dm_recieve_ack{ TYPE(DM RAM) START(0x00054005) END(0x00054005) WIDTH(32) } seg_dm_urr { TYPE(DM RAM) START(0x00054006) END(0x00054041) WIDTH(32) } seg_dm_akkr { TYPE(DM RAM) START(0x00054042) END(0x00054061) WIDTH(32) } seg_dm_aksr { TYPE(DM RAM) START(0x00054062) END(0x00054071) WIDTH(32) } seg_dm_upor { TYPE(DM RAM) START(0x00054072) END(0x000540B1) WIDTH(32) } seg_dm_apap { TYPE(DM RAM) START(0x000540B2) END(0x000540F1) WIDTH(32) } seg_dm_warning_excess { TYPE(DM RAM) START(0x000540F2) END(0x000540F2) WIDTH(32) } seg_dm_link_r{ TYPE(DM RAM) START(0x000545F3) END(0x000545F3) WIDTH(32) } seg_dm_adr_buf{ TYPE(DM RAM) START(0x000545F4) END(0x000545F4) WIDTH(32) } seg_dmda { TYPE(DM RAM) START(0x000545F5) END(0x00055FFF) WIDTH(32) } seg_twid { TYPE(DM RAM) START(0x00056000) END(0x00056fff) WIDTH(32) } seg_heap { TYPE(DM RAM) START(0x0005c000) END(0x0005dfff) WIDTH(32) } seg_addition { TYPE(DM RAM) START(0x0005e000) END(0x0005efff) WIDTH(32) } seg_stak { TYPE(DM RAM) START(0x0005f000) END(0x0005ffff) WIDTH(32) } } PROCESSOR p0 { LINK_AGAINST( $COMMAND_LINE_LINK_AGAINST) OUTPUT( $COMMAND_LINE_OUTPUT_FILE ) SECTIONS { // .text output section seg_rth { INPUT_SECTIONS( $OBJECTS(seg_rth) $LIBRARIES(seg_rth)) } >seg_rth seg_init { INPUT_SECTIONS( $OBJECTS(seg_init) $LIBRARIES(seg_init)) } >seg_init seg_pmco { INPUT_SECTIONS( $OBJECTS(seg_pmco) $LIBRARIES(seg_pmco)) } >seg_pmco seg_addition { INPUT_SECTIONS( $OBJECTS(seg_addition) $LIBRARIES(seg_addition)) } > seg_addition seg_pmda { INPUT_SECTIONS( $OBJECTS(seg_pmda) $LIBRARIES(seg_pmda)) } >seg_pmda seg_pm_cfdn { INPUT_SECTIONS( $OBJECTS(seg_pm_cfdn) $LIBRARIES(seg_pm_cfdn)) } >seg_pm_cfdn seg_pm_cfdn_um { INPUT_SECTIONS( $OBJECTS(seg_pm_cfdn_um) $LIBRARIES(seg_pm_cfdn_um)) } >seg_pm_cfdn_um seg_pm_bs { INPUT_SECTIONS( $OBJECTS(seg_pm_bs) $LIBRARIES(seg_pm_bs)) } >seg_pm_bs seg_dm_isr { INPUT_SECTIONS( $OBJECTS(seg_dm_isr) $LIBRARIES(seg_dm_isr)) } > seg_dm_isr seg_dm_cmd { INPUT_SECTIONS( $OBJECTS(seg_dm_cmd) $LIBRARIES(seg_dm_cmd)) } > seg_dm_cmd seg_dm_state { INPUT_SECTIONS( $OBJECTS(seg_dm_state) $LIBRARIES(seg_dm_state)) } > seg_dm_state seg_dm_source { INPUT_SECTIONS( $OBJECTS(seg_dm_source) $LIBRARIES(seg_dm_source)) } > seg_dm_source seg_dm_link_buf { INPUT_SECTIONS( $OBJECTS(seg_dm_link_buf) $LIBRARIES(seg_dm_link_buf)) } > seg_dm_link_buf seg_dm_link_r { INPUT_SECTIONS( $OBJECTS(seg_dm_link_r) $LIBRARIES(seg_dm_link_r)) } > seg_dm_link_r seg_dm_adr_buf { INPUT_SECTIONS( $OBJECTS(seg_dm_adr_buf) $LIBRARIES(seg_dm_adr_buf)) } > seg_dm_adr_buf seg_dm_recieve_ack { INPUT_SECTIONS( $OBJECTS(seg_dm_recieve_ack) $LIBRARIES(seg_dm_recieve_ack)) } > seg_dm_recieve_ack seg_dm_urr { INPUT_SECTIONS( $OBJECTS(seg_dm_urr) $LIBRARIES(seg_dm_urr)) } > seg_dm_urr seg_dm_akkr { INPUT_SECTIONS( $OBJECTS(seg_dm_akkr) $LIBRARIES(seg_dm_akkr)) } > seg_dm_akkr seg_dm_aksr { INPUT_SECTIONS( $OBJECTS(seg_dm_aksr) $LIBRARIES(seg_dm_aksr)) } > seg_dm_aksr seg_dm_upor { INPUT_SECTIONS( $OBJECTS(seg_dm_upor) $LIBRARIES(seg_dm_upor)) } > seg_dm_upor seg_dm_apap { INPUT_SECTIONS( $OBJECTS(seg_dm_apap) $LIBRARIES(seg_dm_apap)) } > seg_dm_apap seg_dm_warning_excess { INPUT_SECTIONS( $OBJECTS(seg_dm_warning_excess) $LIBRARIES(seg_dm_warning_excess)) } > seg_dm_warning_excess seg_dmda { INPUT_SECTIONS( $OBJECTS(seg_dmda) $LIBRARIES(seg_dmda)) } > seg_dmda seg_twid { INPUT_SECTIONS( $OBJECTS(seg_twid) $LIBRARIES(seg_twid)) } > seg_twid seg_in { INPUT_SECTIONS( $OBJECTS(seg_in) $LIBRARIES(seg_in)) } > seg_in seg_rdat { INPUT_SECTIONS( $OBJECTS(seg_rdat) $LIBRARIES(seg_rdat)) } > seg_rdat seg_idat { INPUT_SECTIONS( $OBJECTS(seg_idat) $LIBRARIES(seg_idat)) } > seg_idat stackseg { // allocate a stack for the application ldf_stack_space = .; ldf_stack_length = MEMORY_SIZEOF(seg_stak); } > seg_stak heap { // allocate a heap for the application ldf_heap_space = .; ldf_heap_end = ldf_heap_space + MEMORY_SIZEOF(seg_heap) - 1; ldf_heap_length = ldf_heap_end - ldf_heap_space; } > seg_heap } } Я конечно могу писать в статические адреса, но не хочется так делать...........
×
×
  • Создать...