Jump to content

Recommended Posts

Posted

As I am getting many requests by people asking for a working STM32F7 Discovery project I decided to put mine in a repository so it is available to everybody.

You can find the repository here: https://bitbucket.org/Tectu/stm32f7-discovery

I just pushed the current state of the project without cleaning up as the demands are really high. Sorry for the mess.

Important

  • uGFX itself is not part of the project. You will need to download this separately and adjust the GFXLIB variable in the Makefile accordingly.
  • You can either just use a text editor & Make or you can use the Em::Blocks IDE (Make sure that you actually download Em::Bitz, not Em::Blocks). The project and configuration files for the Em::Bitz IDE are included in the project repository.
  • Please contribute your changes by sending pull requests so everybody can benefit.

Please leave all questions, comments, contributions and other feedback below.

~ Tectu

  • 3 months later...
Posted

Hello to everyone,

I need help in compiling demos on STM32F7Discovery board.

I'm using Eclipse as IDE and arm-none-eabi gcc compiler from launchpad

Steps that I'm doing:

1) edit the Makefile in ugfx/boards/base/STM32F746-Discovery/example_raw32:

GFXLIB    = /home/vlad/Program_Files/ARM_Eclipse/workspace/ugfx
STMHAL = /home/vlad/Program_Files/ARM_Eclipse/STM32Cube_FW_F7_V1.2.0/Drivers/STM32F7xx_HAL_Driver
CMSIS = /home/vlad/Program_Files/ARM_Eclipse/STM32Cube_FW_F7_V1.2.0/Drivers/CMSIS

2) make. After compilation with some warnings it fails to link the .elf:

Linking .build/example_raw32.elf
/home/vlad/Program_Files/ARM_Eclipse/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/bin/ld: error: .build/example_raw32.elf uses VFP register arguments, /home/vlad/Program_Files/ARM_Eclipse/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/libc.a(lib_a-init.o) does not
/home/vlad/Program_Files/ARM_Eclipse/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/bin/ld: failed to merge target specific data of file /home/vlad/Program_Files/ARM_Eclipse/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/libc.a(lib_a-init.o)
/home/vlad/Program_Files/ARM_Eclipse/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/bin/ld: error: .build/example_raw32.elf uses VFP register arguments, /home/vlad/Program_Files/ARM_Eclipse/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/libc.a(lib_a-memcpy.o) does not
/home/vlad/Program_Files/ARM_Eclipse/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/bin/ld: failed to merge target specific data of file /home/vlad/Program_Files/ARM_Eclipse/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/libc.a(lib_a-memcpy.o)
/home/vlad/Program_Files/ARM_Eclipse/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/bin/ld: error: .build/example_raw32.elf uses VFP register arguments, /home/vlad/Program_Files/ARM_Eclipse/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/libc.a(lib_a-memset.o) does not
/home/vlad/Program_Files/ARM_Eclipse/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/bin/ld: failed to merge target specific data of file /home/vlad/Program_Files/ARM_Eclipse/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/libc.a(lib_a-memset.o)
/home/vlad/Program_Files/ARM_Eclipse/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/bin/ld: error: /home/vlad/Program_Files/ARM_Eclipse/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/libc.a(lib_a-setjmp.o): Conflicting CPU architectures 13/1
/home/vlad/Program_Files/ARM_Eclipse/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/bin/ld: failed to merge target specific data of file /home/vlad/Program_Files/ARM_Eclipse/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/libc.a(lib_a-setjmp.o)
/home/vlad/Program_Files/ARM_Eclipse/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/bin/ld: error: .build/example_raw32.elf uses VFP register arguments, /home/vlad/Program_Files/ARM_Eclipse/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/libc.a(lib_a-strcpy.o) does not
/home/vlad/Program_Files/ARM_Eclipse/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/bin/ld: failed to merge target specific data of file /home/vlad/Program_Files/ARM_Eclipse/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/libc.a(lib_a-strcpy.o)
/home/vlad/Program_Files/ARM_Eclipse/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/bin/ld: error: .build/example_raw32.elf uses VFP register arguments, /home/vlad/Program_Files/ARM_Eclipse/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/libc.a(lib_a-strlen.o) does not
/home/vlad/Program_Files/ARM_Eclipse/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/bin/ld: failed to merge target specific data of file /home/vlad/Program_Files/ARM_Eclipse/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/libc.a(lib_a-strlen.o)
collect2: error: ld returned 1 exit status
/home/vlad/Program_Files/ARM_Eclipse/workspace/ugfx/tools/gmake_scripts/compiler_gcc.mk:282: recipe for target '.build/example_raw32.elf' failed
make: *** [.build/example_raw32.elf] Error 1

3) googling (http://stackoverflow.com/questions/9753 ... bject-file) gives that probably mfloat-abi shold be set to softfp rather than hard. So I tried to change the file ugfx/tools/gmake_scripts/cpu_stm32m7.mk:

SRCFLAGS += -mcpu=cortex-m7 -falign-functions=16 -mfloat-abi=softfp -mfpu=fpv4-sp-d16
LDFLAGS += -mcpu=cortex-m7 -falign-functions=16 -mfloat-abi=softfp -mfpu=fpv4-sp-d16
DEFS += CORTEX_USE_FPU=TRUE USE_FPU=softfp

and received another strange linker error:

Linking .build/example_raw32.elf
/home/vlad/Program_Files/ARM_Eclipse/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/bin/ld: error: /home/vlad/Program_Files/ARM_Eclipse/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/libc.a(lib_a-setjmp.o): Conflicting CPU architectures 13/1
/home/vlad/Program_Files/ARM_Eclipse/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/bin/ld: failed to merge target specific data of file /home/vlad/Program_Files/ARM_Eclipse/gcc-arm-none-eabi-4_9-2015q3/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/libc.a(lib_a-setjmp.o)
collect2: error: ld returned 1 exit status
/home/vlad/Program_Files/ARM_Eclipse/workspace/ugfx/tools/gmake_scripts/compiler_gcc.mk:282: recipe for target '.build/example_raw32.elf' failed
make: *** [.build/example_raw32.elf] Error 1

4) I tried compiler versions gcc-arm-none-eabi-4_9-2015q1 and gcc-arm-none-eabi-4_9-2015q3 but they behaves the same.

I saw a video on youtube with successful demonstration of demo on STM32F7Discovery so most probably I'm missing something to compile it.

I would appreciate for any help.

Thanks in advance,

Vlad.

Posted

It should definitely be "hard" as the cpu has hardware floating point.

It looks like you don't have the correct libc installed for hardware floating point. In fact it doesn't look like it is using f7 libraries at all.

Perhaps you are using a pre-f7 compiler as the f7 is a very recently supported cpu or atleast your libc is out of date (note the "conflicting archetecture error in the 2nd build)

Posted

Thanks for the reply,

if I understand everything right about gcc-arm-none-eabi, it uses it's own libgcc.a instead of libc.a?

Which compiler did you use to build the demo?

With mentioned compilers I'm able to build some projects which don't contain uGFX for STM32F7 Discovery in Eclipse.

Posted

There is definitely a problem with your standard c library (whatever it is called).

You can however just avoid the problem by changing the cpu setting at the top of the makefile. Try using the stm32m4 setting etc.

Whilst this may get you round your library problem you will lose any cpu optimizations.

This is likely why your other projects worked, they are not turning on the f7 specific compile flags.

Ohh - dont forget to do a make clean in between changing any of these flags

Posted

The problem solved with changing -mfpu=fpv4-sp-d16 to -mfpu=fpv5-sp-d16 in ugfx/tools/gmake_scripts/cpu_stm32m7.mk (twice).

Thanks for your help!

You guys are doing an impressive work.

  • 1 month later...
Posted

Hi,

I'm a newbie student trying to use UGFX on the STM32F7.

I'm using the stm32f7 project and the ugfx lib from bitbucket.

I've modified the makefile, and fixed a first problem adding "INCPATH = $(HAL)/Inc".

But now i've an other issue and i don't find the way to fix it : "make: *** No rule to make target `.build/obj//Src/stm32f7xx_hal.o', needed by `.build/stm32f7-discovery.elf'. Stop."

ent@kentXu:~/Projects/ugfx_Workspace/stm32f7-discovery$ make
.
C Compiler Options....
arm-none-eabi-gcc -c -g3 -ggdb -O0 -std=c99 -g3 -mcpu=cortex-m7 -falign-functions=16 -mfloat-abi=hard -mfpu=fpv5-sp-d16 -fsingle-precision-constant -fomit-frame-pointer -Wall -Wextra -Wstrict-prototypes -fverbose-asm -MMD -MP -MF .build/dep/fakethumbfile.o.d -I. -ISTM32F7xx_HAL_Driver/Inc -I../ugfx -I../ugfx/3rdparty/tinygl-0.4-ugfx/include -I../ugfx/boards/base/STM32F746-Discovery -ICMSIS/Device/ST/STM32F7xx/Include -ICMSIS/Include -I/Inc -I../ugfx/drivers/gdisp/STM32LTDC -DSTM32F746xx -DGFX_OS_PRE_INIT_FUNCTION=Raw32OSInit -DGFX_OS_INIT_NO_WARNING=TRUE -DGFX_USE_OS_RAW32=TRUE -DCORTEX_USE_FPU=TRUE -DUSE_FPU=hard -DTHUMB_PRESENT -DTHUMB_NO_INTERWORKING -mthumb -DTHUMB fakethumbfile.c -o .build/obj/fakethumbfile.o
.
Assembler Options.....
arm-none-eabi-gcc -c -g3 -ggdb -O0 -std=c99 -g3 -mcpu=cortex-m7 -falign-functions=16 -mfloat-abi=hard -mfpu=fpv5-sp-d16 -fsingle-precision-constant -fomit-frame-pointer -Wall -Wextra -Wstrict-prototypes -fverbose-asm -MMD -MP -MF .build/dep/fakethumbfile.o.d -I. -ISTM32F7xx_HAL_Driver/Inc -I../ugfx -I../ugfx/3rdparty/tinygl-0.4-ugfx/include -I../ugfx/boards/base/STM32F746-Discovery -ICMSIS/Device/ST/STM32F7xx/Include -ICMSIS/Include -I/Inc -I../ugfx/drivers/gdisp/STM32LTDC -DSTM32F746xx -DGFX_OS_PRE_INIT_FUNCTION=Raw32OSInit -DGFX_OS_INIT_NO_WARNING=TRUE -DGFX_USE_OS_RAW32=TRUE -DCORTEX_USE_FPU=TRUE -DUSE_FPU=hard -DTHUMB_PRESENT -DTHUMB_NO_INTERWORKING -mthumb -DTHUMB fakethumbfile.s -o .build/obj/fakethumbfile.o
.
Linker Options........
arm-none-eabi-gcc -mcpu=cortex-m7 -falign-functions=16 -mfloat-abi=hard -mfpu=fpv5-sp-d16 -fsingle-precision-constant -nostartfiles -mthumb -Wl,-Map=.build/stm32f7-discovery.map,--cref -T../ugfx/boards/base/STM32F746-Discovery/stm32f746nghx_flash.ld -lm .build/obj/fakethumbfile.o -o .build/stm32f7-discovery.elf
.
make: *** No rule to make target `.build/obj//Src/stm32f7xx_hal.o', needed by `.build/stm32f7-discovery.elf'. Stop.

Somebody could help me with that ?

Thanks

  • 4 weeks later...
Posted

Kent... I came across the same error.

As vlad had suggested, I tried adding the paths (as shown below) to ugfx/boards/base/STM32F746-Discovery/example_raw32 - which didn't help. It compiled fine when I added the same lines to

ugfx\ugfx\boards\base\STM32F746-Discovery . May not be proper way, I hope the higher powers would take a look ;>


STMHAL = /home/vlad/Program_Files/ARM_Eclipse/STM32Cube_FW_F7_V1.2.0/Drivers/STM32F7xx_HAL_Driver
CMSIS = /home/vlad/Program_Files/ARM_Eclipse/STM32Cube_FW_F7_V1.2.0/Drivers/CMSIS

Also you might have to add this to Makefile in the root of the project dir.

INCPATH  = ./STM32F7xx_HAL_Driver/Inc

Posted

Oh dear, I completely forgot about this one! Sorry!

I got disturbed while working on the new STM32F746-Discovery baremetal project and then forgot about it.

Sadly I won't have time to finish this in the next 10 days. However, I already have a project that compiles correctly, it just currently doesn't show anything on the screen. If anybody wants to have an early look I attached the project to this post. The new project uses a new dedicated Makefile and the latest STM32F7Cube HAL.

Edit: I just had a look. There must be an issue in the initialization code as the LED doesn't start flashing. Compiling with uGFX works just fine, tho. If nobody will have fixed this I'll finish this next week.

~ Tectu

Posted

I've tried to get ugfx with the board working to no avail. Now I am as far as getting to the linker without errors, but now there are some functions missing. It looks like the modules are not properly included... but I have no idea why or how to fix that. Any Ideas?

Building target: dmxprobe
Invoking: Cross ARM C++ Linker
arm-none-eabi-g++ -mcpu=cortex-m7 -mthumb -O2 -g -Xlinker --gc-sections -Wl,-Map,"dmxprobe.map" -o "dmxprobe" ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_adc.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_adc_ex.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_can.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_cec.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_cortex.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_crc.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_crc_ex.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_cryp.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_cryp_ex.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dac.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dac_ex.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dcmi.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dcmi_ex.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma2d.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma_ex.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_eth.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash_ex.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_hash.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_hash_ex.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_hcd.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c_ex.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2s.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_irda.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_iwdg.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_lptim.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_ltdc.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_msp_template.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_nand.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_nor.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pcd.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pcd_ex.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr_ex.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_qspi.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc_ex.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rng.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rtc.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rtc_ex.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_sai.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_sai_ex.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_sd.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_sdram.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_smartcard.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_smartcard_ex.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_spdifrx.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_spi.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_sram.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_usart.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_wwdg.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_fmc.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_sdmmc.o ./STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_usb.o ./CMSIS/Device/ST/STM32F7xx/Source/Templates/system_stm32f7xx.o ./CMSIS/DSP_Lib/Source/TransformFunctions/arm_bitreversal.o ./CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_f32.o ./CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_q15.o ./CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_q31.o ./CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_radix2_f32.o ./CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_radix2_init_f32.o ./CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_radix2_init_q15.o ./CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_radix2_init_q31.o ./CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_radix2_q15.o ./CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_radix2_q31.o ./CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_radix4_f32.o ./CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_radix4_init_f32.o ./CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_radix4_init_q15.o ./CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_radix4_init_q31.o ./CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_radix4_q15.o ./CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_radix4_q31.o ./CMSIS/DSP_Lib/Source/TransformFunctions/arm_cfft_radix8_f32.o ./CMSIS/DSP_Lib/Source/TransformFunctions/arm_dct4_f32.o ./CMSIS/DSP_Lib/Source/TransformFunctions/arm_dct4_init_f32.o ./CMSIS/DSP_Lib/Source/TransformFunctions/arm_dct4_init_q15.o ./CMSIS/DSP_Lib/Source/TransformFunctions/arm_dct4_init_q31.o ./CMSIS/DSP_Lib/Source/TransformFunctions/arm_dct4_q15.o ./CMSIS/DSP_Lib/Source/TransformFunctions/arm_dct4_q31.o ./CMSIS/DSP_Lib/Source/TransformFunctions/arm_rfft_f32.o ./CMSIS/DSP_Lib/Source/TransformFunctions/arm_rfft_fast_f32.o ./CMSIS/DSP_Lib/Source/TransformFunctions/arm_rfft_fast_init_f32.o ./CMSIS/DSP_Lib/Source/TransformFunctions/arm_rfft_init_f32.o ./CMSIS/DSP_Lib/Source/TransformFunctions/arm_rfft_init_q15.o ./CMSIS/DSP_Lib/Source/TransformFunctions/arm_rfft_init_q31.o ./CMSIS/DSP_Lib/Source/TransformFunctions/arm_rfft_q15.o ./CMSIS/DSP_Lib/Source/TransformFunctions/arm_rfft_q31.o ./CMSIS/DSP_Lib/Source/SupportFunctions/arm_copy_f32.o ./CMSIS/DSP_Lib/Source/SupportFunctions/arm_copy_q15.o ./CMSIS/DSP_Lib/Source/SupportFunctions/arm_copy_q31.o ./CMSIS/DSP_Lib/Source/SupportFunctions/arm_copy_q7.o ./CMSIS/DSP_Lib/Source/SupportFunctions/arm_fill_f32.o ./CMSIS/DSP_Lib/Source/SupportFunctions/arm_fill_q15.o ./CMSIS/DSP_Lib/Source/SupportFunctions/arm_fill_q31.o ./CMSIS/DSP_Lib/Source/SupportFunctions/arm_fill_q7.o ./CMSIS/DSP_Lib/Source/SupportFunctions/arm_float_to_q15.o ./CMSIS/DSP_Lib/Source/SupportFunctions/arm_float_to_q31.o ./CMSIS/DSP_Lib/Source/SupportFunctions/arm_float_to_q7.o ./CMSIS/DSP_Lib/Source/SupportFunctions/arm_q15_to_float.o ./CMSIS/DSP_Lib/Source/SupportFunctions/arm_q15_to_q31.o ./CMSIS/DSP_Lib/Source/SupportFunctions/arm_q15_to_q7.o ./CMSIS/DSP_Lib/Source/SupportFunctions/arm_q31_to_float.o ./CMSIS/DSP_Lib/Source/SupportFunctions/arm_q31_to_q15.o ./CMSIS/DSP_Lib/Source/SupportFunctions/arm_q31_to_q7.o ./CMSIS/DSP_Lib/Source/SupportFunctions/arm_q7_to_float.o ./CMSIS/DSP_Lib/Source/SupportFunctions/arm_q7_to_q15.o ./CMSIS/DSP_Lib/Source/SupportFunctions/arm_q7_to_q31.o ./CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_max_f32.o ./CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_max_q15.o ./CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_max_q31.o ./CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_max_q7.o ./CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_mean_f32.o ./CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_mean_q15.o ./CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_mean_q31.o ./CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_mean_q7.o ./CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_min_f32.o ./CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_min_q15.o ./CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_min_q31.o ./CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_min_q7.o ./CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_power_f32.o ./CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_power_q15.o ./CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_power_q31.o ./CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_power_q7.o ./CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_rms_f32.o ./CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_rms_q15.o ./CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_rms_q31.o ./CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_std_f32.o ./CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_std_q15.o ./CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_std_q31.o ./CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_var_f32.o ./CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_var_q15.o ./CMSIS/DSP_Lib/Source/StatisticsFunctions/arm_var_q31.o ./CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_add_f32.o ./CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_add_q15.o ./CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_add_q31.o ./CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_cmplx_mult_f32.o ./CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_cmplx_mult_q15.o ./CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_cmplx_mult_q31.o ./CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_init_f32.o ./CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_init_q15.o ./CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_init_q31.o ./CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_inverse_f32.o ./CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_inverse_f64.o ./CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_mult_f32.o ./CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_mult_fast_q15.o ./CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_mult_fast_q31.o ./CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_mult_q15.o ./CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_mult_q31.o ./CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_scale_f32.o ./CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_scale_q15.o ./CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_scale_q31.o ./CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_sub_f32.o ./CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_sub_q15.o ./CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_sub_q31.o ./CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_trans_f32.o ./CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_trans_q15.o ./CMSIS/DSP_Lib/Source/MatrixFunctions/arm_mat_trans_q31.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_32x64_init_q31.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_32x64_q31.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_f32.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_fast_q15.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_fast_q31.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_init_f32.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_init_q15.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_init_q31.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_q15.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_q31.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df2T_f32.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df2T_f64.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df2T_init_f32.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df2T_init_f64.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_stereo_df2T_f32.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_stereo_df2T_init_f32.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_f32.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_fast_opt_q15.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_fast_q15.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_fast_q31.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_opt_q15.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_opt_q7.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_f32.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_fast_opt_q15.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_fast_q15.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_fast_q31.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_opt_q15.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_opt_q7.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_q15.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_q31.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_q7.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_q15.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_q31.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_conv_q7.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_correlate_f32.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_correlate_fast_opt_q15.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_correlate_fast_q15.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_correlate_fast_q31.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_correlate_opt_q15.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_correlate_opt_q7.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_correlate_q15.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_correlate_q31.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_correlate_q7.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_decimate_f32.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_decimate_fast_q15.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_decimate_fast_q31.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_decimate_init_f32.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_decimate_init_q15.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_decimate_init_q31.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_decimate_q15.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_decimate_q31.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_f32.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_fast_q15.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_fast_q31.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_init_f32.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_init_q15.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_init_q31.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_init_q7.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_interpolate_f32.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_interpolate_init_f32.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_interpolate_init_q15.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_interpolate_init_q31.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_interpolate_q15.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_interpolate_q31.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_lattice_f32.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_lattice_init_f32.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_lattice_init_q15.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_lattice_init_q31.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_lattice_q15.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_lattice_q31.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_q15.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_q31.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_q7.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_sparse_f32.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_sparse_init_f32.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_sparse_init_q15.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_sparse_init_q31.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_sparse_init_q7.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_sparse_q15.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_sparse_q31.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_fir_sparse_q7.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_iir_lattice_f32.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_iir_lattice_init_f32.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_iir_lattice_init_q15.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_iir_lattice_init_q31.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_iir_lattice_q15.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_iir_lattice_q31.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_lms_f32.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_lms_init_f32.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_lms_init_q15.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_lms_init_q31.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_lms_norm_f32.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_lms_norm_init_f32.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_lms_norm_init_q15.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_lms_norm_init_q31.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_lms_norm_q15.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_lms_norm_q31.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_lms_q15.o ./CMSIS/DSP_Lib/Source/FilteringFunctions/arm_lms_q31.o ./CMSIS/DSP_Lib/Source/FastMathFunctions/arm_cos_f32.o ./CMSIS/DSP_Lib/Source/FastMathFunctions/arm_cos_q15.o ./CMSIS/DSP_Lib/Source/FastMathFunctions/arm_cos_q31.o ./CMSIS/DSP_Lib/Source/FastMathFunctions/arm_sin_f32.o ./CMSIS/DSP_Lib/Source/FastMathFunctions/arm_sin_q15.o ./CMSIS/DSP_Lib/Source/FastMathFunctions/arm_sin_q31.o ./CMSIS/DSP_Lib/Source/FastMathFunctions/arm_sqrt_q15.o ./CMSIS/DSP_Lib/Source/FastMathFunctions/arm_sqrt_q31.o ./CMSIS/DSP_Lib/Source/ControllerFunctions/arm_pid_init_f32.o ./CMSIS/DSP_Lib/Source/ControllerFunctions/arm_pid_init_q15.o ./CMSIS/DSP_Lib/Source/ControllerFunctions/arm_pid_init_q31.o ./CMSIS/DSP_Lib/Source/ControllerFunctions/arm_pid_reset_f32.o ./CMSIS/DSP_Lib/Source/ControllerFunctions/arm_pid_reset_q15.o ./CMSIS/DSP_Lib/Source/ControllerFunctions/arm_pid_reset_q31.o ./CMSIS/DSP_Lib/Source/ControllerFunctions/arm_sin_cos_f32.o ./CMSIS/DSP_Lib/Source/ControllerFunctions/arm_sin_cos_q31.o ./CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_conj_f32.o ./CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_conj_q15.o ./CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_conj_q31.o ./CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_dot_prod_f32.o ./CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_dot_prod_q15.o ./CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_dot_prod_q31.o ./CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mag_f32.o ./CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mag_q15.o ./CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mag_q31.o ./CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mag_squared_f32.o ./CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mag_squared_q15.o ./CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mag_squared_q31.o ./CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mult_cmplx_f32.o ./CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mult_cmplx_q15.o ./CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mult_cmplx_q31.o ./CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mult_real_f32.o ./CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mult_real_q15.o ./CMSIS/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mult_real_q31.o ./CMSIS/DSP_Lib/Source/CommonTables/arm_common_tables.o ./CMSIS/DSP_Lib/Source/CommonTables/arm_const_structs.o ./CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_abs_f32.o ./CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_abs_q15.o ./CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_abs_q31.o ./CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_abs_q7.o ./CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_add_f32.o ./CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_add_q15.o ./CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_add_q31.o ./CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_add_q7.o ./CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_dot_prod_f32.o ./CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_dot_prod_q15.o ./CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_dot_prod_q31.o ./CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_dot_prod_q7.o ./CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_mult_f32.o ./CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_mult_q15.o ./CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_mult_q31.o ./CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_mult_q7.o ./CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_negate_f32.o ./CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_negate_q15.o ./CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_negate_q31.o ./CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_negate_q7.o ./CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_offset_f32.o ./CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_offset_q15.o ./CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_offset_q31.o ./CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_offset_q7.o ./CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_scale_f32.o ./CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_scale_q15.o ./CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_scale_q31.o ./CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_scale_q7.o ./CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_shift_q15.o ./CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_shift_q31.o ./CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_shift_q7.o ./CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_sub_f32.o ./CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_sub_q15.o ./CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_sub_q31.o ./CMSIS/DSP_Lib/Source/BasicMathFunctions/arm_sub_q7.o ./main.o
./main.o: In function `_heartbeat':
E:\Projekte\eclipse\dmxprobe\Default/../main.c:27: undefined reference to `gfxSleepMilliseconds'
./main.o: In function `_updateColor':
E:\Projekte\eclipse\dmxprobe\Default/../main.c:45: undefined reference to `gwinClear'
./main.o: In function `main':
E:\Projekte\eclipse\dmxprobe\Default/../main.c:153: undefined reference to `gfxInit'
E:\Projekte\eclipse\dmxprobe\Default/../main.c:156: undefined reference to `gdispOpenFont'
E:\Projekte\eclipse\dmxprobe\Default/../main.c:156: undefined reference to `gwinSetDefaultFont'
E:\Projekte\eclipse\dmxprobe\Default/../main.c:157: undefined reference to `gwinSetDefaultStyle'
E:\Projekte\eclipse\dmxprobe\Default/../main.c:158: undefined reference to `gdispGClear'
./main.o: In function `_guiCreate':
E:\Projekte\eclipse\dmxprobe\Default/../main.c:56: undefined reference to `gwinWidgetClearInit'
E:\Projekte\eclipse\dmxprobe\Default/../main.c:65: undefined reference to `gwinGLabelCreate'
E:\Projekte\eclipse\dmxprobe\Default/../main.c:73: undefined reference to `gwinGFrameCreate'
E:\Projekte\eclipse\dmxprobe\Default/../main.c:82: undefined reference to `gwinGButtonCreate'
E:\Projekte\eclipse\dmxprobe\Default/../main.c:91: undefined reference to `gwinGSliderCreate'
E:\Projekte\eclipse\dmxprobe\Default/../main.c:92: undefined reference to `gwinSliderSetRange'
E:\Projekte\eclipse\dmxprobe\Default/../main.c:93: undefined reference to `gwinSliderSetPosition'
E:\Projekte\eclipse\dmxprobe\Default/../main.c:102: undefined reference to `gwinGButtonCreate'
E:\Projekte\eclipse\dmxprobe\Default/../main.c:111: undefined reference to `gwinGSliderCreate'
E:\Projekte\eclipse\dmxprobe\Default/../main.c:112: undefined reference to `gwinSliderSetRange'
E:\Projekte\eclipse\dmxprobe\Default/../main.c:113: undefined reference to `gwinSliderSetPosition'
E:\Projekte\eclipse\dmxprobe\Default/../main.c:122: undefined reference to `gwinGButtonCreate'
E:\Projekte\eclipse\dmxprobe\Default/../main.c:131: undefined reference to `gwinGSliderCreate'
E:\Projekte\eclipse\dmxprobe\Default/../main.c:132: undefined reference to `gwinSliderSetRange'
E:\Projekte\eclipse\dmxprobe\Default/../main.c:133: undefined reference to `gwinSliderSetPosition'
E:\Projekte\eclipse\dmxprobe\Default/../main.c:140: undefined reference to `gwinGWindowCreate'
./main.o: In function `main':
E:\Projekte\eclipse\dmxprobe\Default/../main.c:164: undefined reference to `geventListenerInit'
E:\Projekte\eclipse\dmxprobe\Default/../main.c:165: undefined reference to `gwinAttachListener'
E:\Projekte\eclipse\dmxprobe\Default/../main.c:168: undefined reference to `gfxThreadCreate'
E:\Projekte\eclipse\dmxprobe\Default/../main.c:172: undefined reference to `geventEventWait'
E:\Projekte\eclipse\dmxprobe\Default/../main.c:189: undefined reference to `gwinSliderSetPosition'
E:\Projekte\eclipse\dmxprobe\Default/../main.c:185: undefined reference to `gwinSliderSetPosition'
E:\Projekte\eclipse\dmxprobe\Default/../main.c:187: undefined reference to `gwinSliderSetPosition'
E:\Projekte\eclipse\dmxprobe\Default/../main.c:187: undefined reference to `GDISP'
E:\Projekte\eclipse\dmxprobe\Default/../main.c:187: undefined reference to `WhiteWidgetStyle'
collect2.exe: error: ld returned 1 exit status
makefile:62: recipe for target 'dmxprobe' failed
make: *** [dmxprobe] Error 1

Posted

Hello CShark and welcome to the community!

When I understand you correctly you managed to make the LED blinking with the project I attached in my last post?

The errors you get is because uGFX isn't available/linked properly. I just took a look and it seems like I have removed the uGFX part from the Makefile. What you need to do in the Makefile is the following:

  • Set the GFXLIB variable to the path pointing to the µGFX library root directory
  • Include the main µGFX Makefile (/ugfx/gfx.mk)
  • Add GFXSRC to the sources variable/list
  • Add GFXINC to the include paths variable/list
  • Include additional Makefiles of the µGFX library to include board files, drivers, ...

That would look something like that (I haven't tested it! I'm currently on the road):


################################################################################
# Generic Makefile for STM32 based applications using StdPeriph/STM32Cube. #
# #
# Copyright (C) 2015 by Joel Bodenmann #
# #
# Feel free to use this makefile without any warranty on your own risk. #
################################################################################

# This is the name of the binaries that will be generated
TARGET = project

# Some paths
CMSIS = CMSIS
HAL = STM32F7xx_HAL_Driver

# Include uGFX stuff, don't forget about $(GFXSRC) and $(GFXINC) further below
GFXLIB = /path/to/your/ugfx/directory
include $(GFXLIB)/gfx.mk
include $(GFXLIB)/boards/base/STM32F746-Discovery/board.mk

# Here we add all *.c files that we want to compile
CSRCS = \
$(GFXSRC) \
$(HAL)/Src/stm32f7xx_hal.c \
$(HAL)/Src/stm32f7xx_hal_cortex.c \
$(HAL)/Src/stm32f7xx_hal_flash.c \
$(HAL)/Src/stm32f7xx_hal_flash_ex.c \
$(HAL)/Src/stm32f7xx_hal_rcc.c \
$(HAL)/Src/stm32f7xx_hal_rcc_ex.h \
$(HAL)/Src/stm32f7xx_hal_gpio.c \
$(HAL)/Src/stm32f7xx_hal_dma.c \
$(HAL)/Src/stm32f7xx_hal_i2c.c \
$(HAL)/Src/stm32f7xx_hal_ltdc.c \
$(HAL)/Src/stm32f7xx_hal_pwr.c \
$(HAL)/Src/stm32f7xx_hal_pwr_ex.h \
system_stm32f7xx.c \
main.c

# Here we add all *.cpp files that we want to compile
CPPSRCS =

# Here we add all *.s files that we want to compile (Don't include startup file)
ASSRCS =

# Here we add the paths to all include directories
INCS = \
$(GFXINC) \
$(CMSIS)/Device/ST/STM32F7xx/Include \
$(CMSIS)/Include \
$(HAL)/Inc \
.

# here we add the paths to all custom libraries
LIBDIRS =

# here we add libraries
LIBS =

# StartUp file
STARTUP = startup_stm32f746xx.s

# Linker script
LDSCRIPT = stm32f746nghx_flash.ld

# The controller type
CONTROLLER = STM32F746xx

# MCU flags
MCUFLAGS = -mthumb -mcpu=cortex-m7

# Should a map file be generated? (yes / no)
GENERATE_MAP = no

# The following variables hold binaries and settings
ARCH = arm-none-eabi
AS = $(ARCH)-gcc
LD = $(ARCH)-gcc
CC = $(ARCH)-gcc
CPPC = $(ARCH)-g++
SIZE = $(ARCH)-size
OBJCOPY = $(ARCH)-objcopy
ASFLAGS = -ggdb -Wall
CFLAGS = -ggdb -Wall -std=c99
CPPFLAGS = -ggdb -Wall
LDFLAGS = -lnosys -fno-exceptions -fdata-sections

################################################################################
# Don't change anything below this line #
################################################################################

# Some directory and file magic
BUILDDIR = build
OBJDIR = $(BUILDDIR)/obj
MAPFILE = $(BUILDDIR)/$(TARGET).map

# Add the startup file
ASSRCS += $(STARTUP)

# Generate the object names
OBJS = $(addprefix $(OBJDIR)/,$(addsuffix .o,$(basename $(CSRCS:%.c=%.o))))
OBJS += $(addprefix $(OBJDIR)/,$(addsuffix .o,$(basename $(ASSRCS:%.s=%.o))))
OBJS += $(addprefix $(OBJDIR)/,$(addsuffix .o,$(basename $(CPPSRCS:%.cpp=%.o))))

# Automate the inclusion paths
CFLAGS += $(INCS:%=-I%) $(MCUFLAGS) -D$(CONTROLLER) -DUSE_STDPERIPH_DRIVER
CPPFLAGS += $(INCS:%=-I%)
LDFLAGS += $(LIBDIRS:%=-L%) $(INCS:%=-I%) $(LIBS) $(MCUFLAGS) -T$(LDSCRIPT)

# Some user settings magic
ifeq ($(GENERATE_MAP), yes)
LDFLAGS += -Wl,-Map=$(MAPFILE),--cref
endif

# This is the default target if the user does just calls 'make'
all: build size

# Build all the files
build: builddirs $(BUILDDIR)/$(TARGET).elf $(BUILDDIR)/$(TARGET).bin $(BUILDDIR)/$(TARGET).hex

# Create the required directories (if not already existing)
builddirs:
@mkdir -p $(BUILDDIR)
@mkdir -p $(OBJDIR)

# Create the *.bin
$(BUILDDIR)/%.bin: $(BUILDDIR)/$(TARGET).elf
@$(OBJCOPY) -O binary $< $@

# Create the *.hex
$(BUILDDIR)/%.hex: $(BUILDDIR)/$(TARGET).elf
@$(OBJCOPY) -O ihex $< $@

# Link everything together to a *.elf file
$(BUILDDIR)/$(TARGET).elf: $(OBJS)
@echo Linking $@
@$(LD) $(LDFLAGS) -o $(BUILDDIR)/$(TARGET).elf $(OBJS)

# Compile assembly files
$(OBJDIR)/%.o: %.s
@mkdir -p $(dir $@)
@echo Compiling $^
@$(AS) $(ASFLAGS) -c -o $@ $^

# Compile c files
$(OBJDIR)/%.o: %.c
@mkdir -p $(dir $@)
@echo Compiling $^
@$(CC) $(CFLAGS) -c -o $@ $^

# Compile cpp files
$(OBJDIR)/%.o: %.cpp
@mkdir -p $(dir $@)
@echo Compiling $^
@$(CPPC) $(CPPFLAGS) -c -o $@ $^

# Print size information
size: $(BUILDDIR)/$(TARGET).elf
@echo
@echo
$(SIZE) $^
@echo $(FOO)

# Clean up
clean:
@rm -rf *.o $(BUILDDIR) $(OBJS) $($MAPFILE) $(TARGET).*
@echo Done

# Clean must be a phony target so make knows this never exists as a file
.PHONY: clean

~ Tectu

Posted

It worked!!

First, I forgot to turn off the auto generated makefile in eclipse. The second mistake was to use eclipse instead of cygwin. Now everything works fine. Thats a starting point, at least.

Posted

That's nice! Can you upload your project so everybody can benefit? At the end we want heavily extend the 'ready-to-use' projects that can be downloaded from the uGFX homepage.

Just to clarify: Did you get this working based on the project I posted a couple of posts earlier?

~ Tectu

Posted

Hello!

I'm also trying to use an Windows Eclipse environment, I've pointed to the makefile (I think) but on trying to build the project you've designed I recieve the following error:

The system cannot find the path specified.
The syntax of the command is incorrect.
make: *** [builddirs] Error 1

I know this happens because this IDE needs to use mkdir [path]\[subpath] instead of mkdir -p [path]/[subpath]

On replacing / with \ in compiler_gcc.mk only I get the following error:

make: *** No rule to make target `.build\obj\main.o', needed by `.build\.elf'.  Stop.

Am I making life difficult for myself? Where am I going astray?

Posted

I think you are using a bad make executable. You need to use one that is gnu compatible.

Both the cygwin system and the mingw system produce suitable make executables. Our preference is for the mingw version because of some cygwin strange pathing problems. Our makefile is designed to use either.

You are probably using the old msdos make which is too simple for this type of project.

The other possibility is that you have spaces in one of your path variables in the makefile. This is a no-no due to inadequacies in the gnu make.

Once you have sorted out the make executable on your path you will need to change those \'s back into /'s

Posted
Both the cygwin system and the mingw system produce suitable make executables. Our preference is for the mingw version because of some cygwin strange pathing problems. Our makefile is designed to use either.

If he's using the project I attached in a post above then he's not using our makefiles. The baremetal project for the STM32F746-Discovery currently uses one of my own makefiles (to keep stuff easy to understand for people who want to use this as a starting point) and doesn't use the ones that come with the uGFX repository.

I guess we have to wait until CShark provides us with his fixed version of the project that actually works.

~ Tectu

Posted

While working out where the error was, I did a complete rollback to the old makefile. Good news though, I got it to compile even using eclipse. I will try to implement the cubemx makefile step by step today/tomorrow.

Posted (edited)

Regarding Eclipse:

I needed the gnu arm eclipse plugin[1], arm build tools for windows [2] and cygwin. [1] provides the compiler and linker for the stm32, [2] provides a more recent gnu make and cygwin provided me with a working mkdir (package has to be installed).

To get it finally up and running, I imported the makefile project into eclipse and did the following adjustments:

Open the Project Properties and make sure/change:

1. C/C++ Build: Make sure "Generate makefiles automatically" is turned off

2. C/C++ Build->Environment: Make sure "PATH" contains cygwin's bin path (probably doesn't) and the paths to build tools and the compiler bin path (should already be)

For a working IDE with code completion and stuff:

C/C++ General->Paths and Symbols: include everything that you need, in my case I needed the path to the root of ugfx and some include dirs in the project dir.

Also make sure to never use drive letters in makefiles. You'll get some weird errors with targets failing/missing and other stuff. Always use relative paths.

Some demos or functions complain about a missing _sbrk. Create a file "_sbrk.c" containing the following code to fix the error:

#include "gfx.h"

char* _sbrk(int incr) {
return (char *)gfxAlloc(incr);
}

Oh, and \ actually has another meaning in a makefile, don't use it in paths. \ joins multiple lines into one. Cygwins mkdir works fine with the paths and cmd arguments provided by ugfx.

[1]: http://gnuarmeclipse.github.io/

[2]: http://gnuarmeclipse.github.io/windows-build-tools/

Edited by Guest
Posted

Thank you for providing this detailed information! Hopefully this will help BenjyC to get his project up and running.

But I have to ask again, just to be sure: Did you use the project from the bitbucket repository or the one I attached to a forum post on the previous page? If you used the latter, can you please let us know what modifications were required to get it working (because currently it seems like it hardfaults) and/or provide a ZIP with the modified, working project?

~ Tectu

Posted (edited)

I started with your file, but to track down the make errors, I reversed it bit by bit until I got the bitbucket one. Now I applied all changes forward and have a working makefile with the version you provided. So first a list of all changes and afterwards an explanation.

Things to change in ugfx:

/boards/base/STM32F746-Discovery/board.mk

GFXINC  +=	$(GFXLIB)/boards/base/STM32F746-Discovery
GFXSRC += $(GFXLIB)/boards/base/STM32F746-Discovery/stm32f746g_discovery_sdram.c \
$(GFXLIB)/boards/base/STM32F746-Discovery/stm32f7_i2c.c

ifeq ($(OPT_OS),raw32)
GFXDEFS += STM32F746xx
GFXSRC += $(STMHAL)/Src/stm32f7xx_hal.c \
$(STMHAL)/Src/stm32f7xx_hal_cortex.c \
$(STMHAL)/Src/stm32f7xx_hal_rcc.c \
$(STMHAL)/Src/stm32f7xx_hal_rcc_ex.h \
$(STMHAL)/Src/stm32f7xx_hal_gpio.c \
$(STMHAL)/Src/stm32f7xx_hal_pwr.c \
$(STMHAL)/Src/stm32f7xx_hal_pwr_ex.c
STARTUP = $(GFXLIB)/boards/base/STM32F746-Discovery/stm32f746g_raw32_startup.s
GFXSRC += $(GFXLIB)/boards/base/STM32F746-Discovery/stm32f746g_raw32_ugfx.c \
$(GFXLIB)/boards/base/STM32F746-Discovery/stm32f746g_raw32_system.c \
$(GFXLIB)/boards/base/STM32F746-Discovery/stm32f746g_raw32_interrupts.c
GFXDEFS += GFX_OS_PRE_INIT_FUNCTION=Raw32OSInit GFX_OS_INIT_NO_WARNING=TRUE
GFXINC += $(CMSIS)/Device/ST/STM32F7xx/Include \
$(CMSIS)/Include \
$(STMHAL)/Inc
LDSCRIPT = $(GFXLIB)/boards/base/STM32F746-Discovery/stm32f746nghx_flash.ld
endif

include $(GFXLIB)/tools/gmake_scripts/cpu_stm32m7.mk
include $(GFXLIB)/drivers/gdisp/STM32LTDC/driver.mk
include $(GFXLIB)/drivers/ginput/touch/FT5336/driver.mk

And finally, the makefile:

################################################################################
# Generic Makefile for STM32 based applications using StdPeriph/STM32Cube. #
# #
# Copyright (C) 2015 by Joel Bodenmann #
# #
# Feel free to use this makefile without any warranty on your own risk. #
################################################################################

# This is the name of the binaries that will be generated
TARGET = project

# Some paths
OPT_OS = raw32
CMSIS = CMSIS
STMHAL = STM32F7xx_HAL_Driver
GFXBOARD = STM32F746-Discovery

# Include uGFX stuff, don't forget about $(GFXSRC) and $(GFXINC) further below
GFXLIB = ../ugfx-ca0be9403f25
include $(GFXLIB)/gfx.mk

# Here we add all *.c files that we want to compile
CSRCS = \
$(GFXSRC) \
$(STMHAL)/Src/stm32f7xx_hal_flash.c \
$(STMHAL)/Src/stm32f7xx_hal_flash_ex.c \
$(STMHAL)/Src/stm32f7xx_hal_dma.c \
$(STMHAL)/Src/stm32f7xx_hal_i2c.c \
$(STMHAL)/Src/stm32f7xx_hal_ltdc.c \
main.c \
_sbrk.c

# Here we add all *.cpp files that we want to compile
CPPSRCS =

# Here we add all *.s files that we want to compile (Don't include startup file)
ASSRCS =

# Here we add the paths to all include directories
INCS = \
$(GFXINC) \
.

# here we add the paths to all custom libraries
LIBDIRS =

# here we add libraries
LIBS = $(GFXLIBS)

# StartUp file
#STARTUP = startup_stm32f746xx.s

# Linker script
#LDSCRIPT = stm32f746nghx_flash.ld

# The controller type
CONTROLLER = STM32F746xx

# MCU flags
MCUFLAGS = -mthumb -mcpu=cortex-m7

# Should a map file be generated? (yes / no)
GENERATE_MAP = no

# The following variables hold binaries and settings
ARCH = arm-none-eabi
AS = $(ARCH)-gcc
LD = $(ARCH)-gcc
CC = $(ARCH)-gcc
CPPC = $(ARCH)-g++
SIZE = $(ARCH)-size
OBJCOPY = $(ARCH)-objcopy
ASFLAGS = -ggdb -Wall
CFLAGS = -ggdb -Wall -std=c99
CPPFLAGS = -ggdb -Wall
LDFLAGS += -lnosys -fno-exceptions -fdata-sections

################################################################################
# Don't change anything below this line #
################################################################################

# Some directory and file magic
BUILDDIR = build
OBJDIR = $(BUILDDIR)/obj
MAPFILE = $(BUILDDIR)/$(TARGET).map
DEPDIR = $(BUILDDIR)/dep
SRCFLAGS += -MMD -MP -MF $(DEPDIR)/$(@F:.o=.d)

# Add the startup file
ASSRCS += $(STARTUP)

# Generate the object names
OBJS = $(addprefix $(OBJDIR)/,$(addsuffix .o,$(basename $(CSRCS:%.c=%.o))))
OBJS += $(addprefix $(OBJDIR)/,$(addsuffix .o,$(basename $(ASSRCS:%.s=%.o))))
OBJS += $(addprefix $(OBJDIR)/,$(addsuffix .o,$(basename $(CPPSRCS:%.cpp=%.o))))

# Automate the inclusion paths
DEFS += $(GFXDEFS)
CFLAGS += $(INCS:%=-I%) $(MCUFLAGS) -D$(CONTROLLER) $(DEFS:%=-D%) -DUSE_STDPERIPH_DRIVER $(SRCFLAGS)
CPPFLAGS += $(INCS:%=-I%)
LDFLAGS += $(LIBDIRS:%=-L%) $(INCS:%=-I%) $(LIBS) $(MCUFLAGS) -T$(LDSCRIPT)

# Some user settings magic
ifeq ($(GENERATE_MAP), yes)
LDFLAGS += -Wl,-Map=$(MAPFILE),--cref
endif

# This is the default target if the user does just calls 'make'
all: build size

# Build all the files
build: builddirs $(BUILDDIR)/$(TARGET).elf $(BUILDDIR)/$(TARGET).bin $(BUILDDIR)/$(TARGET).hex

# Create the required directories (if not already existing)
builddirs:
@mkdir -p $(BUILDDIR)
@mkdir -p $(OBJDIR)
@mkdir -p $(DEPDIR)

# Create the *.bin
$(BUILDDIR)/%.bin: $(BUILDDIR)/$(TARGET).elf
@$(OBJCOPY) -O binary $< $@

# Create the *.hex
$(BUILDDIR)/%.hex: $(BUILDDIR)/$(TARGET).elf
@$(OBJCOPY) -O ihex $< $@

# Link everything together to a *.elf file
$(BUILDDIR)/$(TARGET).elf: $(OBJS)
@echo Linking $@
@$(LD) $(LDFLAGS) -o $(BUILDDIR)/$(TARGET).elf $(OBJS)

# Compile assembly files
$(OBJDIR)/%.o: %.s
@mkdir -p $(dir $@)
@echo Compiling $<
@$(AS) $(ASFLAGS) -c -o $@ $<

# Compile c files
$(OBJDIR)/%.o: %.c
@mkdir -p $(dir $@)
@echo Compiling $<
@$(CC) $(CFLAGS) -c -o $@ $<

# Compile cpp files
$(OBJDIR)/%.o: %.cpp
@mkdir -p $(dir $@)
@echo Compiling $<
@$(CPPC) $(CPPFLAGS) -c -o $@ $<

# Print size information
size: $(BUILDDIR)/$(TARGET).elf
@echo
@echo
$(SIZE) $^
@echo $(FOO)

-include $(shell mkdir -p $(DEPDIR) 2>/dev/null) $(wildcard $(DEPDIR)/*)

# Clean up
clean:
@rm -fR $(BUILDDIR)
@echo Done

# Clean must be a phony target so make knows this never exists as a file
.PHONY: clean

Changes to do to your sourcecode:

Include the _sbrk.c file as given some posts above (not required to work though, just fix the source list accordingly)

In main.c, remove the _init() function.

That should be everything... except I forgot something which you should find out very quick :D

Explanation of the changes:

[cpu_stm32m7.mk]:

I changed -mfpu=fpv4-sp-d16 to -mfpu=fpv5-sp-d16, as suggested some posts before.

[board.mk]

Here I included the cpu specific makefile and specified the startup assembly file as STARTUP, not GFXSRC

[Makefile]

First, I adjusted some missing/misspelled variables. OPT_OS was missing, HAL changed to STMHAL, GFXBOARD was missing, CSRCS and INCS had some double items, which were also defined in board.mk and STARTUP and LDSCRIPT are defined in board.mk. Further down I added the GFXDEFS to DEFS and applied all DEFS as defines to CFLAGS.

I changed clean to the bitbucket version, because the command resulted in some errors and didn't do anything on my laptop. And as a last point I added the dependency guard.

Edited by Guest

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...