Постараюсь быть полным и конкретным:LPC17xx вопросы отладки в Eclipse,/OCD
NXP LPC1756 Cortex-M3. Eclipse Helios с использованием инструментария Codesourcery ARM вместе с OpenOCD для отладки. JTAG - Olimex ARM-USB-OCD. ОС - 64-разрядная Windows 7.
Я верю, что у меня есть флеш-загружаемая сторона вещей, которые были решены сейчас. После программирования у меня есть сценарий, выполняющий dump_image, и сбрасываемое изображение выглядит грубо правильным. На данный момент у меня есть вопросы проверки, и мне нужно разобраться, но на этом этапе, похоже, моя работа JTAG работает, и я успешно общаюсь с «1756».
Однако, когда я пытаюсь отлаживать, я сталкиваюсь с проблемами. Во-первых, мои CFG файлы, начиная с моей целевой устройство CFG файл:
# NXP LPC1756 Cortex-M3 with 256kB Flash and 32kB SRAM
debug_level 2
# LPC17xx chips support both JTAG and SWD transports.
# Adapt based on what transport is active.
#source [find swj-dp.tcl]
if { [info exists CHIPNAME] } {
set _CHIPNAME $CHIPNAME
} else {
set _CHIPNAME lpc1756
}
if { [info exists ENDIAN] } {
set _ENDIAN $ENDIAN
} else {
set _ENDIAN little
}
if { [info exists CCLK ] } {
set _CCLK $CCLK
} else {
set _CCLK 4000
}
if { [info exists CPUTAPID ] } {
set _CPUTAPID $CPUTAPID
} else {
set _CPUTAPID 0x4ba00477
}
jtag newtap $_CHIPNAME cpu -irlen 4 -expected-id $_CPUTAPID
set _TARGETNAME [format "%s.cpu" $_CHIPNAME]
target create $_TARGETNAME cortex_m3 -endian $_ENDIAN -chain-position $_TARGETNAME
$_TARGETNAME configure -work-area-phys 0x10000000 -work-area-size 0x8000
$_TARGETNAME configure -work-area-backup 0
#$_TARGETNAME configure -endian $_ENDIAN
#$_TARGETNAME configure -variant ARMv7
#delays on reset lines
adapter_nsrst_delay 200
jtag_ntrst_delay 200
#reset_config srst_only
#reset_config trst_and_srst srst_pulls_trst
# LPC1756 has 256kB of flash memory, managed by ROM code (including a
# boot loader which verifies the flash exception table's checksum).
# flash bank <name> lpc2000 <base> <size> 0 0 <target#> <variant> <clock> [calc checksum]
set _FLASHNAME $_CHIPNAME.flash
flash bank $_FLASHNAME lpc2000 0x0 0x40000 0 0 $_TARGETNAME \
lpc1700 $_CCLK calc_checksum
# Run with *real slow* clock by default since the
# boot rom could have been playing with the PLL, so
# we have no idea what clock the target is running at.
jtag_khz 50
#$_TARGETNAME configure -event reset-init {
# Do not remap 0x0000-0x0020 to anything but the flash (i.e. select
# "User Flash Mode" where interrupt vectors are _not_ remapped,
# and reside in flash instead).
#
# See Table 612. Memory Mapping Control register (MEMMAP - 0x400F C040) bit description
# Bit Symbol Value Description Reset
# value
# 0 MAP Memory map control. 0
# 0 Boot mode. A portion of the Boot ROM is mapped to address 0.
# 1 User mode. The on-chip Flash memory is mapped to address 0.
# 31:1 - Reserved. The value read from a reserved bit is not defined. NA
#
# http://ics.nxp.com/support/documents/microcontrollers/?scope=LPC1768&type=user
#MEMMAP - set user mode
# mww 0x400FC040 0x01
#}
$_TARGETNAME configure -event reset-init {
# Force target into ARM state
#armv4_5 core_state arm
#do not remap 0x0000-0x0020 to anything but the flash
#mwb 0xE01FC040 0x01
mwb 0x400FC040 0x01
#mwb 0xE000ED08 0x00
}
Теперь мой отлаживать файл CFG:
#define our ports
#telnet_port 4444
#gdb_port 3333
#commands specific to the Olimex ARM-USB-OCD
interface ft2232
ft2232_device_desc "Olimex OpenOCD JTAG A"
ft2232_layout "olimex-jtag"
ft2232_vid_pid 0x15BA 0x0003
if { [info exists CHIPNAME] } {
set _CHIPNAME $CHIPNAME
} else {
set _CHIPNAME lpc1756
}
if { [info exists CPUTAPID ] } {
set _CPUTAPID $CPUTAPID
} else {
set _CPUTAPID 0x4ba00477
}
if { [info exists CCLK ] } {
set _CCLK $CCLK
} else {
set _CCLK 4000
}
if { [info exists ENDIAN ] } {
set _ENDIAN $ENDIAN
} else {
set _ENDIAN little
}
debug_level 3
jtag_khz 100
#delays on reset lines
adapter_nsrst_delay 200
jtag_ntrst_delay 200
#reset_config srst_only
reset_config trst_and_srst srst_pulls_trst
jtag newtap $_CHIPNAME cpu -irlen 4 -expected-id $_CPUTAPID
#target cortex_m3 little 0 armv7
set _TARGETNAME [format "%s.cpu" $_CHIPNAME]
target create $_TARGETNAME cortex_m3 -endian $_ENDIAN -chain-position $_TARGETNAME
#
$_TARGETNAME configure -work-area-phys 0x10000000 -work-area-size 0x8000
$_TARGETNAME configure -work-area-backup 0
#working_area 0 0x10000000 0x8000 nobackup
set _FLASHNAME $_CHIPNAME.flash
flash bank $_FLASHNAME lpc2000 0x0 0x40000 0 0 $_TARGETNAME lpc1700 $_CCLK calc_checksum
$_TARGETNAME configure -event reset-init {
# Force target into ARM state
#armv4_5 core_state arm
#do not remap 0x0000-0x0020 to anything but the flash
mwb 0xE01FC040 0x01
mwb 0x400FC040 0x01
mwb 0xE000ED08 0x00
}
gdb_flash_program enable
init
#fast enable
jtag_khz 100
debug_level 1
В Eclipse, я вызываю этот инструмент с флагами:
-f arm-usb-ocd.cfg -f debug.cfg
Это, как представляется, работает нормально (по крайней мере, я не вижу ошибок в консоли). Теперь приходит часть, где у меня проблемы:
Я создал конфигурацию отладки в Eclipse (Запуск> Конфигурации отладки ...) под GDB Hardware Debugging. Соответствующие параметры:
Main:
C/C++ Application: output\project_UT1.elf
Debugger:
C:\CodeSourcery\bin\arm-none-eabi-gdb.exe
Startup:
Reset and Delay checked (2-seconds)
Halt checked
Initialization commands:
target remote localhost:3333
monitor flash device = LPC1756
monitor flash download = 1
monitor flash breakpoints = 1
monitor endian little
monitor speed 100
monitor speed auto
monitor reset halt
monitor writeu32 0x400FC040 = 0x00000001
monitor clrbp
Load image: not checked
Load symbols: checked
Runtime options: none of Set program counter, set breakpoint or resume checked
Run commands:
monitor reg sp = 0x10001ffc
monitor reg pc = 0x00001278
continue
Using "Standard GDB Hardware Debugging Launcher"
(Примечание: У меня есть компьютер, чтобы установить 0x00001278, как это было адрес моей Reset_Handler, я знаю, что это должно быть 0x00000004, но я экспериментировал, когда он был 0x00000004 я получил такие же проблемы ...)
При попытке отладки с помощью этой настройки я получаю сообщение о том, что «GDB Hardware Debugging Suspended», ПК, похоже, находится у загрузчика 0x1FFF0080, и мой отладчик больше не подключается. В консоли я вижу такие вещи, как:
.
.
.
target remote localhost:3333
0x1fff0080 in ??()
.
.
.
continue
Program received signal SIGINT, Interrupt.
0x1fff0080 in ??()
Например, в разборке окне можно искать и находить такие вещи, как «главный» или «Reset_Handler», но демонтаж всех «варисторов r0, r0» - все нули, в основном. Я не могу сделать один шаг (очевидно, приостановлено ...) Даже при 0x1fff0080 он отображает «movs r0, r0». Кажется, я могу читать регистры процессора (например, sp показывает 0x10001ffc, а pc показывает 0x1fff0081, поэтому может быть, интерфейс JTAG не умер ...)
Мой мелькнуло изображение должно быть 0x00000000 (т.е. вектор таблицы есть). Когда я делаю dump_image, оказывается устройство запрограммированный и вектор записи в таблице выглядят правильно. Защита кода? Если да, то как я могу сделать, по-видимому, успешное «дамп + изображение»?
Однако даже подключение устройства без подключения JTAG не приводит к действию. для этого для LPC1768, но не нашли ничего, что сработает для меня. r предложения очень признательны.
Черт. Так просто: перезагрузка монитора init исправила его. Я не заметил, что указанное мной событие было «reset init», и моя конфигурация отладчика так и не сделала этого. Что касается нагрузки, нет: я использую другой скрипт для загрузки во флэш-память до отладки для другого тестирования, поэтому я загружаю только символы. Большое спасибо. – Mike