Перейти к содержанию
    

Хм. Я тоже, но продвинулся чуть дальше

Постил я сюда:

http://electronix.ru/forum/index.php?showt...st&p=538405

http://electronix.ru/forum/index.php?showt...st&p=538988

Может вдвоем быстрее найдем правильный путь.

 

Посмотрел.

Приведу на всякий случай окно инициализации своего gdb:

Продолжаем разбираться. :rolleyes:

post-29246-1233752080_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Посмотрел.

Приведу на всякий случай окно инициализации своего gdb:

Продолжаем разбираться. :rolleyes:

попробуйте добавить

 

break main

continue

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

попробуйте добавить

 

break main

continue

 

Пробовал, потом убрал. Роли не играет. А как аппаратные брейкпоинты работают.

Они во флешь прошиваются или в озу или в спец регистры?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Еще есть одна непонятная ситуация, может что подскажите,из за чего может быть такое:

если запускаю программу из отладчика все работает, а если отлючаю wiggler, сброс жму,

программа не стартует, хотя в флэш программа записана, пробовал считать hjtag.

Возможно это связано с тем, что вы используете программные точки останова. Попробуйте аппаратные. Для этого замените

monitor arm7_9 sw_bkpts enable

на

monitor arm7_9 force_hw_bkpts enable

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Возможно это связано с тем, что вы используете программные точки останова. Попробуйте аппаратные. Для этого замените
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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

компиляция линкование и ассемблирование проходит без ошибок и предупреждений,

программа записывается, прекрасно работает с отладчика и по шагам и в без конечном цикле.

Но как отсоединяю вигглер, программа еще работает можно сброс нажать пере запустится,

Если отключаю питание и заново включаю ужу не запускается. Сначала думал что программа

записывается только в озу, попробовал все стер Hjtag считал, посмотрел чисто,

запустил отладчик,программа записалась, запустил по шагам все работает,

опять запустил hjtag считал ,флэш уже не чистая с программой, где еще копать. ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Посмотрел.

Приведу на всякий случай окно инициализации своего 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 следующей строкой в скрипте проходит без ошибок.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

0xe01fc040: 00000001[/code]

Здесь аборт при записи в MEMMAP, чтение MEMMAP следующей строкой в скрипте проходит без ошибок.

 

По началу тоже было что-то подобное, когда пытался запустить отладку примера lpc2378_uart_irq

с сайта WinARM. Потом заменил .cfg файл файлом для lpc2294 из директории OpenOCD, добавил пару строчек, как писал выше

и отладка заработала, только остался геммор с точками останова. Видимо их gdb не зашивает в процессор. Как нестранно, но

с атмеловскими процессорами проблем на порядок меньше.

 

Имеется в распоряжении J-Link и GDB-сервер для него. Так с ним точки останова ставятся!

Хрень однако :smile3009:

Начинаю думать, что это уже не работа, а мучение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

но если отсоединить wiggler, сбросить, или питание отключить включить то программа не запускается.

Вот startup может в нем где что не так :

По поводу инициализации железа ничего сказать не могу, а вот что касается программной части: а где инициализация секции .data? Судя по приведенному map файлу, в ней есть данные... Я вижу, что после очистки .bss управление сразу передается main()...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По поводу инициализации железа ничего сказать не могу, а вот что касается программной части: а где инициализация секции .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 , может его нужно помещать в не в ром а в рам ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пока не селен в тонкостях работы с скриптами...

Вот пример из рабочего проекта для 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

Изменено пользователем amw

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо :) теперь все работает. причина была : секцию дата разместил в рам , и в стартапе не было копирования из флэша в рам,

секции дата. Про это тоже не знал arm-elf-ld --verbose. вообщем очень помогли :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Заметил такую штуку.

 

Когда использовал GDB сервер для J-Link версии 3,68b - точки останова ставятся,

если использую последнюю версию 4.02 - проблема такая же как и с опер оцд.

Точки останова не ставятся. От сюда возникает подозрение, может сменили команду

установки брейкпоинтов? :smile3046:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подскажите, уважаемые, как бороться с такой чепухой: (WinAVR-20090313)

 

Пишу софтину с printf_P периодически выскакивает error: relocation truncated to fit для фрагментов с его использованием.

меняю порядок компиляции файлов - все попускает. Можно ли заставить линкер как-то перетасовать объектники автоматиццки?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...