doom13 0 11 июня, 2015 Опубликовано 11 июня, 2015 · Жалоба Приветствую. В чём может быть проблема для системы, приведённой на рисунке (сообщение #15), код нормально работает #include "xparameters.h" #include "xgpio.h" #include "xtrafgen.h" #include <stdio.h> int main() { XGpio gpio_0, gpio_1; XGpio *gpio_0_ptr = &gpio_0; XGpio *gpio_1_ptr = &gpio_1; XGpio_Initialize(gpio_0_ptr, XPAR_GPIO_0_DEVICE_ID); XGpio_Initialize(gpio_1_ptr, XPAR_GPIO_1_DEVICE_ID); while(1) { XGpio_DiscreteWrite(gpio_1_ptr, 1, 1); XGpio_DiscreteWrite(gpio_0_ptr, 1, 1); XGpio_DiscreteWrite(gpio_0_ptr, 1, 0); XGpio_DiscreteWrite(gpio_1_ptr, 1, 0); } } С кодом #include "xparameters.h" #include "xgpio.h" #include "xtrafgen.h" #include <stdio.h> int main() { //unsigned int addr = 0; XTrafGen tgen; XTrafGen_Config tgen_config; XTrafGen_Config *tgen_config_ptr; tgen_config_ptr = XTrafGen_LookupConfig(XPAR_XTRAFGEN_0_DEVICE_ID); //tgen_config_ptr = (XTrafGen_Config *) addr; XTrafGen_CfgInitialize(&tgen, &tgen_config, XPAR_AXI_TRAFFIC_GEN_0_BASEADDR); while(1) {} } есть какие-то проблемы. Даже переменные создаются с ошибкой (адреса созданной переменной 0xFFFF1234, вне доступного диапазона адресов). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Corvus 1 11 июня, 2015 Опубликовано 11 июня, 2015 · Жалоба Проверьте конфигурацию линковщика, что и куда размещается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 11 июня, 2015 Опубликовано 11 июня, 2015 · Жалоба конфигурацию железа не меняли? У ксалинкса передача всех параметров идет через автосоздаваемый заголовочный файл. Он иногда почему то не автопересоздается, и тогда после смены конфигурации железа вообще Ад начинается. Помогают танцы с бубном с перегрузками, сбросами проекта, чисткой, с устранением и добавлением и так далее... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 12 июня, 2015 Опубликовано 12 июня, 2015 · Жалоба В системе сначала были только GPIO, потом добавил Traffic Generator и сделал экспорт железа. После пересборки BSP в xparameters.h дефайны для Traffic Generator присутствуют. Ещё при добавлении в систему (IP Integrator) ядра Traffic Generator и выполнении Validate Design выбрасывает следующие ошибки [iP_Flow 19-3317] Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT H' method. can't use non-numeric string as operand of "/" [iP_Flow 19-3317] Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT H' method. can't use non-numeric string as operand of "/" [iP_Flow 19-3317] Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT H' method. can't use non-numeric string as operand of "/" [iP_Flow 19-3317] Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT H' method. can't use non-numeric string as operand of "/" [iP_Flow 19-3439] Failed to restore IP '/axi_traffic_gen_0' customization to its previous valid configuration. [bD 41-1273] Error running propagate TCL procedure: ERROR: [Common 17-39] 'set_property' failed due to earlier errors. ::xilinx.com_ip_axi_traffic_gen_2.0::propagate Line 15 [iP_Flow 19-3317] Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT H' method. can't use non-numeric string as operand of "/" [iP_Flow 19-3317] Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT H' method. can't use non-numeric string as operand of "/" [iP_Flow 19-3439] Failed to restore IP '/axi_traffic_gen_0' customization to its previous valid configuration. [iP_Flow 19-3317] Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT H' method. can't use non-numeric string as operand of "/" [iP_Flow 19-3317] Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT H' method. can't use non-numeric string as operand of "/" [iP_Flow 19-3317] Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT H' method. can't use non-numeric string as operand of "/" [iP_Flow 19-3317] Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT H' method. can't use non-numeric string as operand of "/" [iP_Flow 19-3439] Failed to restore IP '/axi_traffic_gen_0' customization to its previous valid configuration. [bD 41-1273] Error running propagate TCL procedure: ERROR: [Common 17-39] 'set_property' failed due to earlier errors. ::xilinx.com_ip_axi_traffic_gen_2.0::propagate Line 15 [iP_Flow 19-3317] Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT H' method. can't use non-numeric string as operand of "/" [iP_Flow 19-3317] Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT H' method. can't use non-numeric string as operand of "/" [iP_Flow 19-3439] Failed to restore IP '/axi_traffic_gen_0' customization to its previous valid configuration. [iP_Flow 19-3317] Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT H' method. can't use non-numeric string as operand of "/" [iP_Flow 19-3317] Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT H' method. can't use non-numeric string as operand of "/" [iP_Flow 19-3317] Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT H' method. can't use non-numeric string as operand of "/" [iP_Flow 19-3317] Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT H' method. can't use non-numeric string as operand of "/" [iP_Flow 19-3439] Failed to restore IP '/axi_traffic_gen_0' customization to its previous valid configuration. [bD 41-1273] Error running propagate TCL procedure: ERROR: [Common 17-39] 'set_property' failed due to earlier errors. ::xilinx.com_ip_axi_traffic_gen_2.0::propagate Line 15 [iP_Flow 19-3317] Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT H' method. can't use non-numeric string as operand of "/" [iP_Flow 19-3317] Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT H' method. can't use non-numeric string as operand of "/" [iP_Flow 19-3439] Failed to restore IP '/axi_traffic_gen_0' customization to its previous valid configuration. [bD 41-241] Message from IP propagation TCL of /axi_traffic_gen_0: set_property error: Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT H' method. can't use non-numeric string as operand of "/" Customization errors found on '/axi_traffic_gen_0'. Restoring to previous valid configuration. Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT H' method. can't use non-numeric string as operand of "/" Customization errors found during restoring IP '/axi_traffic_gen_0' to previous valid configuration. Failed to restore IP '/axi_traffic_gen_0' customization to its previous valid configuration. Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT H' method. can't use non-numeric string as operand of "/" Customization errors found on '/axi_traffic_gen_0'. Restoring to previous valid configuration. Tcl Error found in '::ipgui_microblaze_axi_traffic_gen_0_1::validate_PARAM_VALUE.MASTER_AXI_WIDT H' method. can't use non-numeric string as operand of "/" Customization errors found during restoring IP '/axi_traffic_gen_0' to previous valid configuration. Failed to restore IP '/axi_traffic_gen_0' customization to its previous valid configuration. . После перезапуска Vivado данных ошибок уже нет и проверка системы проходит нормально. Может ли это быть причиной вышеописанной проблемы? Если точку останова поставить внутри XTrafGen_Config *XTrafGen_LookupConfig(u32 DeviceId) { extern XTrafGen_Config XTrafGen_ConfigTable[]; XTrafGen_Config *CfgPtr; u32 Index; CfgPtr = NULL; for (Index = 0; Index < XPAR_XTRAFGEN_NUM_INSTANCES; Index++) { if (XTrafGen_ConfigTable[Index].DeviceId == DeviceId) { CfgPtr = &XTrafGen_ConfigTable[Index]; break; } } return CfgPtr; } , то хочет вернуть даже правильные значения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 12 июня, 2015 Опубликовано 12 июня, 2015 · Жалоба После перезапуска Vivado данных ошибок уже нет и проверка системы проходит нормально. Может ли это быть причиной вышеописанной проблемы? как я понял систему ксалинкса, в xparameters.h все дефайны приведены для справки чтобы знать как их вызывать. Их можно менять, но это не меняет значения получаемые в программе, реальные значения выбираются из файла библиотеки, который генериться в железном проекте. Момент генережки я не очень четко понял, но именно он иногда расходиться с xparameters.h и начинается ад. Я один раз полдня тупил над ошибкой которая была вызвана не полным экспортом проекта. Для SDK выработал такой алгоритм в случае изменения железа, пересборка и экспорт в DSK. В SDK удаляю все софтварные проекты (не удаляя их с диска) чищу проект (там то ли purge то ли cleanup уже не помню) добавляю все софтварные проекты опять все чищу и запускаю ребилд второй способ, если он покажется быстрее когда происходит что-то совсем непонятное, через свойство железное проекта меняю что-то типа добавляю lwip чищу проект перебилдиваю, и опять убираю. Ну то есть как-то заставляю заново создать этот дурацкий либ. Хотя один раз вроде этот способ не сработал, и я пошел по долгому пути выкидывания и вставления проектов. В общем если все сделать правильно с 1 раза проблем нет, а если че забыли и потом добавили - тухляк, танцы с бубном, легче уже взять и сделать новый проект... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 12 июня, 2015 Опубликовано 12 июня, 2015 · Жалоба Спасибо, заработало. Зачем для GPIO автоматом резервируется 64K адресное пространство, там ведь всего пара регистров? Почему в Address Editor недоступен пункт меню Auto Assign Address? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 12 июня, 2015 Опубликовано 12 июня, 2015 · Жалоба Наверное потому что по умолчанию выбрали 16 битную шину адреса для периферии, а старшие адреса как чипселект модуля используют... наверное так... просто единый шаблон независимо от того сколько регистров в модуле. уменьшение адресного пространство с разделом его на несколько модулей, - это доп дешифраторы, наверное... но это же условность, какая разница какие цифры назначить. Шина все равно столько бит сколько есть, и адресное пространство общее покрыто, а так думать удобнее, 16 младших бит - адрес внутри модуля, старшие - адрес модуля... память физические не жрет, а лишние проводки оптимизируются Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 12 июня, 2015 Опубликовано 12 июня, 2015 · Жалоба У Altera Nios II для BSP есть опции enable_small_c_library и enable_reduced_device_drivers, чтобы уменьшить размер памяти занимаемый программой, есть ли что-то аналогичное для MicroBlaze? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 12 июня, 2015 Опубликовано 12 июня, 2015 · Жалоба у них есть подмена общих функций своими поменьше. Вместо printf используйте xil_printf. И так далее, это не вызовет подключения stdliba и проект будет маленький... Все драйверы и прочее будут добавляться по мере использования, то есть лишнего в код не войдет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 12 июня, 2015 Опубликовано 12 июня, 2015 · Жалоба При сборке выбрасывает ошибку ../../htg_v7_g3_bsp/microblaze_0/include/xtrafgen.h:982:31: error: base operand of '->' has non-pointer type 'XTrafGen'. В xtrafgen.h макрос на который ругается отличается от всех остальных отсутствием скобок, пытаюсь поправить, но компилер затирает мои поправки. Исправил, надо править xtrafgen.h в \Xilinx\SDK\2015.1\data\embeddedsw\XilinxProcessorIPLib\drivers\trafgen_v3_0\src\. Т.е. оно при сборке каждый раз меняет файлы BSP из своих либ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 12 июня, 2015 Опубликовано 12 июня, 2015 · Жалоба ну это можно победить #include "some_file_name.h" #inclide <some_file_name.h> но там действительно как-то чудно все устроено%) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 15 июня, 2015 Опубликовано 15 июня, 2015 · Жалоба Зачем в BSP .h-файлы дублируются? Это какой-то косяк или так было задумано? Заметил, когда при переходе на дефайн спросило в какой файл перейти. Один раз в папке с драйверами на соответствующее ядро (microblaze_0\libsrc\trafgen_v3_2\src\xtrafgen.h), второй - в папке include (microblaze_0\include\xtrafgen.h)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 16 июня, 2015 Опубликовано 16 июня, 2015 · Жалоба Хотел заюзать оператор new, но генерит какой-то страшный размер кода. Можно его как-то использовать для MicroBlaze? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sergey_Bekrenyov 0 16 июня, 2015 Опубликовано 16 июня, 2015 · Жалоба Хотел заюзать оператор new, но генерит какой-то страшный размер кода. Можно его как-то использовать для MicroBlaze? new не пользовал, есть версия xil_malloc - аналогично подменяет malloc upd: http://forums.xilinx.com/t5/Embedded-Devel...rks/td-p/586394 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 16 июня, 2015 Опубликовано 16 июня, 2015 · Жалоба Попытался обойтись без использования new, добавил в проект простенький класс - конструктор, деструктор и пару функций. Скомпилилось, но при попытке создать объект опять ругается на малый размер памяти. При этом размер программы занял более 100 кБ, а кода там минимум. Вот и вопрос - можно ли как-то настроить Xilinx SDK, чтоб нормально работать с с++? У Altera для Nios II всё работает надо только задать компилятору соответствующие опции. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться