Fallo al llegar al final del ejecutable

1

Tengo un archivo ejecutable que se bloquea después de que main haya terminado todas sus instrucciones y se ejecute la última instrucción del ensamblador. Justo antes de que el programa se bloquee, hago disas en GDB:

   0x2001c054 <+84>:    movt    r3, #16384      ; 0x4000
   0x2001c058 <+88>:    ldrh    r3, [r3, #16]
   0x2001c05a <+90>:    uxth    r3, r3
   0x2001c05c <+92>:    str     r3, [sp, #0]
   0x2001c05e <+94>:    bl      0x2001c0f8 <scream>
   0x2001c062 <+98>:    mov.w   r3, #0
   0x2001c066 <+102>:   mov     r0, r3
   0x2001c068 <+104>:   add     sp, #28
=> 0x2001c06a <+106>:   pop     {pc}
End of assembler dump.

Ahora, si voy a la siguiente instrucción ( ni en GDB), obtengo lo siguiente en GDB:

  

0xfffffffe en ?? ()

Además, OpenOCD (que utilizo para comunicarme con mi placa STM32F2) da el siguiente error:

  

Error: dirección + tamaño ajustado (0xfffffffe, 0x00000004)

¿Cómo puedo decirle a mi ejecutable que salga correctamente?

    
pregunta Randomblue

2 respuestas

7

¿Esto es en un microcontrolador? Si es así, nunca debe salir de main (); en su lugar, use un bucle infinito.

    
respondido por el AngryEE
5

Si se trata de un sistema operativo u otra aplicación en metal, main nunca debería salir. Si realmente debe salir, entonces su código de inicio de C podría reiniciar el tablero después de main .

    
respondido por el Toby Jaffey

Lea otras preguntas en las etiquetas