Vitaliy_ARM 0 4 февраля, 2009 Опубликовано 4 февраля, 2009 · Жалоба Хм. Я тоже, но продвинулся чуть дальше Постил я сюда: http://electronix.ru/forum/index.php?showt...st&p=538405 http://electronix.ru/forum/index.php?showt...st&p=538988 Может вдвоем быстрее найдем правильный путь. Посмотрел. Приведу на всякий случай окно инициализации своего gdb: Продолжаем разбираться. :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergeyVas 0 4 февраля, 2009 Опубликовано 4 февраля, 2009 · Жалоба Посмотрел. Приведу на всякий случай окно инициализации своего gdb: Продолжаем разбираться. :rolleyes: попробуйте добавить break main continue Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vitaliy_ARM 0 4 февраля, 2009 Опубликовано 4 февраля, 2009 · Жалоба попробуйте добавить break main continue Пробовал, потом убрал. Роли не играет. А как аппаратные брейкпоинты работают. Они во флешь прошиваются или в озу или в спец регистры? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
msalov 0 4 февраля, 2009 Опубликовано 4 февраля, 2009 · Жалоба Еще есть одна непонятная ситуация, может что подскажите,из за чего может быть такое: если запускаю программу из отладчика все работает, а если отлючаю wiggler, сброс жму, программа не стартует, хотя в флэш программа записана, пробовал считать hjtag. Возможно это связано с тем, что вы используете программные точки останова. Попробуйте аппаратные. Для этого замените monitor arm7_9 sw_bkpts enable на monitor arm7_9 force_hw_bkpts enable Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergeyVas 0 4 февраля, 2009 Опубликовано 4 февраля, 2009 · Жалоба Возможно это связано с тем, что вы используете программные точки останова. Попробуйте аппаратные. Для этого заменитеmonitor arm7_9 sw_bkpts enable на monitor arm7_9 force_hw_bkpts enable Пробовал и аппаратные и программные, но все равно та же ситуация, виглером запускается и останавливается, после отключения включения питания программа не стартует. вот окне инициализации : target remote localhost:2001 monitor reset monitor sleep 500 monitor poll monitor soft_reset_halt monitor arm7_9 force_hw_bkpts enable #monitor arm7_9 sw_bkpts enable # WDT_MR, disable watchdog monitor mww 0xFFFFFD44 0x00008000 # RSTC_MR, enable user reset monitor mww 0xfffffd08 0xa5000001 # CKGR_MOR monitor mww 0xFFFFFC20 0x00000601 monitor sleep 10 # CKGR_PLLR monitor mww 0xFFFFFC2C 0x00481c0e monitor sleep 10 # PMC_MCKR monitor mww 0xFFFFFC30 0x00000007 monitor sleep 10 # PMC_IER monitor mww 0xFFFFFF60 0x00480100 monitor sleep 100 # needed for gdb 6.8 and higher set mem inaccessible-by-default off load break main continue Вот файл мап, может здесь будет видно что нибудь подозрительное: Memory Configuration Name Origin Length Attributes rom 0x00100000 0x00040000 ram 0x00200000 0x00010000 *default* 0x00000000 0xffffffff Linker script and memory map LOAD ./src/crt.o LOAD ./src/main.o START GROUP LOAD c:/program files/yagarto/bin/../lib/gcc/arm-elf/4.3.2\libgcc.a LOAD c:/program files/yagarto/bin/../lib/gcc/arm-elf/4.3.2/../../../../arm-elf/lib\libc.a END GROUP 0x00000100 FIQ_STACK_SIZE = 0x100 0x00000100 IRQ_STACK_SIZE = 0x100 0x00000100 ABT_STACK_SIZE = 0x100 0x00000100 UND_STACK_SIZE = 0x100 0x00000100 SVC_STACK_SIZE = 0x100 0x00000400 USE_STACK_SIZE = 0x400 .text 0x00100000 0x214 *(.vectors) .vectors 0x00100000 0x40 ./src/crt.o 0x00100040 . = ALIGN (0x4) *(.init) .init 0x00100040 0xf8 ./src/crt.o 0x001000f4 FIQHandler 0x001000e8 PAbortHandler 0x00100040 ResetHandler 0x001000ec DAbortHandler 0x001000f0 IRQHandler 0x001000e0 UndefHandler 0x00100138 . = ALIGN (0x4) *(.text) .text 0x00100138 0x0 ./src/crt.o .text 0x00100138 0xdc ./src/main.o 0x00100138 main 0x001001b4 inicializaciya 0x00100214 . = ALIGN (0x4) *(.rodata) 0x00100214 . = ALIGN (0x4) *(.rodata*) 0x00100214 . = ALIGN (0x4) *(.glue_7t) .glue_7t 0x00100214 0x0 ./src/crt.o .glue_7t 0x00100214 0x0 ./src/main.o 0x00100214 . = ALIGN (0x4) *(.glue_7) .glue_7 0x00100214 0x0 ./src/crt.o .glue_7 0x00100214 0x0 ./src/main.o 0x00100214 . = ALIGN (0x4) 0x00100214 etext = . .vfp11_veneer 0x00000000 0x0 .vfp11_veneer 0x00000000 0x0 ./src/crt.o .vfp11_veneer 0x00000000 0x0 ./src/main.o .data 0x00200000 0x4 0x00200000 PROVIDE (__data_start, .) *(.data) .data 0x00200000 0x0 ./src/crt.o .data 0x00200000 0x4 ./src/main.o 0x00200000 pPIO 0x00200004 . = ALIGN (0x4) 0x00200004 edata = . 0x00200004 _edata = . 0x00200004 PROVIDE (__data_end, .) .bss 0x00200004 0x9fc 0x00200004 PROVIDE (__bss_start, .) *(.bss) .bss 0x00200004 0x0 ./src/crt.o .bss 0x00200004 0x0 ./src/main.o *(COMMON) 0x00200004 . = ALIGN (0x4) 0x00200004 PROVIDE (__bss_end, .) 0x00200100 . = ALIGN (0x100) *fill* 0x00200004 0xfc 00 0x00200100 PROVIDE (__stack_start, .) 0x00200100 PROVIDE (__stack_fiq_start, .) 0x00200200 . = (. + FIQ_STACK_SIZE) *fill* 0x00200100 0x100 00 0x00200200 . = ALIGN (0x4) 0x00200200 PROVIDE (__stack_fiq_end, .) 0x00200200 PROVIDE (__stack_irq_start, .) 0x00200300 . = (. + IRQ_STACK_SIZE) *fill* 0x00200200 0x100 00 0x00200300 . = ALIGN (0x4) 0x00200300 PROVIDE (__stack_irq_end, .) 0x00200300 PROVIDE (__stack_abt_start, .) 0x00200400 . = (. + ABT_STACK_SIZE) *fill* 0x00200300 0x100 00 0x00200400 . = ALIGN (0x4) 0x00200400 PROVIDE (__stack_abt_end, .) 0x00200400 PROVIDE (__stack_und_start, .) 0x00200500 . = (. + UND_STACK_SIZE) *fill* 0x00200400 0x100 00 0x00200500 . = ALIGN (0x4) 0x00200500 PROVIDE (__stack_und_end, .) 0x00200500 PROVIDE (__stack_svc_start, .) 0x00200600 . = (. + SVC_STACK_SIZE) *fill* 0x00200500 0x100 00 0x00200600 . = ALIGN (0x4) 0x00200600 PROVIDE (__stack_svc_end, .) 0x00200600 PROVIDE (__stack_use_start, .) 0x00200a00 . = (. + USE_STACK_SIZE) *fill* 0x00200600 0x400 00 0x00200a00 . = ALIGN (0x4) 0x00200a00 PROVIDE (__stack_use_end, .) 0x00200a00 PROVIDE (__stack_end, .) 0x00200a00 PROVIDE (__heap_start, .) OUTPUT(at91sam7s256_v1_rom.elf elf32-littlearm) .ARM.attributes 0x00000000 0x10 .ARM.attributes 0x00000000 0x10 ./src/crt.o .ARM.attributes 0x00000010 0x10 ./src/main.o .debug_line 0x00000000 0xea .debug_line 0x00000000 0x7e ./src/crt.o .debug_line 0x0000007e 0x6c ./src/main.o .debug_info 0x00000000 0x508 .debug_info 0x00000000 0x67 ./src/crt.o .debug_info 0x00000067 0x4a1 ./src/main.o .debug_abbrev 0x00000000 0xed .debug_abbrev 0x00000000 0x12 ./src/crt.o .debug_abbrev 0x00000012 0xdb ./src/main.o .debug_aranges 0x00000000 0x48 .debug_aranges 0x00000000 0x28 ./src/crt.o .debug_aranges 0x00000028 0x20 ./src/main.o .debug_ranges 0x00000000 0x20 .debug_ranges 0x00000000 0x20 ./src/crt.o .debug_frame 0x00000000 0x38 .debug_frame 0x00000000 0x38 ./src/main.o .debug_loc 0x00000000 0x2b .debug_loc 0x00000000 0x2b ./src/main.o .debug_pubnames 0x00000000 0x37 .debug_pubnames 0x00000000 0x37 ./src/main.o .debug_str 0x00000000 0x281 .debug_str 0x00000000 0x281 ./src/main.o 0x29d (size before relaxing) .comment 0x00000000 0x12 .comment 0x00000000 0x12 ./src/main.o Cross Reference Table Symbol File DAbortHandler ./src/crt.o FIQHandler ./src/crt.o IRQHandler ./src/crt.o PAbortHandler ./src/crt.o ResetHandler ./src/crt.o UndefHandler ./src/crt.o __bss_end ./src/crt.o __bss_start ./src/crt.o __stack_abt_end ./src/crt.o __stack_fiq_end ./src/crt.o __stack_irq_end ./src/crt.o __stack_svc_end ./src/crt.o __stack_und_end ./src/crt.o __stack_use_end ./src/crt.o inicializaciya ./src/main.o main ./src/main.o ./src/crt.o pPIO ./src/main.o Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergeyVas 0 4 февраля, 2009 Опубликовано 4 февраля, 2009 · Жалоба компиляция линкование и ассемблирование проходит без ошибок и предупреждений, программа записывается, прекрасно работает с отладчика и по шагам и в без конечном цикле. Но как отсоединяю вигглер, программа еще работает можно сброс нажать пере запустится, Если отключаю питание и заново включаю ужу не запускается. Сначала думал что программа записывается только в озу, попробовал все стер Hjtag считал, посмотрел чисто, запустил отладчик,программа записалась, запустил по шагам все работает, опять запустил hjtag считал ,флэш уже не чистая с программой, где еще копать. ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amw 0 4 февраля, 2009 Опубликовано 4 февраля, 2009 · Жалоба Посмотрел. Приведу на всякий случай окно инициализации своего gdb: Продолжаем разбираться. :rolleyes: Добавление команды monitor arm7_9 force_hw_bkpts enable приводит к ошибке invalid command name "arm7_9_force_hw_bkpts" Самое странное то, что из командной строки gdb запись/чтение регистров и ОЗУ работает. (gdb) monitor mww 0xe01fc040 2 (gdb) monitor mdw 0xe01fc040 0xe01fc040: 00000002 (gdb) monitor mww 0x40000000 0x1234 (gdb) monitor mdw 0x40000000 0x40000000: 00001234 А вот при инициализации, т.е. выолняемые из скрипта - нет. Аборты. invalid command name "arm7_9_force_hw_bkpts" called at file "command.c", line 456 called at file "embedded:startup.tcl", line 89 called at file "embedded:startup.tcl", line 93 memory write caused data abort (address: 0xe01fc040, size: 0x4, count: 0x1) Runtime error, file "command.c", line 456: 0xe01fc040: 00000001 Здесь аборт при записи в MEMMAP, чтение MEMMAP следующей строкой в скрипте проходит без ошибок. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vitaliy_ARM 0 5 февраля, 2009 Опубликовано 5 февраля, 2009 · Жалоба 0xe01fc040: 00000001[/code] Здесь аборт при записи в MEMMAP, чтение MEMMAP следующей строкой в скрипте проходит без ошибок. По началу тоже было что-то подобное, когда пытался запустить отладку примера lpc2378_uart_irq с сайта WinARM. Потом заменил .cfg файл файлом для lpc2294 из директории OpenOCD, добавил пару строчек, как писал выше и отладка заработала, только остался геммор с точками останова. Видимо их gdb не зашивает в процессор. Как нестранно, но с атмеловскими процессорами проблем на порядок меньше. Имеется в распоряжении J-Link и GDB-сервер для него. Так с ним точки останова ставятся! Хрень однако :smile3009: Начинаю думать, что это уже не работа, а мучение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alx2 0 5 февраля, 2009 Опубликовано 5 февраля, 2009 · Жалоба но если отсоединить wiggler, сбросить, или питание отключить включить то программа не запускается. Вот startup может в нем где что не так : По поводу инициализации железа ничего сказать не могу, а вот что касается программной части: а где инициализация секции .data? Судя по приведенному map файлу, в ней есть данные... Я вижу, что после очистки .bss управление сразу передается main()... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergeyVas 0 5 февраля, 2009 Опубликовано 5 февраля, 2009 · Жалоба По поводу инициализации железа ничего сказать не могу, а вот что касается программной части: а где инициализация секции .data? Судя по приведенному map файлу, в ней есть данные... Я вижу, что после очистки .bss управление сразу передается main()... Пока не селен в тонкостях работы с скриптами, Понимаю так секция bss содержит переменные, но как их нужно инициализировать, не знаю, вот в скрипте линкера: .bss : { PROVIDE (__bss_start = .); *(.bss) *(COMMON) . = ALIGN(4); PROVIDE (__bss_end = .); . = ALIGN(256); PROVIDE (__stack_start = .); PROVIDE (__stack_fiq_start = .); . += FIQ_STACK_SIZE; . = ALIGN(4); PROVIDE (__stack_fiq_end = .); PROVIDE (__stack_irq_start = .); . += IRQ_STACK_SIZE; . = ALIGN(4); PROVIDE (__stack_irq_end = .); PROVIDE (__stack_abt_start = .); . += ABT_STACK_SIZE; . = ALIGN(4); PROVIDE (__stack_abt_end = .); PROVIDE (__stack_und_start = .); . += UND_STACK_SIZE; . = ALIGN(4); PROVIDE (__stack_und_end = .); PROVIDE (__stack_svc_start = .); . += SVC_STACK_SIZE; . = ALIGN(4); PROVIDE (__stack_svc_end = .); PROVIDE (__stack_use_start = .); . += USE_STACK_SIZE; . = ALIGN(4); PROVIDE (__stack_use_end = .); PROVIDE (__stack_end = .); PROVIDE (__heap_start = .); } > ram Причина скорее всего в секции bss. Проделал такие действия: запустил программу с виглером посмотрел память и мап файл еще раз, по ниму видно что данные которые находятся в bss располагаются по адресу 0ч00200000 и занимают 4байта, хранится там цифра 00F4FFFF её запомнил, после добавил в стартап очистку все памяти : ldr r1, =0x00200000 ldr r2, =0x00210000 mov r3, #0 bss_clear_loop: cmp r1, r2 strne r3, [r1,#0x04]! bne bss_clear_loop Теперь если запускаю, программа не запускается, а если записываю 00F4FFFF по адресу где должен быть BSS, программа начинает работать. Похоже дело все таки в этом. Как правильно проинициализировать сектор bss , может его нужно помещать в не в ром а в рам ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amw 0 5 февраля, 2009 Опубликовано 5 февраля, 2009 (изменено) · Жалоба Пока не селен в тонкостях работы с скриптами... Вот пример из рабочего проекта для SAM7S256. В кратце Секция .data это секция, в которой размещаются инициализируемуе глобальные переменные. Она прошивается во флеш по адресу LMA, и копируется стартап кодом по адресу VMA. Секция .bss это секция, в которой размещаются НЕинициализируемуе глобальные переменные. Она НЕ прошивается во флеш и обнуляется стартап кодом по адресу VMA. LMA - Load Memory Address - адрес, по которому загружаются переменные из файла (для embedded прошиваются во флеш). VMA - Virtual Memory Address - адрес, по которому переменные доступны программе во время ее выполнения. За подробностями обратитесь в info ld, ну или на первоисточник http://sourceware.org/binutils/docs/ А вообще-то если у Вас нет, так сказать реверенсного, скрипта линкера то выведите скрипт по умолчанию из самого ld arm-elf-ld --verbose и поправте под свои нужды. lds_crt.zip Изменено 5 февраля, 2009 пользователем amw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergeyVas 0 5 февраля, 2009 Опубликовано 5 февраля, 2009 · Жалоба Спасибо :) теперь все работает. причина была : секцию дата разместил в рам , и в стартапе не было копирования из флэша в рам, секции дата. Про это тоже не знал arm-elf-ld --verbose. вообщем очень помогли :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amw 0 5 февраля, 2009 Опубликовано 5 февраля, 2009 · Жалоба Спасибо :) :) Спасибо :) :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vitaliy_ARM 0 6 февраля, 2009 Опубликовано 6 февраля, 2009 · Жалоба Заметил такую штуку. Когда использовал GDB сервер для J-Link версии 3,68b - точки останова ставятся, если использую последнюю версию 4.02 - проблема такая же как и с опер оцд. Точки останова не ставятся. От сюда возникает подозрение, может сменили команду установки брейкпоинтов? :smile3046: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 30 апреля, 2009 Опубликовано 30 апреля, 2009 · Жалоба Подскажите, уважаемые, как бороться с такой чепухой: (WinAVR-20090313) Пишу софтину с printf_P периодически выскакивает error: relocation truncated to fit для фрагментов с его использованием. меняю порядок компиляции файлов - все попускает. Можно ли заставить линкер как-то перетасовать объектники автоматиццки? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться