Vitaliy_ARM
-
Постов
508 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные Vitaliy_ARM
-
-
Ну уж не знаю, что там с компоновкой ему не нравится, но если просто прошить - не по JTAG, а через UART - то все работает правильно.
Аборты возникают в процессе прошивки и отладки. Если без JTAG, то проект работает как надо.
Значит файл корректный. А вы не пробовали просто поотлаживать без предварительной прошивки?
Я начал пока с этого.
Ааа. Пардон. Не увидел
.Отладка из флеш. Прошиваю процессор отдельно.В любом случае у меня такого не возникало.
-
попробуйте добавить
break main
continue
Пробовал, потом убрал. Роли не играет. А как аппаратные брейкпоинты работают.
Они во флешь прошиваются или в озу или в спец регистры?
-
При запуске высыпает кучу PREFETCH ABORT, а при остановке на точках прерывания высыпает еще и кучу DATA ABORT в придачу.
С чем может быть связано и как это победить?
Скорее всего компановка неправильная, или выравнивания нету или просто черт знает куда линкуется или еще что-нибудь.
-
Хм. Я тоже, но продвинулся чуть дальше
Постил я сюда:
http://electronix.ru/forum/index.php?showt...st&p=538405
http://electronix.ru/forum/index.php?showt...st&p=538988
Может вдвоем быстрее найдем правильный путь.
Посмотрел.
Приведу на всякий случай окно инициализации своего gdb:
Продолжаем разбираться. :rolleyes:
-
ода но все же работает это радует. :)
А я все никак не могу подружить ARM-USB-OCD с OpenOCD и LPC2378.
Пишет, что не может выполнить Halt reset. Может кто знает в чем дело?
Вот лог:
Open On-Chip Debugger (2008-06-19 19:00) svn: 717 URL: http://svn.berlios.de/svnroot/repos/openocd/trunk Info: options.c:50 configuration_output_handler(): jtag_speed: 3, 3 Info: options.c:50 configuration_output_handler(): Open On-Chip Debugger (2008-06-19 19:00) svn: 717 Info: jtag.c:1389 jtag_examine_chain(): JTAG device found: 0x4f1f0f0f (Manufacturer: 0x787, Part: 0xf1f0, Version: 0x4) Warning: embeddedice.c:185 embeddedice_build_reg_cache(): EmbeddedICE version 7 detected, EmbeddedICE handling might be broken Info: jtag.c:1389 jtag_examine_chain(): JTAG device found: 0x4f1f0f0f (Manufacturer: 0x787, Part: 0xf1f0, Version: 0x4) User: target.c:436 target_process_reset(): Timed out waiting for halt after reset Info: server.c:78 add_connection(): accepting 'gdb' connection from 0 Warning: gdb_server.c:416 gdb_get_packet_inner(): acknowledgment received, but no packet pending Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted Info: server.c:395 server_loop(): dropped 'gdb' connection Info: server.c:78 add_connection(): accepting 'gdb' connection from 0 Warning: gdb_server.c:416 gdb_get_packet_inner(): acknowledgment received, but no packet pending Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted Warning: arm7_9_common.c:1829 arm7_9_read_memory(): target not halted
Заработало но появилась другая проблема:
Добавил две строчки в конфигурационный файл OpenOCD, в общем приведу весь, дабы уменьшить проблемы тем, кто будет проходить этот же путь :rolleyes:
#daemon configuration telnet_port 4444 gdb_port 3333 # tell gdb our flash memory map # and enable flash programming gdb_memory_map enable gdb_flash_program enable #interface interface ft2232 ft2232_device_desc "Olimex OpenOCD JTAG A" ft2232_layout "olimex-jtag" ft2232_vid_pid 0x15BA 0x0003 jtag_speed 3 jtag_nsrst_delay 200 # <- заработало после добавления вот этого jtag_ntrst_delay 200 # <- #use combined on interfaces or targets that can't set TRST/SRST separately reset_config trst_and_srst srst_pulls_trst #jtag scan chain #format L IRC IRCM IDCODE (Length, IR Capture, IR Capture Mask, IDCODE) jtag_device 4 0x1 0xf 0xe #target configuration daemon_startup reset #target <type> <startup mode> #target arm7tdmi <reset mode> <chainpos> <endianness> <variant> target arm7tdmi little run_and_halt 0 arm7tdmi-s_r4 run_and_halt_time 0 30 working_area 0 0x40000000 0x4000 nobackup #flash configuration #flash bank lpc2000 <base> <size> 0 0 <target#> <variant> flash bank lpc2000 0x0 0x40000 0 0 0 lpc2000_v1 14765 calc_checksum # For more information about the configuration files, take a look at: # http://openfacts.berlios.de/index-en.phtml...n-Chip+Debugger
В данный момент не работают точки останова на функции main() и любые другие,
если перезапустить программу. Если уже запущенную программу остановить и поставить точки
останова, а потом опять запустить - они вновь начинают работать. Как победить? :cranky:
-
В новой версии IAR появилась поддержка камней этого семейства и есть один пример кода :rolleyes:
-
Помогло :)
хотел попробовать запустить отладчик \arm-elf-gdb.exe , вывалилось куча ошибок,
делал вроде как написано на yagarto.
Тоже испытываю трудности с отладчиком. Но эту победил. Просто у вас не стартует OpenOCD и все.
Разберитесь почему.
-
Опубликовано · Изменено пользователем Vitaliy_ARM · Пожаловаться
Задам еще, наверное глупый вопрос.
Может ли кто-нибудь прокомментировать строки скрипта?
SECTIONS { /* first section is .text which is used for code */ .text : { KEEP(*(.RESET)) /* Startup code from .init-section */ -- что это за статап код, это вектора прерываний? Что означает KEEP() *(.text .text.*) /* remaining code */ -- с этим понятно, память команд, сюда линкуются весь код команд по умолчанию *(.gnu.linkonce.t.*) // не известно!? *(.glue_7) // не известно! в этом пдф тоже не знают http://www.atmel.com/dyn/resources/prod_documents/atmel_tutorial_source.zip, зачем это надо *(.glue_7t) // не известно! тоже атмел не знает, зачем нужна эта строчка *(.gcc_except_table) // тоже не известно *(.rodata) /* read-only data (constants) */ -- сюда линкуются все флешь константы, строки и т.п. *(.rodata*) // -- сюда линкуются все константные указатели и указатели на строки и т.п. *(.gnu.linkonce.r.*) // не известно!? . = ALIGN(4); } > ROM }
:1111493779: :smile3046:
-
SECTIONS { . = address; .intvec : { *(.intvec) } }
Спасибо!
-
А с этими Wi-Fi модулями кто-нибудь имел дело ?
С этими нет, но предыдущие были остойные.
-
Опубликовано · Изменено пользователем Vitaliy_ARM · Пожаловаться
Как здесь разместить вектора перерывания по указанному адресу?
(аналог IAR :
place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
)
-
Это отрывок скрипта линкера. Он указывает, куда линкер будет ложить отладочную информацию в исполняемый файл.
Генерируется она компилятором, при использовании ключа -g с опциями. Например (варианты)
gcc -g main .o main.c gcc -g3 main .o main.c gcc -ggdb main .o main.c gcc -gdwarf-2 main .o main.c
Линкуется потом обычным способом (линкеру не имеет особых флагов для отладочной информации).
После этого можно спокойно отлаживать программу с помощью gdb.
Да, уже разобрался. Есть еще некоторые непонятности.
Как я понимаю OpenOCD уже научился поддерживать J-Link и еще кучу всяких Jtag. Но для этого надо ли его пересобрать? Кто-нибудь пользуется связкой Eclipse+GCC+OpenOCD+J-Link?
-
Опубликовано · Изменено пользователем Vitaliy_ARM · Пожаловаться
Генерирование отладочной информации в коде процессора - подскажите, что это такое и с чем его едят?
Где можно почитать об этом (строчки в скрипте компоновщика)?
/* Stabs debugging sections. */ .stab 0 : { *(.stab) } .stabstr 0 : { *(.stabstr) } .stab.excl 0 : { *(.stab.excl) } .stab.exclstr 0 : { *(.stab.exclstr) } .stab.index 0 : { *(.stab.index) } .stab.indexstr 0 : { *(.stab.indexstr) } .comment 0 : { *(.comment) } /* DWARF debug sections. Symbols in the DWARF debugging sections are relative to the beginning of the section so we begin them at 0. */ /* DWARF 1 */ .debug 0 : { *(.debug) } .line 0 : { *(.line) } /* GNU DWARF 1 extensions */ .debug_srcinfo 0 : { *(.debug_srcinfo) } .debug_sfnames 0 : { *(.debug_sfnames) } /* DWARF 1.1 and DWARF 2 */ .debug_aranges 0 : { *(.debug_aranges) } .debug_pubnames 0 : { *(.debug_pubnames) } /* DWARF 2 */ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } .debug_abbrev 0 : { *(.debug_abbrev) } .debug_line 0 : { *(.debug_line) } .debug_frame 0 : { *(.debug_frame) } .debug_str 0 : { *(.debug_str) } .debug_loc 0 : { *(.debug_loc) } .debug_macinfo 0 : { *(.debug_macinfo) } /* SGI/MIPS DWARF 2 extensions */ .debug_weaknames 0 : { *(.debug_weaknames) } .debug_funcnames 0 : { *(.debug_funcnames) } .debug_typenames 0 : { *(.debug_typenames) } .debug_varnames 0 : { *(.debug_varnames) }
-
C точностью до наоборот, в этом случае расположите указатель в самом начале загружаемого кода.
В моем случае уже не стоит этим заниматься, два огромных проекта написано. Нет смысла их переделывать заново.
Чревато новыми ошибками.
Как-то так. Выделяете регион памяти(CONFIG), потом складываете в него нужные сегменты (*.config)/* memory layout */
Вроде бы прояснилось. :)
-
Примерно в аналогичных случаях в фиксированном месте boot (сразу после векторов) размещаю УКАЗАТЕЛЬ на находящийся в произвольном месте блок общих данных. Boot, естественно, линкуется в конкретное место, но это единственная по любому необходимая привязка к адресам - сущности более не плодятся.
Ага, а как тогда с ай пи адресами и маками? Вместе с загрузчиком зашиваются адреса по умолчанию. Программа должна перешивать и то и другое. А загрузчик должен это использовать, так как абгрейд должен осуществляться по одним и тем же адресам.
-
Опубликовано · Изменено пользователем Vitaliy_ARM · Пожаловаться
Много полезне вместо демонстративного прощания с IAR тихо и навсегда попрощаться с дурной привычкой "размещения констант по указанному адресу во Flash". Ну а инструментарий у V5 IAR суть есть GNU-тый....В моей задаче это просто не возможно. Бутлодер + Программа имеют две константы - мак адрес и ай пи адрес, строго расположенные в указанных местах. И то и то должно иметь доступ к этим ячейкам. Прощание с "дурной привычкой" не позволить сделать программу и бутлодер независымыми :( .
-
Все больше прощаюсь с IAR.
Разбираюсь с компановщиком. Документация на него не впечатлила :07: . Есть ли у кого готовый пример скрипта размещения констант по указанному адресу во Flash LPC2xxx или другого арма?
-
То, что нужно, спасибо!
А можно конечный кусок кода увидеть
-
Самый простой путь - заключить "плюсовые" определения или #include этого файла в
#ifdef __cplusplus .... #endif
Но грамотнее, конечно, включать плюсовые заголовки только в плюсовые файлы или перевести Сишные исходники на плюсы. Или попробуйте просто переименовать Rc6.c в Rc6.cpp - может он скомпилится в плюсовом режиме.
В общем поменял расширение Rc6.c на cpp. Помогло. Этот вариант мне подходит. Спасибо!
-
Опубликовано · Изменено пользователем Vitaliy_ARM · Пожаловаться
На прикрепленной вами картинке есть вкладка Console. Откройте ее, там же будут и более подробные сообщения об ошибке.Вот консоль.
Assembling (ARM-only): crt0.S arm-elf-gcc -c -mcpu=arm7tdmi-s -I. -x assembler-with-cpp -DRAM_RUN -D__WinARM__ -D__WINARMSUBMDL_LPC2468__ -Wa,-adhlns=crt0.lst,-gdwarf-2 crt0.S -o crt0.o Compiling C: Rc6\Rc6.c arm-elf-gcc -c -mcpu=arm7tdmi-s -I. -gdwarf-2 -DRAM_RUN -D__WinARM__ -D__WINARMSUBMDL_LPC2468__ -Os -Wall -Wcast-align -Wimplicit -Wpointer-arith -Wswitch -ffunction-sections -fdata-sections -Wredundant-decls -Wreturn-type -Wshadow -Wunused -Wa,-adhlns=Rc6\Rc6.lst -ICommon/inc -Wcast-qual -MD -MP -MF .dep/Rc6.o.d -Wnested-externs -std=gnu99 -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations Rc6\Rc6.c -o Rc6\Rc6.o In file included from Rc6\/..\includes.h:30, from Rc6\Rc6.c:5: Rc6\/..\/Target\Trg.h:64: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'LPCTARGET' Rc6\/..\/Target\Trg.h:71: warning: data definition has no type or storage class Rc6\/..\/Target\Trg.h:71: warning: type defaults to 'int' in declaration of 'TARGET' Rc6\/..\/Target\Trg.h:71: warning: type defaults to 'int' in declaration of 'pTARGET' make: *** [Rc6\Rc6.o] Error 1
Вижу в нем два С-файла:SRC = Rc6\Rc6.c
SRC += Fldr\Fldr.c
Вы уверены, что Trg.h не включен (возможно косвенно) в один из этих файлов?
Подключены через один глобальный файл! Этого я не знал. Всегда делал так в одном глобальном файле прописывал все инклюды и потом его уже цеплял во всех исходниках. При этом IAR игнорировал слова C++ и выдавал ошибки, если этот класс непосредственно был использован.
А можно ли сделать и здесь сделать игнорирование?
Еще вижу у вас сообщение, что Эклипса не может найти генератор инфо. Зайдите в Project->Options->C/C++ Build->Discovery options и в поле Compiler invokation command впишите arm-elf-gcc.exe вместо gcc.exe. Увидите много полезного, в частности - в окне OutlineИсправил
P.S.Напрасно. Оно совсем с темой топика не коррелирует.
Может кто-то из модераторов отделит это обсуждение в отдельную ветку?
Согласен, вопрос разросся.
-
Судя по всему он не понял слова class. Значит, он компилирует в режиме С, а не С++. Какое расширение имеет ваш файл (должен иметь .cpp)? Покажите командную строку компилятора - может там принудительно задан режим С.
Расширение файла правильное - cpp. Где эту строчку можно посмотреть?
На всякий случай положу майкфайл.
-
Опубликовано · Изменено пользователем Vitaliy_ARM · Пожаловаться
-
Да собственно как-то голяк. Теперь думаю, стоит ли заказывать себе demo kit для анализа работы сенсора или нет.
Подключил плату к блекфину и больше пока не пробовал.
"Разобрался" с файлом, который выложил _4afc_.
Собственно те команды, помоему, погоды большой не делают.
По умолчанию камера выдает что-то - скорее всего это и есть jpeg 320x240, после нового года буду продолжать ковырять. По даташиту можно ориентироваться методом научного тыка :) , так как информации действительно маловато. Если демоплата работает корректно, то скорее всего имеет смысл запарсить I2c и делать точно также. Если не против, можем в дальнейшем обмениваться информацией.
-
Вот что я писал для SAM7 (увы, до LPC руки пока не дошли)
Ага. Заработало. По вашему коду понял, что мне нехватало Remap.
Вот код инициализации.
monitor reset monitor speed 30 monitor speed auto break main load monitor long 0xE01FC040 = 0x00000002 # MEMMAP = 2 continue
LPC2378 Bootloader
в ARM
Опубликовано · Пожаловаться
Попробуйте P2.10 запаять на землю. Потом включить и попробовать опять прошить