¿Qué significan estos estados de CPU OpenOCD?

Esto es lo que dice la documentación:

— Command: reset
— Command: reset run
— Command: reset halt
— Command: reset init

    Perform as hard a reset as possible, using SRST if possible. All defined
    targets will be reset, and target events will fire during the reset sequence.

    The optional parameter specifies what should happen after the reset. If there is 
    no parameter, a reset run is executed. The other options will not work on all 
    systems. See Reset Configuration.

        run Let the target run
        halt Immediately halt the target
        init Immediately halt the target, and execute the reset-init script 

Desde los comandos de OpenOCD

Abro OpenOCD, luego en otro terminal ejecuto arm-none-eabi-gdb end execute monitor reset haltpara decirle al objetivo que reinicie y detenga el procesador, para luego configurar los puntos de interrupción y ejecutar.

Sin embargo, la respuesta del procesador suele ser diferente:

(gdb) monitor reset halt
JTAG tap: sam7x512.cpu tap/device found: 0x3f0f0f0f (mfg: 0x787, part: 0xf0f0, ver: 0x3)
srst pulls trst - can not reset into halted mode. Issuing halt after reset.
target state: halted
target halted in ARM state due to debug-request, current mode: FIQ
cpsr: 0x600000d1 pc: 0x00000050
NOTE! DCC downloads have not been enabled, defaulting to slow memory writes. Type 'help dcc'.
NOTE! Severe performance degradation without fast memory access enabled. Type 'help fast'.

Otras veces, va de esta manera:

target state: halted
target halted in ARM state due to debug-request, current mode: Abort
cpsr: 0x600000d7 pc: 0x00000044

Otras veces (dentro de la misma ejecución, acabo de abrir gdb y ejecuté el reinicio del monitor detener un montón de veces):

target state: halted
target halted in ARM state due to debug-request, current mode: Undefined instruction
cpsr: 0x600000db pc: 0x00000038

¿Cuáles son esos estados?

¿El procesador ejecuta un programa válido con todos sus controladores de trampas configurados?
No se han declarado controladores de eventos.

Respuestas (1)

Trabajé alrededor de mi problema. ¡Sin embargo, todavía estoy muy interesado en aprender sobre esos estados!

Eché a perder la conexión a través del puerto 3333 y usé las capacidades de canalización de openocd:

.gdbinit

# Open openocd and pipe data throudh stdin/stdout.
# Openocd quits after gdb exits.
target remote | /usr/local/bin/openocd -f linux_config.cfg

openocd.cfg:

gdb_port pipe

Y funcionó mágicamente.