Alex77 4 16 июня, 2015 Опубликовано 16 июня, 2015 · Жалоба выборочной Попытался обойтись без использования new, добавил в проект простенький класс - конструктор, деструктор и пару функций. Скомпилилось, но при попытке создать объект опять ругается на малый размер памяти. При этом размер программы занял более 100 кБ, а кода там минимум. Вот и вопрос - можно ли как-то настроить Xilinx SDK, чтоб нормально работать с с++? У Altera для Nios II всё работает надо только задать компилятору соответствующие опции. C++ по определению "плодит" толстые программы и при этом не важно xilinx or altera. Можно поискать опции для "выборочной" линковки стандартных библиотек. все остальное "от лукавого". или переходите на с (но там тоже свои заморочки) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 16 июня, 2015 Опубликовано 16 июня, 2015 · Жалоба C++ по определению "плодит" толстые программы и при этом не важно xilinx or altera. Можно поискать опции для "выборочной" линковки стандартных библиотек. все остальное "от лукавого". или переходите на с (но там тоже свои заморочки) Но не на столько же толстые. С Altera Nios II работал достаточно много и там с этим всё норально. Предполагаю, что и у Xilinx должен быть способ как правильно всё настроить. Только начинаю осваивать MicroBlaze и столкнулся с описанной проблемой. А с одними макросами работать как-то не очень приятно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 17 июня, 2015 Опубликовано 17 июня, 2015 · Жалоба Добавил в IP Integrator ядро ten_gig_eth_mac, в BSP высветилось generic и отсутствуют какие-либо драйвера для этого ядра. Что это означает, что на него нет лицензии? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 17 июня, 2015 Опубликовано 17 июня, 2015 · Жалоба Очень даже помогают ключи для компилера (-ffunction-sections -fdata-sections) и линкера (-Wl,--gc-sections), нашёл в этой теме. Размер кода уменьшился со 190 кБ до 62 кБ. Возможно есть ещё что-то? Если переписать всё с использованием только си, то размер кода ужимается до 30 кБ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex77 4 18 июня, 2015 Опубликовано 18 июня, 2015 · Жалоба Очень даже помогают ключи для компилера (-ffunction-sections -fdata-sections) и линкера (-Wl,--gc-sections), нашёл в этой теме. Размер кода уменьшился со 190 кБ до 62 кБ. Возможно есть ещё что-то? Если переписать всё с использованием только си, то размер кода ужимается до 30 кБ. Это практически все. есть еще оптимизация по размеру/скорости типа -o2 и -s (как то так, если не путаю с другим компилятором). Если важен размер самого elf файла - то можно "отрезть" отладочную информацию. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 18 июня, 2015 Опубликовано 18 июня, 2015 · Жалоба С O2 и Os понятно, но тогда не получится нормально отлаживать программу, а пока это рано. Есть ещё каких-то 30 кБ разницы между кодом си и с++. У Altera для Nios II как-то всё сразу более оптимально настроено, в 60 кБ помещается программа с куда более значительным кодом (без использования Os и др.). Почему для 10G Ethernet MAC driver name получился равным generic, что это означает? BEGIN DRIVER PARAMETER DRIVER_NAME = generic PARAMETER DRIVER_VER = 2.0 PARAMETER HW_INSTANCE = ten_gig_eth_mac_0 END Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 18 июня, 2015 Опубликовано 18 июня, 2015 · Жалоба В папке с установкой Xilinx SDK (\Xilinx\SDK\2015.1\data\embeddedsw\XilinxProcessorIPLib\drivers\) нет каких-либо исходников для 10G Ethernet MAC. Означает ли это и вышеописанный generic, что у Xilinx нет поддержки данного ядра в виде драйвера BSP? Что-то на их сайте никакой инфы по этому поводу найти не могу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 18 июня, 2015 Опубликовано 18 июня, 2015 · Жалоба Ответили на форуме Xilinx, оказывается, никакого BSP для 10G EMAC нет. Остаётся вопрос по настройке проекта для с++. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex77 4 19 июня, 2015 Опубликовано 19 июня, 2015 · Жалоба Ответили на форуме Xilinx, оказывается, никакого BSP для 10G EMAC нет. Остаётся вопрос по настройке проекта для с++. Посмотрите в map.lst (создается опциями) что там на компилилось и с линковалось. сравните с аналогичным map.lst от altera при идентичных исходниках. далее по результатам... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 19 июня, 2015 Опубликовано 19 июня, 2015 · Жалоба Посмотрите в map.lst (создается опциями) что там на компилилось и с линковалось. сравните с аналогичным map.lst от altera при идентичных исходниках. далее по результатам... Да, спасибо, map-файл уже генерю, но пока только просмотрел, что оно подключает. Отложил этот вопрос "на потом". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 26 июня, 2015 Опубликовано 26 июня, 2015 · Жалоба Может кто подскажет, где у меня ошибка? Разбираюсь с работой ядра CDMA. В Simple Mode всё работает (смотрю в Memory, что данные перебрасываются из одной области памяти в другую), а вот Scatter Gather Mode работать не хочет. #include "xaxicdma_i.h" #include "xparameters.h" #include "xaxicdma.h" #include "string.h" #define BD_SPACE_BASE XPAR_DESCRIPTOR_MEMORY_AXI_BRAM_CTRL_2_S_AXI_BASEADDR #define BD_SPACE_HIGH XPAR_DESCRIPTOR_MEMORY_AXI_BRAM_CTRL_2_S_AXI_HIGHADDR #define NUMBER_OF_BDS_TO_TRANSFER 4 int main() { int n = 1024; unsigned int *mem0_ptr = (unsigned int *) XPAR_INTERNAL_MEMORY_0_AXI_BRAM_CTRL_0_S_AXI_BASEADDR; unsigned int *mem1_ptr = (unsigned int *) XPAR_INTERNAL_MEMORY_1_AXI_BRAM_CTRL_1_S_AXI_BASEADDR; memset(mem0_ptr, 0, n*sizeof(unsigned int)); memset(mem1_ptr, 0, n*sizeof(unsigned int)); memset(mem1_ptr + n, 0, n*sizeof(unsigned int)); for(int i = 0; i < n; i++) { mem0_ptr[i] = i; } int status, desc_count_max; XAxiCdma_Bd decs_template; XAxiCdma_Config *cfg_ptr; XAxiCdma cdma_engine; XAxiCdma *cdma = &cdma_engine; cfg_ptr = XAxiCdma_LookupConfig(XPAR_AXI_CDMA_0_DEVICE_ID); status = XAxiCdma_CfgInitialize(cdma, cfg_ptr, cfg_ptr->BaseAddress); XAxiCdma_Reset(cdma); while(!XAxiCdma_ResetIsDone(cdma)) ; while(XAxiCdma_IsBusy(cdma)) ; //-------------------------------------------------------------------- // SG Mode //-------------------------------------------------------------------- memset(mem1_ptr, 0, 32768); if(XAxiCdma_IsSimpleMode(cdma)) { XAxiCdma_SwitchMode(cdma, XAXICDMA_SG_MODE); } if(XAxiCdma_IsSimpleMode(cdma)) { XAxiCdma_SwitchMode(cdma, XAXICDMA_SG_MODE); } desc_count_max = XAxiCdma_BdRingCntCalc(XAXICDMA_BD_MINIMUM_ALIGNMENT, BD_SPACE_HIGH - BD_SPACE_BASE + 1, BD_SPACE_BASE); status = XAxiCdma_BdRingCreate(cdma, BD_SPACE_BASE, BD_SPACE_BASE, XAXICDMA_BD_MINIMUM_ALIGNMENT, desc_count_max); if(status != XST_SUCCESS) { return 1; } XAxiCdma_BdClear(&decs_template); XAxiCdma_BdRingClone(cdma, &decs_template); XAxiCdma_Bd *desc_ptr, *curr_desc_ptr; status = XAxiCdma_BdRingAlloc(cdma, NUMBER_OF_BDS_TO_TRANSFER, &desc_ptr); if(status != XST_SUCCESS) { return 1; } curr_desc_ptr = desc_ptr; for(int i = 0; i < NUMBER_OF_BDS_TO_TRANSFER; i++) { status = XAxiCdma_BdSetSrcBufAddr(curr_desc_ptr, (unsigned long) mem0_ptr); if(status != XST_SUCCESS) { return 1; } status = XAxiCdma_BdSetDstBufAddr(curr_desc_ptr, (unsigned long) (mem1_ptr + i*n)); if(status != XST_SUCCESS) { return 1; } status = XAxiCdma_BdSetLength(curr_desc_ptr, n*sizeof(unsigned int)); if(status != XST_SUCCESS) { return 1; } curr_desc_ptr = XAxiCdma_BdRingNext(cdma, curr_desc_ptr); } XAxiCdma_BdRingToHw(cdma, NUMBER_OF_BDS_TO_TRANSFER, desc_ptr, 0, 0); while(XAxiCdma_IsBusy(cdma)) ; while(1) {} } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 27 июня, 2015 Опубликовано 27 июня, 2015 · Жалоба Ошибка в том, что в использовании функции XAxiCdma_SwitchMode() нет необходимости. Текущий режим проверяется при старте CDMA (ф-ии XAxiCdma_BdRingToHw() и XAxiCdma_SimpleTransfer()), а при ручном включении необходимого режима нарушается алгоритм работы драйвера. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kaktus 0 30 июня, 2015 Опубликовано 30 июня, 2015 · Жалоба конфигурацию железа не меняли? У ксалинкса передача всех параметров идет через автосоздаваемый заголовочный файл. Он иногда почему то не автопересоздается, и тогда после смены конфигурации железа вообще Ад начинается. Помогают танцы с бубном с перегрузками, сбросами проекта, чисткой, с устранением и добавлением и так далее... Якобы должно помогать: правой кнопкой по BSP (Board Support Package) - Index - Rebuild. Если не помогает, я просто его стираю и создаю новый: получается, например, standalone_bsp_4 со всеми драйверами обновленного железа и актуальными адресами в xparameters.h Остается указать в свойствах программного проекта, чтобы тот ссылался на новый BSP: правой кнопкой по Hello World - Properties - Project Reference - поставить галочку напротив вновь созданного BSP. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 28 июля, 2015 Опубликовано 28 июля, 2015 · Жалоба Пытаюсь запустить проект в XSDK (2015.2) под Linux (Ubuntu 15.04). Доустановил кучу либ - проект собрался. При запуске дебага возникают проблемы: 17:51:27 ERROR : Unexpected error while launching program. java.lang.RuntimeException: Target request failed: Target is not responding (timed out). at com.xilinx.sdk.debug.core.XilinxAppLaunchConfigurationDelegate.debugApplication( XilinxAppLaunchConfigurationDelegate.java:778) at com.xilinx.sdk.debug.core.XilinxAppLaunchConfigurationDelegate.launch(XilinxAppL aunchConfigurationDelegate.java:298) at com.xilinx.sdk.debug.ui.XilinxAppLaunchDelegateWrapper.launch(XilinxAppLaunchDel egateWrapper.java:31) at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.j ava:858) at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.j ava:707) at org.eclipse.debug.internal.ui.DebugUIPlugin.buildAndLaunch(DebugUIPlugin.java:10 18) at org.eclipse.debug.internal.ui.DebugUIPlugin$8.run(DebugUIPlugin.java:1222) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 31 июля, 2015 Опубликовано 31 июля, 2015 · Жалоба Проблема была с правами пользователя. Сегодня руки дошли и ещё раз попробовал всё запустить. Vivado запускал из консоли с правами суперпользователя, SDK запускал из меню Vivado и не работало. Попробовал стартануть SDK из консоли с правами суперпользователя - всё запустилось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться