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

выборочной

Попытался обойтись без использования new, добавил в проект простенький класс - конструктор, деструктор и пару функций. Скомпилилось, но при попытке создать объект опять ругается на малый размер памяти. При этом размер программы занял более 100 кБ, а кода там минимум. Вот и вопрос - можно ли как-то настроить Xilinx SDK, чтоб нормально работать с с++? У Altera для Nios II всё работает надо только задать компилятору соответствующие опции.

C++ по определению "плодит" толстые программы и при этом не важно xilinx or altera. Можно поискать опции для "выборочной" линковки стандартных библиотек. все остальное "от лукавого". или переходите на с (но там тоже свои заморочки)

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


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

C++ по определению "плодит" толстые программы и при этом не важно xilinx or altera. Можно поискать опции для "выборочной" линковки стандартных библиотек. все остальное "от лукавого". или переходите на с (но там тоже свои заморочки)

Но не на столько же толстые. С Altera Nios II работал достаточно много и там с этим всё норально. Предполагаю, что и у Xilinx должен быть способ как правильно всё настроить. Только начинаю осваивать MicroBlaze и столкнулся с описанной проблемой. А с одними макросами работать как-то не очень приятно.

 

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


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

Добавил в IP Integrator ядро ten_gig_eth_mac, в BSP высветилось generic и отсутствуют какие-либо драйвера для этого ядра. Что это означает, что на него нет лицензии?

post-63539-1434531293_thumb.jpg

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


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

Очень даже помогают ключи для компилера (-ffunction-sections -fdata-sections) и линкера (-Wl,--gc-sections), нашёл в этой теме.

Размер кода уменьшился со 190 кБ до 62 кБ. Возможно есть ещё что-то?

Если переписать всё с использованием только си, то размер кода ужимается до 30 кБ.

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


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

Очень даже помогают ключи для компилера (-ffunction-sections -fdata-sections) и линкера (-Wl,--gc-sections), нашёл в этой теме.

Размер кода уменьшился со 190 кБ до 62 кБ. Возможно есть ещё что-то?

Если переписать всё с использованием только си, то размер кода ужимается до 30 кБ.

Это практически все. есть еще оптимизация по размеру/скорости типа -o2 и -s (как то так, если не путаю с другим компилятором). Если важен размер самого elf файла - то можно "отрезть" отладочную информацию.

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


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

С 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

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


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

В папке с установкой Xilinx SDK (\Xilinx\SDK\2015.1\data\embeddedsw\XilinxProcessorIPLib\drivers\) нет каких-либо исходников для 10G Ethernet MAC. Означает ли это и вышеописанный generic, что у Xilinx нет поддержки данного ядра в виде драйвера BSP? Что-то на их сайте никакой инфы по этому поводу найти не могу.

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


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

Ответили на форуме Xilinx, оказывается, никакого BSP для 10G EMAC нет.

Остаётся вопрос по настройке проекта для с++.

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


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

Ответили на форуме Xilinx, оказывается, никакого BSP для 10G EMAC нет.

Остаётся вопрос по настройке проекта для с++.

Посмотрите в map.lst (создается опциями) что там на компилилось и с линковалось. сравните с аналогичным map.lst от altera при идентичных исходниках. далее по результатам...

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


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

Посмотрите в map.lst (создается опциями) что там на компилилось и с линковалось. сравните с аналогичным map.lst от altera при идентичных исходниках. далее по результатам...

Да, спасибо, map-файл уже генерю, но пока только просмотрел, что оно подключает. Отложил этот вопрос "на потом".

 

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


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

Может кто подскажет, где у меня ошибка?

Разбираюсь с работой ядра 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) {}
}

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


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

Ошибка в том, что в использовании функции XAxiCdma_SwitchMode() нет необходимости. Текущий режим проверяется при старте CDMA (ф-ии XAxiCdma_BdRingToHw() и XAxiCdma_SimpleTransfer()), а при ручном включении необходимого режима нарушается алгоритм работы драйвера.

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


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

конфигурацию железа не меняли?

У ксалинкса передача всех параметров идет через автосоздаваемый заголовочный файл. Он иногда почему то не автопересоздается, и тогда после смены конфигурации железа вообще Ад начинается.

 

Помогают танцы с бубном с перегрузками, сбросами проекта, чисткой, с устранением и добавлением и так далее...

 

Якобы должно помогать: правой кнопкой по BSP (Board Support Package) - Index - Rebuild.

Если не помогает, я просто его стираю и создаю новый: получается, например, standalone_bsp_4 со всеми драйверами обновленного железа и актуальными адресами в xparameters.h

Остается указать в свойствах программного проекта, чтобы тот ссылался на новый BSP:

правой кнопкой по Hello World - Properties - Project Reference - поставить галочку напротив вновь созданного BSP.

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


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

Пытаюсь запустить проект в 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)

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


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

Проблема была с правами пользователя. Сегодня руки дошли и ещё раз попробовал всё запустить. Vivado запускал из консоли с правами суперпользователя, SDK запускал из меню Vivado и не работало.

Попробовал стартануть SDK из консоли с правами суперпользователя - всё запустилось.

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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