|
|
  |
скрипт Linkera |
|
|
|
Feb 4 2009, 12:54
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
Цитата(amw @ Feb 4 2009, 15:13)  Посмотрел. Приведу на всякий случай окно инициализации своего gdb: Продолжаем разбираться.
Эскизы прикрепленных изображений
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
|
Feb 4 2009, 13:26
|
Гуру
     
Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923

|
Цитата(Vitaliy_ARM @ Feb 4 2009, 15:54)  Посмотрел. Приведу на всякий случай окно инициализации своего gdb: Продолжаем разбираться.  попробуйте добавить break main continue
|
|
|
|
|
Feb 4 2009, 13:36
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
Цитата(sergey sva @ Feb 4 2009, 16:26)  попробуйте добавить
break main continue Пробовал, потом убрал. Роли не играет. А как аппаратные брейкпоинты работают. Они во флешь прошиваются или в озу или в спец регистры?
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
|
Feb 4 2009, 14:32
|
Знающий
   
Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045

|
Цитата(sergey sva @ Feb 3 2009, 22:38)  Еще есть одна непонятная ситуация, может что подскажите,из за чего может быть такое: если запускаю программу из отладчика все работает, а если отлючаю wiggler, сброс жму, программа не стартует, хотя в флэш программа записана, пробовал считать hjtag. Возможно это связано с тем, что вы используете программные точки останова. Попробуйте аппаратные. Для этого замените Код monitor arm7_9 sw_bkpts enable на Код monitor arm7_9 force_hw_bkpts enable
|
|
|
|
|
Feb 4 2009, 15:04
|
Гуру
     
Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923

|
Цитата(gotty @ Feb 4 2009, 17:32)  Возможно это связано с тем, что вы используете программные точки останова. Попробуйте аппаратные. Для этого замените Код monitor arm7_9 sw_bkpts enable на Код monitor arm7_9 force_hw_bkpts enable Пробовал и аппаратные и программные, но все равно та же ситуация, виглером запускается и останавливается, после отключения включения питания программа не стартует. вот окне инициализации : CODE 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
Вот файл мап, может здесь будет видно что нибудь подозрительное: CODE
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
|
|
|
|
|
Feb 4 2009, 16:29
|
Гуру
     
Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923

|
компиляция линкование и ассемблирование проходит без ошибок и предупреждений, программа записывается, прекрасно работает с отладчика и по шагам и в без конечном цикле. Но как отсоединяю вигглер, программа еще работает можно сброс нажать пере запустится, Если отключаю питание и заново включаю ужу не запускается. Сначала думал что программа записывается только в озу, попробовал все стер Hjtag считал, посмотрел чисто, запустил отладчик,программа записалась, запустил по шагам все работает, опять запустил hjtag считал ,флэш уже не чистая с программой, где еще копать. ?
|
|
|
|
|
Feb 4 2009, 19:11
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Цитата(Vitaliy_ARM @ Feb 4 2009, 14:54)  Посмотрел. Приведу на всякий случай окно инициализации своего gdb: Продолжаем разбираться.  Добавление команды Код 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 следующей строкой в скрипте проходит без ошибок.
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
|
Feb 5 2009, 08:51
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
Цитата(amw @ Feb 4 2009, 22:11)  0xe01fc040: 00000001[/code] Здесь аборт при записи в MEMMAP, чтение MEMMAP следующей строкой в скрипте проходит без ошибок. По началу тоже было что-то подобное, когда пытался запустить отладку примера lpc2378_uart_irq с сайта WinARM. Потом заменил .cfg файл файлом для lpc2294 из директории OpenOCD, добавил пару строчек, как писал выше и отладка заработала, только остался геммор с точками останова. Видимо их gdb не зашивает в процессор. Как нестранно, но с атмеловскими процессорами проблем на порядок меньше. Имеется в распоряжении J-Link и GDB-сервер для него. Так с ним точки останова ставятся! Хрень однако  Начинаю думать, что это уже не работа, а мучение.
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
|
Feb 5 2009, 10:48
|

Местный
  
Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091

|
Цитата(sergey sva @ Feb 4 2009, 17:13)  но если отсоединить wiggler, сбросить, или питание отключить включить то программа не запускается. Вот startup может в нем где что не так : По поводу инициализации железа ничего сказать не могу, а вот что касается программной части: а где инициализация секции .data? Судя по приведенному map файлу, в ней есть данные... Я вижу, что после очистки .bss управление сразу передается main()...
--------------------
Всего наилучшего, Alex Mogilnikov
|
|
|
|
|
Feb 5 2009, 17:52
|
Гуру
     
Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923

|
Цитата(alx2 @ Feb 5 2009, 13:48)  По поводу инициализации железа ничего сказать не могу, а вот что касается программной части: а где инициализация секции .data? Судя по приведенному map файлу, в ней есть данные... Я вижу, что после очистки .bss управление сразу передается main()... Пока не селен в тонкостях работы с скриптами, Понимаю так секция bss содержит переменные, но как их нужно инициализировать, не знаю, вот в скрипте линкера: CODE .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 , может его нужно помещать в не в ром а в рам ?
|
|
|
|
|
Feb 5 2009, 18:58
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Цитата(sergey sva @ Feb 5 2009, 19:52)  Пока не селен в тонкостях работы с скриптами... Вот пример из рабочего проекта для 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 и поправте под свои нужды.
Сообщение отредактировал amw - Feb 5 2009, 19:02
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
|
Feb 6 2009, 12:24
|
Знающий
   
Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246

|
Заметил такую штуку. Когда использовал GDB сервер для J-Link версии 3,68b - точки останова ставятся, если использую последнюю версию 4.02 - проблема такая же как и с опер оцд. Точки останова не ставятся. От сюда возникает подозрение, может сменили команду установки брейкпоинтов?
--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|