dxp 34 8 апреля, 2017 Опубликовано 8 апреля, 2017 · Жалоба и настройка сдрам и pll настраиваются в init. В основном приложеннии ничего не трогаю из этого. Это правильно. :) в ldr или в ldf ? Да, расширение файла ldf, но сам файл образа у них называется ldr. Вот, кстати, смотрелка для него. Если правильно отработала утилита elfloader.exe (ей сообщили правильные опции), то в загрузочном образе будет секция с флагом INIT и он будет в первых рядах, а где-то за ней должна быть секция с данными, в заголовке которой должен быть адрес массива в SDRAM и его размер. Этим вьювером всё это вполне удобно проинспектировать - адреса, размеры и флаги он показывает читабельно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lmx2315 2 8 апреля, 2017 Опубликовано 8 апреля, 2017 · Жалоба Это правильно. :) Да, расширение файла ldf, но сам файл образа у них называется ldr. Вот, кстати, смотрелка для него. Если правильно отработала утилита elfloader.exe (ей сообщили правильные опции), то в загрузочном образе будет секция с флагом INIT и он будет в первых рядах, а где-то за ней должна быть секция с данными, в заголовке которой должен быть адрес массива в SDRAM и его размер. Этим вьювером всё это вполне удобно проинспектировать - адреса, размеры и флаги он показывает читабельно. открыл этой программой одну из старых прошивок (там массив лежал в самом начале sdrama - с адреса 0x68) И вижу две прошивки , init и рабочую : DXE0 и DXE1 , в DXE1 вижу свой массив с правильного адреса заполненный правильными данными. Ничего тогда не понимаю. Может прошивка так быстро грузится что пишет в сдрам данные, а сдрам ещё в "промежуточном состоянии" находится ? Может после init прошивки нужно какую-то паузу создать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 34 8 апреля, 2017 Опубликовано 8 апреля, 2017 · Жалоба Может прошивка так быстро грузится что пишет в сдрам данные, а сдрам ещё в "промежуточном состоянии" находится ? Может после init прошивки нужно какую-то паузу создать? Это вряд ли - если контроллер настроен, то он сразу работает. Вы можете в init добавить свой код, чтобы поэкспериментировать, в т.ч. и паузу. И потом, у вас, вы сказали, там нули лежат. А это означает, что данные-то туда грузятся - если бы контроллер не работал, то там лежал бы "мусор". Такое впечатление, что там кто-то поверх нули записывает. Посмотрите, не ли случайно ещё одной секции с этим же адресом и флагом ZEROFILL? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lmx2315 2 8 апреля, 2017 Опубликовано 8 апреля, 2017 · Жалоба Такое впечатление, что там кто-то поверх нули записывает. Посмотрите, не ли случайно ещё одной секции с этим же адресом и флагом ZEROFILL? ..других данных на тот же адрес в файле нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 8 апреля, 2017 Опубликовано 8 апреля, 2017 · Жалоба ..других данных на тот же адрес в файле нет. эмулятор есть? Поставьте watchpoint на первое слово вашего массива и увидите кто в него и что пишет. Также можно записать перед стартапом какое-нить значение (при помощи эмулятора) в одну из ячеек массива и посмотреть после стартапа её содержимое. Возможно у вас кто-то портит этот массив. Отлаживать своё ПО можете только Вы сами, удалённо это не сделать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lmx2315 2 8 апреля, 2017 Опубликовано 8 апреля, 2017 · Жалоба эмулятор есть?. ..ооо! эмулятора нет, но в VDSP есть симулятор, может поможет? ..ооо! эмулятора нет, но в VDSP есть симулятор, может поможет? ..хотя симулятор без сдрамки наверное не поможет :( . Ну на работе есть отладочная плата аналога под блекфин, там правда сдрам другой , посмотрю на ней. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lmx2315 2 12 апреля, 2017 Опубликовано 12 апреля, 2017 · Жалоба Создал свою секцию в файле ldf init_sdram RUNTIME_INIT { INPUT_SECTION_ALIGN(4) INPUT_SECTIONS($OBJECTS(init_sdram)) } > MEM_SDRAM0_BANK1 Массив стал выводиться но только почему-то по пол слова правильно , т.е. Массив записан так : #pragma section ("init_sdram",RUNTIME_INIT) unsigned short buf_sdram3[buf_size3]={0xabcd,0xabcd,0xabcd}; а выводится это: buf_sdram3: AB00 AB00 AB00 AB00 Почему? Причём если ручками записать по адресу массива двухбайтное слово - то оно записывается правильно, и читается правильно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 34 13 апреля, 2017 Опубликовано 13 апреля, 2017 · Жалоба а выводится это: buf_sdram3: AB00 AB00 AB00 AB00 Почему? А в ldr файле в соответствующий секции тоже такие же значения лежат? У меня в коде инициализирумый массив описан так: //------------------------------------------------------------------------------ #pragma section("sdram1") TCoordinates BrightnessIcon[46] = { {1,8}, {2,2}, {2,8}, {2,13}, {3,3}, {3,12}, {4,6}, {4,7}, {4,8}, {4,9}, {5,5}, {5,6}, {5,9}, {5,10}, {6,4}, {6,5}, {6,10}, {6,11}, {7,4}, {7,11}, {8,1}, {8,2}, {8,4}, {8,11}, {8,13}, {8,14}, {9,4}, {9,11}, {10,4}, {10,5}, {10,10}, {10,11}, {11,5}, {11,6}, {11,9}, {11,10}, {12,6}, {12,7}, {12,8}, {12,9}, {13,3}, {13,12}, {14,2}, {14,8}, {14,13}, {15,8} }; //------------------------------------------------------------------------------ А в линкерном скрипте sdram1 { INPUT_SECTION_ALIGN(4) INPUT_SECTIONS($OBJECTS(sdram1) $LIBRARIES(sdram1)) } >MEM_SDRAM1 Не помню никаких проблем. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lmx2315 2 13 апреля, 2017 Опубликовано 13 апреля, 2017 · Жалоба А в ldr файле в соответствующий секции тоже такие же значения лежат? я ничего не понимаю - посмотрел гляделкой LdrViewer.exe в файле NewProject.ldr и не нашёл там своего массива, хотя он (пусть половинчато) выводится и в файле NewProject.map.xml есть : <OUTPUT_SECTION name='init_sdram' id='03D85970' memory_id='00582A08' type='SHT_PROGBITS' start_address='0x4' word_size='0x80' word_size_unmapped='0x0' word_size_reserved='0x0' > <INPUT_SECTIONS> <INPUT_SECTION id='03858170' name='init_sdram' start_address='0x4' size='0x80' element_at='0x0' > <INPUT_FILE><![CDATA[.\Release\main.doj]]></INPUT_FILE> <SYMBOL name='_buf_sdram3' address='0x4' size='0x80' binding='GLOBAL'><DEMANGLED_NAME><![CDATA[buf_sdram3]]></DEMANGLED_NAME></SYMBOL> <SYMBOL name='._buf_sdram3.end' address='0x84' size='0x0' binding='LOCAL'><DEMANGLED_NAME><![CDATA[]]></DEMANGLED_NAME></SYMBOL> NewProject.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 34 13 апреля, 2017 Опубликовано 13 апреля, 2017 · Жалоба я ничего не понимаю - посмотрел гляделкой LdrViewer.exe в файле NewProject.ldr и не нашёл там своего массива, хотя он (пусть половинчато) выводится и в файле NewProject.map.xml есть : Да, я тоже не вижу в ldr (в моём есть такие секции - в адресом пространстве SDRAM, т.е. утилита отображает исправно). Если есть в мапе, следовательно, должно быть и в dxe. Если из dxe в ldr не попадает, надо смотреть процесс генерации образа - утилита elfloader. У меня её запуск: COMMON_FLAGS = ' -proc ADSP-' + Processor + ' -si-revision ' + DeviceRev ... LDRFLAGS = COMMON_FLAGS LDRFLAGS += ' -Width 16' ... LOADER + LDRFLAGS + ' -Init ' + <исполняемый init> где: LOADER - elfloader.exe Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lmx2315 2 13 апреля, 2017 Опубликовано 13 апреля, 2017 · Жалоба А вы не из под VisualDSP работаете? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 34 13 апреля, 2017 Опубликовано 13 апреля, 2017 · Жалоба А вы не из под VisualDSP работаете? Нет, IDE VisialDSP++ только для отладчика использую (точнее, использовал, пока не перелез на линух, кодирование и сборка внешними тулзами (slickedit + scons)). У вас тоже нет препятствий напрямую запустить любой инструмент из пакета. Попробуйте руками (утилитой elfloader.exe) ldr файл сгенерировать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lmx2315 2 13 апреля, 2017 Опубликовано 13 апреля, 2017 · Жалоба По прежнему выводит по пол слова: вывод моего терминала: buf_sdram3: AA00 BB00 CC00 DD00 EE00 1100 2200 3300 Хотя если пишу после включения ручками в память - пишет и читает нормально, но при условии что пишу по чётному адресу. А если пытаюсь записать двухбайтное слово по нечётному адресу в памяти - всё зависает, почему? tst1.rar init_code.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 34 13 апреля, 2017 Опубликовано 13 апреля, 2017 · Жалоба Хотя если пишу после включения ручками в память - пишет и читает нормально, но при условии что пишу по чётному адресу. А если пытаюсь записать двухбайтное слово по нечётному адресу в памяти - всё зависает, почему? У Blackfin есть требование по выравниванию. Однобайтные обращения можно делать по любому адресу, двухбайтные (halfword) - только по чётным адресам, четырёхбайтные (word) - только по адресам, кратным четырём. Если это нарушить, то возникает аппаратное исключение. Это всё описано в документации. Поэтому у вас проц и виснет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lmx2315 2 13 апреля, 2017 Опубликовано 13 апреля, 2017 · Жалоба Поэтому у вас проц и виснет. спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться