Autor Tema: Escribiendo Makefiles a mano  (Leído 3340 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Carl47D

  • PIC16
  • ***
  • Mensajes: 160
Escribiendo Makefiles a mano
« en: 14 de Septiembre de 2016, 18:06:41 »
Que tal, ¿como van?
Estoy aprendiendo a usar la librería libopencm3 junto con la STM32F4Discovery. Los ejemplos me sirven muy bien, solo haces make flash y se cargan en la placa :D, sin embargo me gustaría aprender a crear los Makefiles de mis proyectos ya que los que traen los ejemplos de libopencm3 son genéricos y parecen spaghetti xD.

Estoy trabajando en Ubuntu 16.04, tengo una variable OPENCM3_DIR que apunta a donde tengo la librería libopencm3. Tengo un proyecto simple y así esta la carpeta que lo contiene:
.
├── include
├── Makefile
└── src
    └── main.c

Hasta ahora tengo esto en el makefile:
Citar
# Directories
SRC_DIR = src
INCLUDE_DIR = include
BUILD_DIR = build

# oocd configuration
OPENOCD = openocd
OOCD_TARGET = stm32f4discovery_stlink
OOCD_INTERFACE = stlink-v2

# Build options
ARCH = -mcpu=cortex-m4
THUMB = -mthumb
OPTIMIZATION = -Og

# Toolchain
PREFIX = arm-none-eabi
CC = $(PREFIX)-gcc
CXX = $(PREFIX)-g++
LD = $(PREFIX)-gcc
AR = $(PREFIX)-ar
AS = $(PREFIX)-as
OBJCOPY = $(PREFIX)-objcopy
OBJDUMP = $(PREFIX)-objdump
GDB = $(PREFIX)-gdb

# Definitions
DEFS += -DSTM32F4

# Application
APP = main

all:
    mkdir build
    $(CC) $(ARCH) $(THUMB) -c $(SRC_DIR)/$(APP).c \
                -I$(OPENCM3_DIR)/include -I$(INCLUDE_DIR)\
                 $(DEFS) -o $(BUILD_DIR)/$(APP).o

#flash:
#   $(OPENOCD) -f interface/$(OOCD_INTERFACE).cfg \
#   -f scripts/target/$(OOCD_TARGET).cfg \
#   -c "program $(BUILD).elf verify reset exit"

clean:
    rm $(BUILD_DIR)/*.o
    rm -r $(BUILD_DIR)

Por el momento solo se crea el .o del main.c :D
¿Qué otros flags podría pasarle a arm-none-eabi-gcc ? ¿Alguna sugerencia? ¿Dejo de hacerlos a mano y uso un IDE que lo genere automáticamente?

Saludos
« Última modificación: 14 de Septiembre de 2016, 18:12:37 por Carl47D »


Desconectado elgarbe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2178
Re:Escribiendo Makefiles a mano
« Respuesta #2 en: 15 de Septiembre de 2016, 08:39:39 »
interesante!
estoy instalando ubuntu y quiero empezar a probar los stm32 en este ambiente.
las libopencm3 las habia visto hace un tiempo y me habian gustado, pero puede ser que el proyecto no haya avanzado más?

sds.
-
Leonardo Garberoglio

Desconectado tsk

  • PIC18
  • ****
  • Mensajes: 257
Re:Escribiendo Makefiles a mano
« Respuesta #3 en: 15 de Septiembre de 2016, 12:04:32 »
interesante!
estoy instalando ubuntu y quiero empezar a probar los stm32 en este ambiente.
las libopencm3 las habia visto hace un tiempo y me habian gustado, pero puede ser que el proyecto no haya avanzado más?

sds.

También las había visto, pero nunca las he probado. Apenas ayer, cuando leí lo del makefile aquí, me entro de nuevo la curiosidad.

Adjunto un proyecto con un Makefile de ejemplo que genera el binario

Las partes que se tienen que editar para ajustarse a otros MCUs son:
Código: [Seleccionar]
DEFINES = -DSTM32F1
...
LDSCRIPT = stm32f103.ld

Código: [Seleccionar]
CFLAGS =  -mcpu=$(MCU) -fno-common -mthumb -msoft-float -g -Wall -Wextra -Wimplicit-function-declaration -Wredundant-decls -Wmissing-prototypes -Wstrict-prototypes -Wundef -Wshadow $(DEFINES)

LDFLAGS = -lopencm3_stm32f1 --static -Wl,--start-group -lc -lgcc -Wl,--end-group -L$(OPENCM3_LIB_PATH) -T$(LDSCRIPT) -nostartfiles -Wl,--gc-sections -mthumb -mcpu=$(MCU) -msoft-float -mfix-$(MCU)-ldrd -Wl,--print-gc-sections

y

Código: [Seleccionar]
OPENCM3_PATH       = ../libopencm3

* test.zip
(3.52 kB - descargado 174 veces)


Desconectado Carl47D

  • PIC16
  • ***
  • Mensajes: 160
Re:Escribiendo Makefiles a mano
« Respuesta #4 en: 15 de Septiembre de 2016, 17:01:34 »
Gracias por el proyecto tsk!!, igual gracias por los tutos de como "convertir" vim en IDE, recién comienzo en Ubuntu y había configurado mal el YCM, se tardaba mucho tiempo en cargar al abrir vim :/ .

Citar
interesante!
estoy instalando ubuntu y quiero empezar a probar los stm32 en este ambiente.
las libopencm3 las habia visto hace un tiempo y me habían gustado, pero puede ser que el proyecto no haya avanzado más?

sds.

Al parecer siguen avanzando poco a poco, hay mucho movimiento en su repositorio y tienen soporte para los uC más comunes.

Estaría bueno hacer un thread con proyectos en libopencm3  :)

Saludos

Desconectado elgarbe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2178
Re:Escribiendo Makefiles a mano
« Respuesta #5 en: 15 de Septiembre de 2016, 23:17:17 »
si, sería interesante, pero también hay que notar que ST no se está quedando quieto con las críticas a sus HAL y ha incluido en sus ultimas versiones unas LL API's que estan pensadas no para portabilidad entre familias, sino para que sea una API más liviana, rápida y cercana al hardware.
Por ejemplo, para los L4 esta este manual:
http://www.st.com/content/ccc/resource/technical/document/user_manual/63/a8/8f/e3/ca/a1/4c/84/DM00173145.pdf/files/DM00173145.pdf/jcr:content/translations/en.DM00173145.pdf

saludos!
-
Leonardo Garberoglio

Desconectado Carl47D

  • PIC16
  • ***
  • Mensajes: 160
Re:Escribiendo Makefiles a mano
« Respuesta #6 en: 17 de Septiembre de 2016, 01:52:33 »
No conocía las API LL (vaya manual xD), tengo el propósito de familiarizarme con los ST, aunque pretendía empezar desde los uC menos "potentes" como los M0 o L0.
Y por ejemplo el tema donde tratas la transferencia por SPI con DMA me pareció muy interesante  :o, si logro hacer algo parecido con libopencm3 lo estaré subiendo.

Saludos

EDIT: Otra librería que me llama la atención es stm32plus, aunque no tiene soporte para muchos uC.
« Última modificación: 17 de Septiembre de 2016, 01:56:08 por Carl47D »

Desconectado elgarbe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2178
Re:Escribiendo Makefiles a mano
« Respuesta #7 en: 17 de Septiembre de 2016, 09:42:51 »
yo empecé a trabajar con este:
http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f0-series/stm32f0x0-value-line/stm32f030f4.html
es encapsulado TSSOP20, hice una pequeña placa de evaluacion para probarlo.
Si estás en Argentina y te interesa puedo enviarte una.

Saludos!
-
Leonardo Garberoglio

Desconectado Carl47D

  • PIC16
  • ***
  • Mensajes: 160
Re:Escribiendo Makefiles a mano
« Respuesta #8 en: 17 de Septiembre de 2016, 18:45:08 »
Hola,
No, estoy hasta México :(, de todas formas gracias, espero a que baje el dolar y me hago de una nucleo xD. Mientras me pongo a ver lo del linker script.

Saludos

Desconectado tsk

  • PIC18
  • ****
  • Mensajes: 257
Re:Escribiendo Makefiles a mano
« Respuesta #9 en: 19 de Septiembre de 2016, 11:02:55 »
Hola,
No, estoy hasta México :(, de todas formas gracias, espero a que baje el dolar y me hago de una nucleo xD. Mientras me pongo a ver lo del linker script.

Saludos

Los núcleo están bien, pero la mayoría de ellos vienen sin XTAL y sin el conector USB para el usuario, por lo que si en determinado momento decides hacer algo con USB tendrás que añadir la circuitería necesaria. Tengo 3 placas de esas,y sólo una de ellas tiene conector USB(nucleo-144 con el stm32f429zi).

Por otro lado puedes conseguir algunas placas de desarrollo mínimo a precios accesibles en páginas chinas, aunque algunos si es mejor adquirirlos en sitios como mouser, ya que salen más baratos.

Cuando hago pedidos en esas páginas chinas, el tiempo que tardan en llegar a la puerta de mi casa es de entre 15 a 30 días, con algunas excepciones, que dependen más de la fechas en que el pedido se hace y las fechas en que entran a México.

De igual forma nunca optes por métodos de envío por paqueterías privadas, siempre es mejor esperar, de lo contrario puedes terminar pagando más de lo que realmente fue el costo de los componentes. Y siempre pide correo registrado.

Desconectado Carl47D

  • PIC16
  • ***
  • Mensajes: 160
Re:Escribiendo Makefiles a mano
« Respuesta #10 en: 19 de Septiembre de 2016, 16:48:34 »
Hola tsk,
Si, he pedido un par de ocasiones de China y una vez tardó 1 mes en llegar a mi casa (soy de Edo Méx), y la otra 7 semanas ;/.
Los pedidos de Mouser me tardan 3 días, aunque a veces terminan siendo un par de dolares más en comparación a las placas de china.

Tendré en cuenta lo de la falta de USB para el usuario en las Nucleo, aunque para necesitarlo primero tengo que aprender a usarlo xD.

Saludos

Desconectado Carl47D

  • PIC16
  • ***
  • Mensajes: 160
Re:Escribiendo Makefiles a mano
« Respuesta #11 en: 03 de Octubre de 2016, 03:37:07 »
Acabo de descubrir esta otra librería: Unicore-Mx

Fork de libopencm3, pero con commits más constantes según su README:

Citar
The library is a fork of libopencm3. We highly value all the work done in libopencm3, but for our projects we need a higher commit rate than libopencm3 has at this point. We consider ourselves a friendly fork of libopencm3. We have different needs and wishes. These are in short:

    higher commit rate, we make changes, and we need those fast in order to continue with our projects.
    higher merge rate, we want to merge pull requests in a timely fashion, for us, for the contributors and for the community.
    unified API, we have a strong desire to have a unified API across vendors.
    stable API, we want to define an API and stick to it.
    CI/testing, we want proper Continuous Integration and tests.
    up to date examples that are compatible with our unified API.

Libopencm3 itself was written completely from scratch based on the vendor datasheets, programming manuals, and application notes. The code is meant to be used with a GCC toolchain for ARM (arm-elf or arm-none-eabi), flashing of the code to a microcontroller can be done using the OpenOCD ARM JTAG software.

In naming we will break compatibility with libopencm3 itself. While we feel it is a good choice to name subsytems according to the datasheet, this has caused the API to be incompatible across vendors. We wish it to be unified.

Saludos
-Carlos


 

anything