Error al compilar el archivo de inicio en STM32

7

Estoy intentando proporcionar controladores de interrupción personalizados para mi Cortex M3 (consulte el manual aquí ). ST amablemente proporciona una biblioteca estándar, que tiene varios archivos de inicio, todos llamados "startup_stm32f2xx.s". Cada uno está en una carpeta diferente según IDE.

Ahora no uso un IDE (compilo directamente con Yagarto, una versión modificada de la cadena de herramientas de gcc). Tengo ya preguntado cuál de las empresas de inicio utilizar. Sin embargo, después de haber probado todos los archivos de inicio disponibles, siempre obtengo el mismo error:

  

/startup_stm32f2xx.s:1:02: error: la CPU de destino no admite el modo ARM

Una búsqueda rápida en Google revela que esto probablemente significa que el código del ensamblador tiene instrucciones que mi ARM no puede entender, lo cual es sorprendente dado que el código se proporcionó para mi placa.

¿Cómo puedo compilar el archivo de inicio que define el vector de interrupción en mi STM32?

Editar: En cada uno de los archivos, startup_stm32f2xx.s:1:0 es el comienzo de un comentario. Además, estoy usando la bandera -mcpu=cortex-m3 . Aquí está el mensaje de error completo:

$ make all
arm-none-eabi-gcc -x assembler-with-cpp -c -g -mcpu=cortex-m3 -gdwarf-2 -Wa,-amhls=startup_stm32f2xx.lst   startup_stm32f2xx.s -o startup_stm32f2xx.o
startup_stm32f2xx.s:1:0: error: target CPU does not support ARM mode
makefile:46: recipe for target 'startup_stm32f2xx.o' failed
make: *** [startup_stm32f2xx.o] Error 1
    
pregunta Randomblue

3 respuestas

7

También puede necesitar -mthumb -mno-thumb-interwork -mfpu=vfp -msoft-float -mfix-cortex-m3-ldrd como opciones de compilación para arm-none-eabi-gcc . Para el ensamblador, use -mcpu=cortex-m3 -mthumb como opciones.

Editar:

El -mthumb cambia gcc y el ensamblador al modo "pulgar": generarán instrucciones de modo de armado por defecto, que no funcionan en Cortex M3.

Como no hay modo ARM, no necesitamos el interfuncionamiento ARM / Tumb, por lo tanto, -mno-thumb-interwork .

El compilador necesitaba -mfpu=vfp -msoft-float para el soporte de punto flotante. Cortex M3 no tiene AFAIK de punto flotante de hardware, al menos no conozco ningún silicio que tenga tanto Cortex M3 como punto flotante en hardware. Hay algunos Cortex M4 que tienen.

La mayoría de Cortex M3 necesita -mfix-cortex-m3-ldrd , esto se encuentra en la documentación de erratas para las versiones principales de Cortex M3.

Para obtener más información, consulte Documentación GCC y Centro de información ARM .

    
respondido por el Turbo J
0

Comprueba que estás utilizando el ensamblador correcto para crear startup_stm32f2xx.o. Para averiguar para qué arquitectura ensamblaste, escribe:

file startup_stm32f2xx.o

Deberías ver algo como ARM-elf little endian. Si no lo haces, entonces deberías arreglar tu script makefile / build.

    
respondido por el Toby Jaffey
0

Estaba enfrentando el mismo problema cuando cambié de Em :: Blocks a IDE-less-GCC-based-development. Extrañamente, parece que ST Microelectronics está suministrando archivos de inicio que son compatibles con las cadenas de herramientas de los IDE más grandes, sin embargo, no proporcionan uno que funcione con GAS (el ensamblador GCC).

Podría ayudarme con el uso del archivo de inicio que se incluyó con Em :: Blocks.

Aquí está mi publicación en desbordamiento de pila .

    
respondido por el Multisync

Lea otras preguntas en las etiquetas