|
периодически не получается в SDK сделать RUN AS для Release конфигурации, выдаёт ошибку, ошибки частенько разные |
|
|
|
Dec 16 2014, 05:42
|

Гуру
     
Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271

|
Здравствуйте. Периодически не получается в SDK сделать RUN AS для Release конфигурации, выдаёт ошибку и не запускается. При том это начинается на пустом месте, ни с того ни с сего. Уже 2й раз заловил. Потом мучился-мучился, как-то заработало. Работало-работало, потом перестала. Чото делал-делал, один раз заработало, потом опять не работало... При этом DEBUG AS работает нормально. Программа у меня целиком в DDR, и данные, и код. Вот линкер скрипт: CODE
/*******************************************************************/ /* */ /* This file is automatically generated by linker script generator.*/ /* */ /* Version: Xilinx EDK 14.7 EDK_P.20131013 */ /* */ /* Copyright © 2010 Xilinx, Inc. All rights reserved. */ /* */ /* Description : MicroBlaze Linker Script */ /* */ /*******************************************************************/
_STACK_SIZE = DEFINED(_STACK_SIZE) ? _STACK_SIZE : 0x989680; _HEAP_SIZE = DEFINED(_HEAP_SIZE) ? _HEAP_SIZE : 0x5F5E100;
/* Define Memories in the system */
MEMORY { microblaze_0_i_bram_ctrl_microblaze_0_d_bram_ctrl : ORIGIN = 0x00000050, LENGTH = 0x00001FB0 mcb_ddr3_S0_AXI_BASEADDR : ORIGIN = 0xA8000000, LENGTH = 0x08000000 }
/* Specify the default entry point to the program */
ENTRY(_start)
/* Define the sections, and where they are mapped in memory */
SECTIONS { .vectors.reset 0x00000000 : { KEEP (*(.vectors.reset)) }
.vectors.sw_exception 0x00000008 : { KEEP (*(.vectors.sw_exception)) }
.vectors.interrupt 0x00000010 : { KEEP (*(.vectors.interrupt)) }
.vectors.hw_exception 0x00000020 : { KEEP (*(.vectors.hw_exception)) }
.text : { *(.text) *(.text.*) *(.gnu.linkonce.t.*) } > mcb_ddr3_S0_AXI_BASEADDR
.init : { KEEP (*(.init)) } > mcb_ddr3_S0_AXI_BASEADDR
.fini : { KEEP (*(.fini)) } > mcb_ddr3_S0_AXI_BASEADDR
.ctors : { __CTOR_LIST__ = .; ___CTORS_LIST___ = .; KEEP (*crtbegin.o(.ctors)) KEEP (*(EXCLUDE_FILE(*crtend.o) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) __CTOR_END__ = .; ___CTORS_END___ = .; } > mcb_ddr3_S0_AXI_BASEADDR
.dtors : { __DTOR_LIST__ = .; ___DTORS_LIST___ = .; KEEP (*crtbegin.o(.dtors)) KEEP (*(EXCLUDE_FILE(*crtend.o) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) PROVIDE(__DTOR_END__ = .); PROVIDE(___DTORS_END___ = .); } > mcb_ddr3_S0_AXI_BASEADDR
.rodata : { __rodata_start = .; *(.rodata) *(.rodata.*) *(.gnu.linkonce.r.*) __rodata_end = .; } > mcb_ddr3_S0_AXI_BASEADDR
.sdata2 : { . = ALIGN(8); __sdata2_start = .; *(.sdata2) *(.sdata2.*) *(.gnu.linkonce.s2.*) . = ALIGN(8); __sdata2_end = .; } > mcb_ddr3_S0_AXI_BASEADDR
.sbss2 : { __sbss2_start = .; *(.sbss2) *(.sbss2.*) *(.gnu.linkonce.sb2.*) __sbss2_end = .; } > mcb_ddr3_S0_AXI_BASEADDR
.data : { . = ALIGN(4); __data_start = .; *(.data) *(.data.*) *(.gnu.linkonce.d.*) __data_end = .; } > mcb_ddr3_S0_AXI_BASEADDR
.got : { *(.got) } > mcb_ddr3_S0_AXI_BASEADDR
.got1 : { *(.got1) } > mcb_ddr3_S0_AXI_BASEADDR
.got2 : { *(.got2) } > mcb_ddr3_S0_AXI_BASEADDR
.eh_frame : { *(.eh_frame) } > mcb_ddr3_S0_AXI_BASEADDR
.jcr : { *(.jcr) } > mcb_ddr3_S0_AXI_BASEADDR
.gcc_except_table : { *(.gcc_except_table) } > mcb_ddr3_S0_AXI_BASEADDR
.sdata : { . = ALIGN(8); __sdata_start = .; *(.sdata) *(.sdata.*) *(.gnu.linkonce.s.*) __sdata_end = .; } > mcb_ddr3_S0_AXI_BASEADDR
.sbss (NOLOAD) : { . = ALIGN(4); __sbss_start = .; *(.sbss) *(.sbss.*) *(.gnu.linkonce.sb.*) . = ALIGN(8); __sbss_end = .; } > mcb_ddr3_S0_AXI_BASEADDR
.tdata : { __tdata_start = .; *(.tdata) *(.tdata.*) *(.gnu.linkonce.td.*) __tdata_end = .; } > mcb_ddr3_S0_AXI_BASEADDR
.tbss : { __tbss_start = .; *(.tbss) *(.tbss.*) *(.gnu.linkonce.tb.*) __tbss_end = .; } > mcb_ddr3_S0_AXI_BASEADDR
.bss (NOLOAD) : { . = ALIGN(4); __bss_start = .; *(.bss) *(.bss.*) *(.gnu.linkonce.b.*) *(COMMON) . = ALIGN(4); __bss_end = .; } > mcb_ddr3_S0_AXI_BASEADDR
_SDA_BASE_ = __sdata_start + ((__sbss_end - __sdata_start) / 2 );
_SDA2_BASE_ = __sdata2_start + ((__sbss2_end - __sdata2_start) / 2 );
/* Generate Stack and Heap definitions */
.heap (NOLOAD) : { . = ALIGN(8); _heap = .; _heap_start = .; . += _HEAP_SIZE; _heap_end = .; } > mcb_ddr3_S0_AXI_BASEADDR
.stack (NOLOAD) : { _stack_end = .; . += _STACK_SIZE; . = ALIGN(8); _stack = .; __stack = _stack; } > mcb_ddr3_S0_AXI_BASEADDR
_end = .; }
Вот тут кое-какой ответ есть: http://www.xilinx.com/support/answers/45834.htmlНо мне такой ответ не подходит, т.к. у меня это не всегда не работает, а периодами. И я не хочу, как там советуют, использовать Debug As, мне надо Run As, т.к. конфигурация не Debug, а Release, и инструмент запуска должен быть соответствующий. Я не уверен, но предполагаю, что неправильно конфигурацию Release запускать через Debug As, т.к. может что-то не так работать или быстродействие будет ниже (мне крайне важно быстродействие при обмене по DDR, заметил, что оно хуже для конфигурации Debug и запуска через Debug As примерно в 2 раза). Если я неправ, то поправьте, пожалуйста. Я новичок во встраиваемых системах, поэтому вполне допускаю, что я просто "не умею их готовить". Заодно вопрос почти по теме (возможно ещё и в этом загвоздка): когда я загружаю прошивку, я могу указать бинарник либо system.bit, либо download.bit. И *.bmm файл могу указывать, а могу и нет. Я так понял, что в *.bmm лежит дамп того, что требуется залить в блочную память. Если у меня все сегменты расположены в DDR, то и *.bmm мне вообще не нужен? Как вообще здесь правильно надо какие файлы подставлять?
--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
|
|
|
|
|
 |
Ответов
|
Dec 16 2014, 17:48
|
Местный
  
Группа: Свой
Сообщений: 210
Регистрация: 4-06-08
Из: Москва
Пользователь №: 38 056

|
Цитата(Krys @ Dec 16 2014, 08:42)  Здравствуйте. Периодически не получается в SDK сделать RUN AS для Release конфигурации, выдаёт ошибку и не запускается. При том это начинается на пустом месте, ни с того ни с сего. Уже 2й раз заловил. Потом мучился-мучился, как-то заработало. Работало-работало, потом перестала. Чото делал-делал, один раз заработало, потом опять не работало... При этом DEBUG AS работает нормально. Программа у меня целиком в DDR, и данные, и код. Вот линкер скрипт: Какая у Вас версия EDK/SDK? Цитата(Krys @ Dec 16 2014, 08:42)  Заодно вопрос почти по теме (возможно ещё и в этом загвоздка): когда я загружаю прошивку, я могу указать бинарник либо system.bit, либо download.bit. И *.bmm файл могу указывать, а могу и нет. Я так понял, что в *.bmm лежит дамп того, что требуется залить в блочную память. Если у меня все сегменты расположены в DDR, то и *.bmm мне вообще не нужен? Как вообще здесь правильно надо какие файлы подставлять? Если Вы исполняете программу из DDR, и при этом загружаете туда программу через отладчик c помощью SDK, то BMM-файл не нужен. Также в этом случае не имеет значения, какую Вы будете использовать конфигурацию - system.bit или download.bit. Цитата Я так понял, что в *.bmm лежит дамп того, что требуется залить в блочную память. Нет, это не дамп. Это адреса BRAМ-блоков, которые выделены для microBlaze. Файл system_bd.bmm нужен утилите data2mem, чтобы сгенерировать download.bit. Т.е. download.bit <= system.bit + .elf + system_bd.bmm Цитата Чото делал-делал, один раз заработало, потом опять не работало... Когда у меня стояла 14.2, то все время вот так вот глючило, особенно если выключить плату при включенном отладчике. Приходилось все перезагружать, а также заходить в диспетчер задач и выкидывать javaw.exe из памяти. В 14.7 этих глюков поубавилось.
|
|
|
|
|
Dec 17 2014, 03:34
|

Гуру
     
Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271

|
aabmail, спасибо за разъяснения. У меня ISE 14.7 и все инструменты из этой версии. Цитата(aabmail @ Dec 16 2014, 23:48)  Если Вы исполняете программу из DDR, и при этом загружаете туда программу через отладчик c помощью SDK, то BMM-файл не нужен. Также в этом случае не имеет значения, какую Вы будете использовать конфигурацию - system.bit или download.bit. Для такого условия понятно. Вы могли бы ещё разъяснить, при каких условиях используется download.bit? Только когда программа не загружается через отладчик, а содержится в самой прошивке? Цитата(aabmail @ Dec 16 2014, 23:48)  Нет, это не дамп. Это адреса BRAМ-блоков, которые выделены для microBlaze. Файл system_bd.bmm нужен утилите data2mem, чтобы сгенерировать download.bit. Т.е. download.bit <= system.bit + .elf + system_bd.bmm Прошёлся поиском по проекту, у меня файлов *.bmm аж 4: Код planahead\fft_sp605\fft_sp605.runs\impl_1\module_1_stub.bmm planahead\fft_sp605\fft_sp605.runs\impl_1\module_1_stub_bd.bmm planahead\fft_sp605\fft_sp605.srcs\sources_1\edk\module_1\implementation\module_1.bmm planahead\fft_sp605\fft_sp605.srcs\sources_1\edk\module_1\implementation\module_1_stub.bmm Начал путаться, какие файлы являются исходниками, а какие результатами? При том есть просто module_1_stub, а есть module_1_stub_bd. Вы не знаете, что из каких образуется? При том в папке .srcs лежат такие же файлы, как и в .runs, но меньшего размера. Я посмотрел по размеру, получается, что в SDK_EXPORT попадает файл из .runs. Какая тут логика и взаимосвязь, не в курсе? (Вопрос отчасти связан с тем, что я пытаюсь найти набор файлов, достаточных для хранения в репозитории, из которых потом можно развернуть весь проект). Цитата(aabmail @ Dec 16 2014, 23:48)  Когда у меня стояла 14.2, то все время вот так вот глючило, особенно если выключить плату при включенном отладчике. Приходилось все перезагружать, а также заходить в диспетчер задач и выкидывать javaw.exe из памяти. В 14.7 этих глюков поубавилось. Не помогло...
--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
|
|
|
|
Сообщений в этой теме
Krys периодически не получается в SDK сделать RUN AS для Release конфигурации, выдаёт ошибку Dec 16 2014, 05:42 Krys Пока пересоздал проект, вроде помогло... Dec 16 2014, 08:21 Krys Пока что-то делал, опять перестала запускаться, се... Dec 16 2014, 11:02 Krys На этот раз помогло перезагрузить компьютер, запус... Dec 17 2014, 06:35 Krys Нашёл ещё парочку подсказок:
http://forums.xilinx.... Dec 17 2014, 10:01 aabmail Если программа в Вашем случае будет исполняться из... Dec 17 2014, 10:32 Krys Большое спасибо, так гораздо понятнее. Но есть ещё... Dec 18 2014, 03:38  aabmail Цитата(Krys @ Dec 18 2014, 06:38) Как я п... Dec 18 2014, 18:34 Krys Ага, спасибо, надо было мне лучше сразу спросить, ... Dec 19 2014, 03:18 Krys Я похоже разобрался в своей проблеме с запуском из... Dec 29 2014, 15:01
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|