¿Cómo decirle al depurador de CCS por dónde empezar?

5

Estoy empezando con MSP430 y Code Composer Studio (CCS).

Quiero hacer un proyecto de ensamblaje puro. En este momento, tengo un programa "hola mundo" que no hace más que encender un LED en el Launchpad MSP430F5529.

Sin embargo, cuando ejecuto este programa en el depurador, la ejecución comienza en la dirección 0x0000 en lugar de en mi punto de entrada designado, llamado RESET (0x10000). Puedo ver que la PC está configurada inicialmente a 0x0000. Si lo configuro manualmente en la ventana de visualización para REAJUSTAR, el programa se ejecuta como se esperaba.

He declarado que RESET es global y he configurado la opción del vinculador para que RESET sea el punto de entrada.

Supongo que tengo un problema con la configuración del depurador o con el cargador (de arranque), pero podría estar totalmente en el camino equivocado.

            .cdecls C,LIST,"msp430.h"       ; Include device header file
    ;-------------------------------------------------------------------------------
            .text                           ; Assemble into program memory
            .retain                         ; Override ELF conditional linking
                                            ; and retain current section
            .retainrefs                     ; Additionally retain any sections
                                            ; that have references to current
                                            ; section
;-------------------------------------------------------------------------------
            .global RESET
RESET       mov.w   #__STACK_END,SP         ; Initialize stackpointer
StopWDT     mov.w   #WDTPW|WDTHOLD,&WDTCTL  ; Stop watchdog timer

;-------------------------------------------------------------------------------
                                            ; Main loop here
            bis.b #01h, &P1DIR
            bis.b #01h, &P1OUT
;-------------------------------------------------------------------------------
;           Stack Pointer definition
;-------------------------------------------------------------------------------
            .global __STACK_END
            .sect   .stack

;-------------------------------------------------------------------------------
;           Interrupt Vectors
;-------------------------------------------------------------------------------
            .sect   ".reset"                ; MSP430 RESET Vector
            .short  RESET
    
pregunta The Photon

1 respuesta

2

No he programado un MSP430 en ensamblaje, pero parece que el punto de entrada del programa no está escrito en la dirección 0xFFFE:

  

El contador del programa (PC) se carga con la dirección del código de inicio y la ejecución del código de inicio comienza en ese momento   dirección. Consulte la Sección 1.9 para obtener más información sobre el código de inicio. Al término de la bota   código, la PC se carga con la dirección contenida en la ubicación de restablecimiento de SYSRSTIV (0FFFEh).

Entonces, desde su descripción, está usando --entry_point= global_symbol como una opción para establecer el punto de entrada. Realmente no puedo ver por qué eso no funcionaría, ¿has revisado la llamada real del vinculador si se aplica esa opción?

Otra opción sería escribir en la dirección 0xFFFE el valor de su dirección de inicio. O al menos verifica en tu imagen hexadecimal resultante qué valor se escribe allí.

Acabo de encontrar esto :

MEMORY
{
    MEM : origin = 0x0200, length = 0xFDFD
    RESET : origin = 0xFFFE, length = 0x0002
}
SECTIONS
{
    .text : {} > MEM
    .const : {} > MEM
    .data : {} > MEM
    .bss : {} > MEM
    .reset : > RESET
    .cinit : {} > MEM ;cflag option only
    .pinit : {} > MEM ;cflag option only
}

como la ubicación predeterminada. Entonces, ¿quizás porque también nombraste la etiqueta RESET que el enlazador se confunde de alguna manera? Tal vez nombre su punto de entrada de manera diferente como INICIAR o ENTRAR. Pero esto también da una idea de cómo obtener la dirección real donde la desea. Solo tiene que definir una constante de 16 bits para colocarla en la sección .reset.

Es extraño lo diferente que es el ensamblador de TI del IAR, con el que estoy más familiarizado.

    
respondido por el Arsenal

Lea otras preguntas en las etiquetas