Makefile para STM32

3

Quiero escribir código en solo un editor de texto (no un IDE) y luego compilarlo con un Makefile simple.

Tengo:

Intenté buscar en Google para tales Makefiles, pero la mayoría de ellos están escritos para versiones anteriores de CMSIS (por ejemplo, STM32Cube carece de stm32f10x.h y stm32f10x_conf.h , en lo que la mayoría de los sistemas de compilación dependen).

Indique qué comandos de compilación debo usar para compilar el código para STM32F103 y dónde definir la frecuencia, densidad de memoria y otras constantes específicas del chip.

También te agradecería que compartieras un ejemplo de Makefile que use la utilidad de enlace de texane's para detectar la densidad y el tamaño de RAM / ROM.

    
pregunta CYB3R

2 respuestas

4

Un makefile es en realidad un script para la utilidad 'make' y no es específico de ningún procesador (GNU make al menos), ni tiene nada que ver con CMSIS. De hecho, no puede construir nada y simplemente crear una carpeta usando 'make' y 'recipies' escritas en el archivo make. Este es el manual de usuario de GNU make para algunos antecedentes.

Para los comandos del compilador de nuevo, deberá soportar el manual de GCC . Menciona las opciones que debe ingresar para especificar el procesador, la optimización, etc. Por ejemplo, en la siguiente receta de makefile:

build/%.o: source/%.c | build
    @echo " *** Building $@"
    arm-none-eabi-gcc -mcpu=cortex-m4 -mthumb -mfloat-abi=soft -fsigned-char -ffreestanding -nostartfiles -Og -g3 -fno-move-loop-invariants -fdata-sections -ffunction-sections -I"include" -std=gnu11 -c -o $@ $^
    @echo " *** $@ built."
    @echo ""

le dice a la utilidad 'make' que para hacer una compilación de archivos \%. o, necesitará un archivo llamado source \%. c y la 'receta' o método para hacerlo es ejecutar el comando sin brazo -eabi-gcc compilador con las opciones especificadas en esa línea. El significado de cada opción del compilador se menciona en el manual de GCC. Por ejemplo, -mcpu=cortex-m4 especifica el procesador ARM cortex m4. El stm32f103 quizás necesite -mcpu=cortex-m1 .

Como dijo Arsenal, no se puede usar un makefile para especificar la frecuencia, el tamaño de la memoria, etc. Mientras que la frecuencia está configurada en el código de la aplicación, el tamaño de la memoria, etc., aparecería en el script del enlazador utilizado por el enlazador GNU 'ld'. Aquí es una referencia al manual del enlazador. De hecho, una de las opciones para el compilador GNU es -T "linker.ld" que especifica el archivo de vinculador que se utilizará. Encontré esta publicación del blog cuando intentaba hacer algo similar.

    
respondido por el Sohail
1

aunque no es exactamente lo que estás pidiendo, estoy usando platformio para este propósito. Solo empecé hace un par de días, pero parece funcionar bastante bien. Tiene perfiles de compilación predefinidos para una variedad de tableros (parece que los suyos están incluidos), y puede definir los personalizados con bastante facilidad. No IDE, hago toda mi edición en vim :)

    
respondido por el Laurent S

Lea otras preguntas en las etiquetas