STM32 C++ makefile

芯片使用的是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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值