Mueva la programación integrada de Keil a Linux

Actualmente estoy usando Keil para desarrollar una placa de descubrimiento STM32. Mi proyecto está casi terminado y me gustaría pasar a un entorno de construcción basado en Linux. He estado usando la herramienta de flasheo preconfigurada y los controladores STLink para Windows para flashear la placa, y pude exportar un archivo bin, que logré flashear en mi máquina Linux usando qSTLink2 . Hasta ahora tan bueno.

Ahora estoy atascado en mover el proceso de construcción de todo el proyecto. Específicamente:

¿Cómo transfiero mi .uvproj a un archivo MAKE, teniendo en cuenta cosas como el archivo de inicio 'startup_stm32l1xx_md.s'?

No lo he usado en un STM32 en particular en un entorno de compilación Linux GCC, pero probablemente encontrará que GCC necesita un archivo de inicio diferente. Puede que sea mejor encontrar un proyecto simple que ya funcione y luego agregarle su código.
De la manera difícil, sin duda.
¿Podría usar el archivo .o actual que Keil generó usando MDK-ARM, ignorar la compilación de ese archivo por ahora y vincularlo estáticamente?
Como PeterJ ya escribió. Utilizará un archivo de inicio diferente con etiquetas diferentes y semántica diferente. No debería haber forma de mantener el archivo Keil startup_stm32l1xx_md.o. ¿No tienes la fuente startup_stm32l1xx_md.s para eso?
Sí, pero parece estar orientado a MDK-ARM (o eso dice el encabezado). Lo he reemplazado por otro . Sin embargo, no estoy seguro de qué implica la distinción entre densidad media y alta.

Respuestas (2)

Lo tengo hecho. Pensé en compartir mis resultados para que otros puedan usarlo. Gracias por su tiempo a todos.


Usé esta cadena de herramientas ARM para construir mi proyecto, y la biblioteca texane/stlink , que viene con la ./st-flashherramienta, para actualizar el binario a mi STM32L1. Si bien texane/stlink viene con GDB, descubrí que podía hacer el proceso de creación y actualización sin él.

Mi Makefile terminó luciendo así. No es muy bonito o abstracto, pero hace el trabajo.

all:
    arm-none-eabi-gcc -T stm32l1xx.ld -mthumb -mcpu=cortex-m3 -D STM32L1XX_MD -D USE_STDPERIPH_DRIVER startup_stm32l1xx_md.s system_stm32l1xx.c main.c [ sources ] -lm --specs=nosys.specs -o Project.elf

En el cual:

  • arm-none-eabi-gcc
    La cadena de herramientas ARM
  • -T stm32l1xx.ld
    El documento enlazador
  • -mthumb -mcpu=cortex-m3
    Dile a GCC que esto es para un M3
  • -D STM32L1XX_MD -D USE_STDPERIPH_DRIVER
    Define para el controlador periférico estándar
  • startup_stm32l1xx_md.s
    Documento de inicio orientado a GCC.
  • system_stm32l1xx.c main.c [ sources ]
    Lista de mis archivos fuente
  • -lm
    Para Math.h( L ib M ath)
  • --specs=nosys.specs
    No use llamadas de sistemas como _exit.
  • -o Project.elf
    Nombre de salida
¿De dónde stm32l1xx.ldviene el archivo?

Hay una cadena de herramientas Gnu ARM (arm-none-eabi), y supuestamente openOCD funciona con gdb (aunque no he podido hacer que eso suceda en Win7: openOCD se conecta a una placa STM32F4disco OK, pero gdb tiene problemas para conectarse a openOCD ).

Indague un poco por aquí y encontrará enlaces a la cadena de herramientas, openOCD y proyectos de muestra que incluyen la fuente de inicio.