CORTEX STM32F107 GCC Eclipse Demo

anonymous wrote on Saturday, November 05, 2011:

Hi,

I am attempting to port the current GCC Rowley Demo for the STM32F107 to Eclipse/OpenOCD. I am using CodeSourcery (Lite) for the cross compilation tools. I seem to having trouble building the project though.

When compiling the file stm32f10x_nvic.c the following error comes up:

FreeRTOS/Demo/CORTEX_STM32F107_GCC_Ecplise/…/Common/drivers/ST/STM32F10xFWLib/src/stm32f10x_nvic.c:190: undefined reference to `__SETPRIMASK’

Several of these errors are displayed (with different undefined references) for this file. I have traced ‘__SETPRIMASK’ to Demo/Common/drivers/ST/STM32F10xFWLib/inc/cortexm3_macro.h, which is included via stm32f10x_nvic.h.

So I don’t see why these errors come up, I imagine it is because of a missing include directory or missing pre processor directive, but I can’t see what is missing, anybody else come across this problem/have any ideas?

Here is my makefile for information:

#
# Makefile for use on the STM32-P107 Olimex board
#

#
# Project directories
#
# RTOS_SOURCE_DIR -> RTOS source directory
# DEMO_COMMON_INCLUDE_DIR -> Common demo header files
# DEMO_COMMON_SOURCE_DIR -> Common demo source files
# DEMO_DRIVER_DIR -> Common demo driver files
# UIP_COMMON_DIR -> Networking files
# STM32F10X_SOURCE_DIR -> Microcontroller specific drivers
RTOS_SOURCE_DIR=…/…/Source
DEMO_COMMON_INCLUDE_DIR=…/Common/include
DEMO_COMMON_SOURCE_DIR=…/Common/Minimal
DEMO_DRIVER_DIR=…/Common/drivers
UIP_COMMON_DIR=…/Common/ethernet/uIP/uip-1.0/uip
STM32F10X_SOURCE_DIR=…/Common/drivers/ST/STM32F10xFWLib/src
SOURCERY_GCC_INCLUDE_DIR=/home/mike/CodeSourcery/Sourcery_G++_Lite/lib/gcc/arm-none-eabi/4.5.2/include
SOURCERY_INCLUDE_DIR=/home/mike/CodeSourcery/Sourcery_G++_Lite/arm-none-eabi/include
#CROSSWORKS_STUDIO_DIR=/usr/share/crossworks_for_arm_2.1

#
# Demo additional files, ignore for the moment
#
#CRT0=thumb_crt0.s
#STARTUP=STM32F10x_Startup.s
# target file?

#
# Cross compilation tools to use (CodeSourcery)
#
CC=arm-none-eabi-gcc
LD=arm-none-eabi-ld
AS=arm-none-eabi-as
OBJCOPY=arm-none-eabi-objcopy

#
# Flags to use for linker
#
LINKER_FLAGS=-nostartfiles -Xlinker -oRTOSDemo.elf -Xlinker -M -Xlinker -Map=rtosdemo.map

#
# Flags to use for compiler
# Warnings, debug info, optimisations, cortex-m3 flags, additional code directories, preprocessor directives (definitions)
#
CFLAGS=-Wall -Wextra -g -O3 \
-mcpu=cortex-m3 -mthumb -mfix-cortex-m3-ldrd -mlittle-endian -mfpu=vfp -mfloat-abi=soft \
-std=c99 \
-fno-builtin \
-ffunction-sections \
-fdata-sections \
-fno-common \
-gdwarf-2 \
-fno-dwarf2-cfi-asm \
-I . \
-I $(RTOS_SOURCE_DIR)/include \
-I $(RTOS_SOURCE_DIR)/portable/GCC/ARM_CM3 \
-I $(DEMO_COMMON_INCLUDE_DIR) \
-I $(DEMO_DRIVER_DIR)/ST/STM32F10xFWLib/inc \
-I $(UIP_COMMON_DIR) \
-I webserver \
-I LCD \
-I $(SOURCERY_GCC_INCLUDE_DIR) \
-I $(SOURCERY_INCLUDE_DIR) \
-D PACK_STRUCT_END=__attribute\(\(packed\)\) \
-D ALIGN_STRUCT_END=__attribute\(\(aligned\(4\)\)\)

# Crossworks flags, don’t think applicable to eclipse project
#-D __CROSSWORKS \
#-D __CROSSWORKS_ARM \
#-D __ARM_ARCH_7M__ \
#-D __TARGET_PROCESSOR=STM32F107VC \
#-D OSCILLATOR_CLOCK_FREQUENCY=25000000 \
#-D __THUMB \
#-D __FLASH_BUILD \
#-D DEBUG \
#-D __CROSSWORKS_MAJOR_VERSION=2 \
#-D __CROSSWORKS_MINOR_VERSION=1 \
#-D __CROSSWORKS_REVISION=1 \
#-D __TARGET_CL= \
#-D STM32F10X_CL= \
#-nostdinc \
#-I$(CROSSWORKS_STUDIO_DIR)/include \
#-I$(CROSSWORKS_STUDIO_DIR)/lib \

# Note this last -D line is handled incorrectly when a \ is put at the end!!

#
# Source files to compile to build RTOSDemo.elf (DO NOT MODIFY)
#
THUMB_SOURCE=$(DEMO_COMMON_SOURCE_DIR)/flash.c \
$(DEMO_COMMON_SOURCE_DIR)/recmutex.c \
$(DEMO_COMMON_SOURCE_DIR)/semtest.c \
$(DEMO_COMMON_SOURCE_DIR)/BlockQ.c \
$(DEMO_COMMON_SOURCE_DIR)/GenQTest.c \
$(DEMO_COMMON_SOURCE_DIR)/integer.c \
$(DEMO_COMMON_SOURCE_DIR)/PollQ.c \
$(DEMO_COMMON_SOURCE_DIR)/QPeek.c \
$(RTOS_SOURCE_DIR)/tasks.c \
$(RTOS_SOURCE_DIR)/list.c \
$(RTOS_SOURCE_DIR)/queue.c \
$(RTOS_SOURCE_DIR)/portable/MemMang/heap_2.c \
$(RTOS_SOURCE_DIR)/portable/GCC/ARM_CM3/port.c \
main.c \
./ParTest/ParTest.c \
$(STM32F10X_SOURCE_DIR)/stm32f10x_usart.c \
$(STM32F10X_SOURCE_DIR)/stm32f10x_gpio.c \
$(STM32F10X_SOURCE_DIR)/stm32f10x_lib.c \
$(STM32F10X_SOURCE_DIR)/stm32f10x_nvic.c \
$(STM32F10X_SOURCE_DIR)/stm32f10x_rcc.c \
$(STM32F10X_SOURCE_DIR)/stm32f10x_systick.c \
$(STM32F10X_SOURCE_DIR)/stm32fxxx_eth.c \
printf-stdarg.c \
$(STM32F10X_SOURCE_DIR)/stm32f10x_tim.c \
./LCD/lcd.c \
$(STM32F10X_SOURCE_DIR)/stm32f10x_spi.c \
$(UIP_COMMON_DIR)/timer.c \
$(UIP_COMMON_DIR)/uip.c \
$(UIP_COMMON_DIR)/uip_arp.c \
$(UIP_COMMON_DIR)/psock.c \
./webserver/uIP_Task.c \
./webserver/httpd.c \
./webserver/httpd-cgi.c \
./webserver/httpd-fs.c \
./webserver/http-strings.c \
./webserver/emac.c \
timertest.c

#
# Rules for running make

THUMB_OBJS = $(THUMB_SOURCE:.c=.o)

all: RTOSDemo.bin

RTOSDemo.bin : RTOSDemo.hex
$(OBJCOPY) RTOSDemo.elf -O binary RTOSDemo.bin

RTOSDemo.hex : RTOSDemo.elf
$(OBJCOPY) RTOSDemo.elf -O ihex RTOSDemo.hex

RTOSDemo.elf : $(THUMB_OBJS) $(CRT0) Makefile
$(CC) $(CFLAGS) $(THUMB_OBJS) $(LIBS) $(CRT0) $(LINKER_FLAGS)

$(THUMB_OBJS) : %.o : %.c Makefile FreeRTOSConfig.h
$(CC) -c $(CFLAGS) $< -o $@

clean :
rm -f $(THUMB_OBJS)
touch Makefile
rm -f RTOSDemo.elf
rm -f RTOSDemo.hex

stf12 wrote on Monday, November 07, 2011:

Hi,

I have published some FreeRTOS demo running on Eclipse/GCC (Code Sourcery) at the following link: http://www.stf12.org/developers/Download.html.
Look for Cortex_STM32F107 demo.

Regards,
Stefano

anonymous wrote on Wednesday, November 23, 2011:

Hi,

Thanks for the demo. I managed to get the project building and downloading onto the board.

I seem to be having a problem creating tasks now though, I create a task to turn some LED’s on, however it never seems to get run. There are no other tasks being created.

Here is the call to the task creation function:

xTaskCreate( vLEDEnableTask, ( signed char * ) “LEDx”, 128, NULL, 2, ( xTaskHandle * ) NULL );

Has anyone come across this problem before?

Cheers, Michael

davedoors wrote on Wednesday, November 23, 2011:

Have you checked the xTaskCreate() return value?

anonymous wrote on Wednesday, November 23, 2011:

Yes it returns pdPass.

Cheers for the quick reply.