芯片使用的是STM32l051
遇到过问题,使用c++编译器时无法进入中断,其实是c无法调用c++代码,用下面的宏包裹住代码就可`以申明成C代码了
#ifdef __cplusplus
extern "C"{
#endif
void SysTick_Handler(void)
{
SysTime++;
HAL_IncTick();
}
#ifdef __cplusplus
}
#endif
下面是makefile
PROJ_NAME=dft_stm32l051
V=@
#ROOT=$(shell pwd)
ROOT=.
OBJ_DIR = ../../build/bcu_ws/dft_stm32/obj
BIN_DIR = ../../build/bcu_ws/dft_stm32/bin
INSTALL_DIR = ../../install/install.x86_64/stm32_image
HOST = arm-none-eabi
CC = ${HOST}-c++
AR = ${HOST}-ar
OBJCOPY = ${HOST}-objcopy
SIZE=arm-none-eabi-size
ccflags-y += -DSYS_VERSION=$(SYS_VERSION)
CFLAGS += -g -Wall -std=c++11# -std=c98
#CFLAGS += -O3 -Os
CFLAGS += -O0
CFLAGS += -mlittle-endian -mthumb -mcpu=cortex-m0 -march=armv6-m
#CFLAGS += -mfloat-abi=hard
#CFLAGS += -mfloat-abi=softfp
#CFLAGS += -mfpu=fpv4-sp-d16
CFLAGS += -ffreestanding -fdata-sections
#CFLAGS += -nostdlib
CFLAGS += -Wl,--gc-sections -Wl,-Map=$(PROJ_NAME).map
#CFLAGS += -gdwarf-2
CFLAGS += -specs=nosys.specs#why does add this? see http://www.mamicode.com/info-detail-2601046.html
CFLAGS += -ffunction-sections#Optimize program size
INC_DIR += -I$(ROOT)/Drivers/STM32L0xx_HAL_Driver/Inc
INC_DIR += -I$(ROOT)/Drivers/CMSIS/Include/
INC_DIR += -I$(ROOT)/Drivers/CMSIS/Device/ST/STM32L0xx/Include
INC_DIR += -I$(ROOT)/User/inc
LIBS += -lm
DEF += -DSTM32L051xx
S_SRCS = $(ROOT)/Drivers/CMSIS/Device/ST/STM32L0xx/Source/Templates/gcc/startup_stm32l051xx.s
S_OBJS = $(patsubst ./%, ./$(OBJ_DIR)/%, $(S_SRCS:.s=.o))
C_SRCS = $(shell ls -1 $(ROOT)/Drivers/STM32L0xx_HAL_Driver/Src/*.c | grep -v fmc)
C_SRCS += $(shell ls -1 $(ROOT)/User/src/*.c)
C_SRCS += $(shell ls -1 $(ROOT)/Drivers/CMSIS/Device/ST/STM32L0xx/Source/Templates/*.c)
C_OBJS = $(patsubst ./%, ./$(OBJ_DIR)/%, $(C_SRCS:.c=.o))
C_INC_DEP = $(patsubst ./%, ./$(OBJ_DIR)/%, $(C_SRCS:.c=.d))
LDS = -T$(ROOT)/STM32L051K8Tx_FLASH.ld
all: $(PROJ_NAME).elf
clean:
$(V)echo "RM D $(OBJ_DIR)"
$(V)rm -rf $(OBJ_DIR)/*
$(V)echo "RM F $(PROJ_NAME).elf $(PROJ_NAME).hex $(PROJ_NAME).bin $(PROJ_NAME).map"
$(V)rm -rf $(BIN_DIR)/$(PROJ_NAME).elf $(BIN_DIR)/$(PROJ_NAME).hex $(BIN_DIR)/$(PROJ_NAME).bin $(BIN_DIR)/$(PROJ_NAME).map
.PHONY: clean
$(S_OBJS) : $(OBJ_DIR)/%.o : %.s
$(V)echo "AS `basename $@`"
$(V)mkdir -p `dirname $@`
$(V)$(CC) $(CFLAGS) $(DEF) -c $^ ${LIBS} -o $@
-include $(C_INC_DEP)
$(C_INC_DEP): $(OBJ_DIR)/%.d : %.c
$(V)echo "MD `basename $@`"
$(V)set -e; rm -f $@; mkdir -p `dirname ./$@`; \
$(CC) -MM $(CFLAGS) $(INC_DIR) $(DEF) $< > $@.$$$$; \
sed 's,\($(*F)\)\.o[ :]*,$(@D)\/\1.o $@ : ,g' < $@.$$$$ > $@; \
rm -f ./$@.$$$$
$(C_OBJS) : $(OBJ_DIR)/%.o : %.c
$(V)#echo "CC `basename $@`"
$(V)echo "CC $@"
$(V)mkdir -p `dirname $@`
$(V)$(CC) $(ccflags-y) $(CFLAGS) $(INC_DIR) $(DEF) -c $(*).c ${LIBS} -o $@
$(PROJ_NAME).elf : $(S_OBJS) $(C_OBJS)
$(V)echo "MK `basename $@`"
$(V)mkdir -p $(BIN_DIR)
$(V)$(CC) $(CFLAGS) $(LIBS) $(INC_DIR) $(LDS) $(DEF) $^ ${LIBS} -o $(BIN_DIR)/$@ -Wl,-Map,$(OBJ_DIR)/$(PROJ_NAME).map
$(V)echo "MK `basename $@`.hex"
$(V)$(OBJCOPY) -O ihex $(BIN_DIR)/$(PROJ_NAME).elf $(BIN_DIR)/$(PROJ_NAME).hex
$(V)echo "MK `basename $@`.bin"
$(V)$(OBJCOPY) -O binary $(BIN_DIR)/$(PROJ_NAME).elf $(BIN_DIR)/$(PROJ_NAME).bin
$(SIZE) $(BIN_DIR)/$(PROJ_NAME).elf
install:
$(V)echo "CP $(PROJ_NAME).hex to $(INSTALL_DIR)"
$(V)mkdir -p $(INSTALL_DIR)
$(V)cp $(BIN_DIR)/$(PROJ_NAME).hex $(INSTALL_DIR)/$(PROJ_NAME).hex