无法从SDK以外的目录编译nrf51 SDK示例

编程入门 行业动态 更新时间:2024-10-10 01:22:24
本文介绍了无法从SDK以外的目录编译nrf51 SDK示例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在开发nRf51上的应用程序,因为我正在使用... SDK:nRF51_SDK_7.2.0_cf547b5 工具链:GNU工具臂嵌入式[arm-none-eabi版本4.9.3] 开发板:PCA10028(nRF51 DK)

I'm devloping application on nRf51 for that i'm using... SDK : nRF51_SDK_7.2.0_cf547b5 Tool chain : GNU tools arm Embedded [arm-none-eabi version 4.9.3] Dev Board : PCA10028(nRF51 DK)

我正在使用以下示例. C:\ nRF51_SDK_7.2.0_cf547b5 \ examples \ peripheral \ blinky 当我在位置C:\ nRF51_SDK_7.2.0_cf547b5 \ examples \ peripheral \ blinky \ pca10028 \ blank \ armgcc的位置使用makefile编译此示例时 它可以很好地编译,并且还可以生成二进制/十六进制.

I'm using following example. C:\nRF51_SDK_7.2.0_cf547b5\examples\peripheral\blinky When i compile this example using makefile at location C:\nRF51_SDK_7.2.0_cf547b5\examples\peripheral\blinky\pca10028\blank\armgcc it compiles well and also generate binary/hex.

我想将此眨眼的示例移至D盘.所以现在我的示例在位置D:\ blinky. 我正在使用位于位置D:\ blinky \ pca10028 \ blank \ armgcc的makefile编译此示例 我已经按照此在makefile中修改了SDK PATH

I want to move this blinky example to D Drive. So now my example is at location D:\blinky. I'm compiling this example using makefile at location D:\blinky\pca10028\blank\armgcc I have Modified SDK PATH in makefile as per this

PROJECT_NAME := blinky_blank_pca10028 export OUTPUT_FILENAME #MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) MAKEFILE_NAME := $(MAKEFILE_LIST) MAKEFILE_DIR := $(dir $(MAKEFILE_NAME) ) TOOLCHAIN_PATH = C:/nRF51_SDK_7.2.0_cf547b5 TEMPLATE_PATH = $(TOOLCHAIN_PATH)/components/toolchain/gcc ifeq ($(OS),Windows_NT) include $(TEMPLATE_PATH)/Makefile.windows else include $(TEMPLATE_PATH)/Makefile.posix endif MK := mkdir RM := rm -rf #echo suspend ifeq ("$(VERBOSE)","1") NO_ECHO := else NO_ECHO := @ endif # Toolchain commands CC := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-gcc" AS := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-as" AR := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-ar" -r LD := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-ld" NM := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-nm" OBJDUMP := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-objdump" OBJCOPY := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-objcopy" SIZE := "$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-size" #function for removing duplicates in a list remduplicates = $(strip $(if $1,$(firstword $1) $(call remduplicates,$(filter-out $(firstword $1),$1)))) #source common to all targets C_SOURCE_FILES += \ $(TOOLCHAIN_PATH)/components/toolchain/system_nrf51.c \ ../../../Main.c \ $(TOOLCHAIN_PATH)/components/drivers_nrf/hal/nrf_delay.c \ #assembly files common to all targets ASM_SOURCE_FILES = $(TOOLCHAIN_PATH)/components/toolchain/gcc/gcc_startup_nrf51.s #includes common to all targets INC_PATHS = -I../../../ INC_PATHS += -I$(TOOLCHAIN_PATH)/components/toolchain/gcc INC_PATHS += -I$(TOOLCHAIN_PATH)/components/toolchain INC_PATHS += -I$(TOOLCHAIN_PATH)/components/drivers_nrf/hal INC_PATHS += -I$(TOOLCHAIN_PATH)/examples/peripheral/bsp INC_PATHS += -I$(TOOLCHAIN_PATH)/examples/bsp OBJECT_DIRECTORY = _build LISTING_DIRECTORY = $(OBJECT_DIRECTORY) OUTPUT_BINARY_DIRECTORY = $(OBJECT_DIRECTORY) # Sorting removes duplicates BUILD_DIRECTORIES := $(sort $(OBJECT_DIRECTORY) $(OUTPUT_BINARY_DIRECTORY) $(LISTING_DIRECTORY) ) #flags common to all targets CFLAGS = -DNRF51 CFLAGS += -DBSP_DEFINES_ONLY CFLAGS += -DBOARD_PCA10028 CFLAGS += -mcpu=cortex-m0 CFLAGS += -mthumb -mabi=aapcs --std=gnu99 CFLAGS += -Wall -Werror -O3 CFLAGS += -mfloat-abi=soft # keep every function in separate section. This will allow linker to dump unused functions CFLAGS += -ffunction-sections -fdata-sections -fno-strict-aliasing CFLAGS += -flto -fno-builtin # keep every function in separate section. This will allow linker to dump unused functions LDFLAGS += -Xlinker -Map=$(LISTING_DIRECTORY)/$(OUTPUT_FILENAME).map LDFLAGS += -mthumb -mabi=aapcs -L $(TEMPLATE_PATH) -T$(LINKER_SCRIPT) LDFLAGS += -mcpu=cortex-m0 # let linker to dump unused sections LDFLAGS += -Wl,--gc-sections # use newlib in nano version LDFLAGS += --specs=nano.specs -lc -lnosys # Assembler flags ASMFLAGS += -x assembler-with-cpp ASMFLAGS += -DNRF51 ASMFLAGS += -DBSP_DEFINES_ONLY ASMFLAGS += -DBOARD_PCA10028 #default target - first one defined default: clean nrf51422_xxac #building all targets all: clean $(NO_ECHO)$(MAKE) -f $(MAKEFILE_NAME) -C $(MAKEFILE_DIR) -e cleanobj $(NO_ECHO)$(MAKE) -f $(MAKEFILE_NAME) -C $(MAKEFILE_DIR) -e nrf51422_xxac #target for printing all targets help: @echo following targets are available: @echo nrf51422_xxac C_SOURCE_FILE_NAMES = $(notdir $(C_SOURCE_FILES)) C_PATHS = $(call remduplicates, $(dir $(C_SOURCE_FILES) ) ) C_OBJECTS = $(addprefix $(OBJECT_DIRECTORY)/, $(C_SOURCE_FILE_NAMES:.c=.o) ) ASM_SOURCE_FILE_NAMES = $(notdir $(ASM_SOURCE_FILES)) ASM_PATHS = $(call remduplicates, $(dir $(ASM_SOURCE_FILES) )) ASM_OBJECTS = $(addprefix $(OBJECT_DIRECTORY)/, $(ASM_SOURCE_FILE_NAMES:.s=.o) ) vpath %.c $(C_PATHS) vpath %.s $(ASM_PATHS) OBJECTS = $(C_OBJECTS) $(ASM_OBJECTS) nrf51422_xxac: OUTPUT_FILENAME := nrf51422_xxac nrf51422_xxac: LINKER_SCRIPT=$(TOOLCHAIN_PATH)/components/toolchain/gcc/gcc_nrf51_blank_xxac.ld nrf51422_xxac: $(BUILD_DIRECTORIES) $(OBJECTS) @echo Linking target: $(OUTPUT_FILENAME).out $(NO_ECHO)$(CC) $(LDFLAGS) $(OBJECTS) $(LIBS) -o $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out $(NO_ECHO)$(MAKE) -f $(MAKEFILE_NAME) -C $(MAKEFILE_DIR) -e finalize ## Create build directories $(BUILD_DIRECTORIES): @echo $(MAKEFILE_NAME) $(MK) $@ # Create objects from C SRC files $(OBJECTS): $(OBJECT_DIRECTORY)/%.o: %.c @echo Compiling file: $(notdir $<) $(NO_ECHO)$(CC) $(CFLAGS) $(INC_PATHS) -c -o $@ $< # Assemble files $(OBJECT_DIRECTORY)/%.o: %.s @echo Compiling file: $(notdir $<) $(NO_ECHO)$(CC) $(ASMFLAGS) $(INC_PATHS) -c -o $@ $< # Link $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out: $(BUILD_DIRECTORIES) $(OBJECTS) @echo Linking target: $(OUTPUT_FILENAME).out $(NO_ECHO)$(CC) $(LDFLAGS) $(OBJECTS) $(LIBS) -o $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out ## Create binary .bin file from the .out file $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin: $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out @echo Preparing: $(OUTPUT_FILENAME).bin $(NO_ECHO)$(OBJCOPY) -O binary $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin ## Create binary .hex file from the .out file $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex: $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out @echo Preparing: $(OUTPUT_FILENAME).hex $(NO_ECHO)$(OBJCOPY) -O ihex $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex finalize: genbin genhex echosize genbin: @echo Preparing: $(OUTPUT_FILENAME).bin $(NO_ECHO)$(OBJCOPY) -O binary $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).bin ## Create binary .hex file from the .out file genhex: @echo Preparing: $(OUTPUT_FILENAME).hex $(NO_ECHO)$(OBJCOPY) -O ihex $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).hex echosize: -@echo "" $(NO_ECHO)$(SIZE) $(OUTPUT_BINARY_DIRECTORY)/$(OUTPUT_FILENAME).out -@echo "" clean: $(RM) $(BUILD_DIRECTORIES) cleanobj: $(RM) $(BUILD_DIRECTORIES)/*.o flash: $(MAKECMDGOALS) @echo Flashing: $(OUTPUT_BINARY_DIRECTORY)/$<.hex nrfjprog --reset --program $(OUTPUT_BINARY_DIRECTORY)/$<.hex

当我在cmd.exe中使用"make"进行编译时,我得到了

When i'm compiling this using "make" in cmd.exe then i get

D:\blinky\pca10028\blank\armgcc>make rm -rf _build makefile mkdir _build Compiling file: Main.c Linking target: nrf51422_xxac.out arm-none-eabi-gcc.exe: error: _build/system_nrf51.o: No such file or directory arm-none-eabi-gcc.exe: error: _build/nrf_delay.o: No such file or directory arm-none-eabi-gcc.exe: error: _build/gcc_startup_nrf51.o: No such file or directory make: *** [nrf51422_xxac] Error 1

对此有任何解决方案吗? 谢谢.

Any solution on this? Thank you.

推荐答案

似乎您的绝对源文件路径不正确:

It seems that your absolute source file paths are incorrect :

$(TOOLCHAIN_PATH)/components/toolchain/system_nrf51.c $(TOOLCHAIN_PATH)/components/drivers_nrf/hal/nrf_delay.c $(TOOLCHAIN_PATH)/components/toolchain/gcc/gcc_startup_nrf51.s

防止构建相应的对象.

请更新TOOLCHAIN_PATH-或使用其他变量-以反映您的新D:位置.

Please update TOOLCHAIN_PATH - or use another variable - to reflect your new D: location.

更多推荐

无法从SDK以外的目录编译nrf51 SDK示例

本文发布于:2023-11-28 14:26:36,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1642787.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:示例   目录   SDK

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!