我使用应用笔记B-24,经过一些编辑,我得到它工作直到链接阶段,但在那之后,我得到这个错误
cc ../../../src/modules/app/src/app_project/template_fh/app_template_proj.o.
cc startup_armcm0.o.
链接/ full_emb_sysram.axf
. . / . . / . . / patch_code / obj / ch_map。obj: file not recognized:文件格式未被识别
Collect2: error: ld returned 1 exit status
: * * * (/ full_emb_sysram。axf]错误1
所以基本上补丁代码是不能被gcc-arm-none-eabi识别的
任何关于我可能做错的评论?
谢谢你!
Mohit Maheshwari.
你好,Mohit,
本周我们的GNU专家是OOO,我承认我自己没有太多的GNU经验。我在网上做了一个快速搜索:.obj文件可以在GNU中链接吗?这条线索暗示没有。
BR JE_Dialog
http://www.delorie.com/djgpp/v2faq/faq17_5.html.
谢谢你的relpy,我得到了新的SDK 3.0.6,.obj文件在这个中有精灵格式,我能够编译项目并生成十六进制文件,但有一个优化选项-fplugin = tree_switch_shortcut_elf我的手臂 - 没有 -eabi compiler does not support , it's for optimization of R.W. FSM that is implemeted in code. i compiled removing that option and hex file is generated and i used JLinkGDBServer and gdb to upload hex file but device is not advertising i used compiler binaries from launchpad project 'https://launchpad.net/gcc-arm-embedded/+ download.'你能告诉我在哪里可以得到兼容编译器的资源吗
你好,
我得到了相同的结果,不能广告时,我用这个工具链gcc-arm-none-eabi-4_8-2014q3编译。然而,我可以运行来代码(即。(指示灯闪烁)和工作状态。
我还可以确认uart驱动程序无法使用该工具链。我使用转换脚本生成Makefile。我还用DA14580_BEACON_3.40-2.6示例代码做了一些测试,但没有成功。
无论我使用什么样例代码,当我设置cmd->channel_map为任何但不是0时,我似乎崩溃了模块…
任何想法?
我可以确认--fplugin = tree_switch_shortcut_ELF与Windows&Mac版本的GCC-ARM-None-EABI-4_8-2014Q3不兼容,但仅在Linux上。我没有尝试使用带有选项的Linux盒子(我正在编译在Mac上。)
这是我的makefile以获取更多信息:
#
# Makefile必须定义以下变量,这些变量由common.mk使用:
# O:输出目录
# STACK_SIZE:为堆栈保留的字节数
#Heap_size:为堆保留的字节数
# CORTEX_M:目标的Cortex-M模型
# STARTUP_DEFS:定义配置启动代码
# CFLAGS:用于编译和链接的标志
#ldflags:用于链接的标志
# ROM_MAP_FILE:ROM map文件
# OBJ:要编译和链接的目标文件列表
# TARGET_ELF:目标的名称(在生成的图像中使用)
#
# 输出目录
O ? =
#堆栈大小
stack_size = 0x0600.
#堆大小
HEAP_SIZE = 0 x0100
#启动代码
CORTEX_M: = 0
startup = startup_armcm $(cortex_m).s
#启动配置
Startup_defs += -d__stack_size =$(stack_size) -d__heap_size =$(heap_size)
#startup_defs + = -d__start = main
#startup_defs + = -d__startup_copy_multiple
STARTUP_DEFS + = -D__STARTUP_CLEAR_BSS_MULTIPLE
# -Os -flto - function-sections -fdata-sections编译代码大小
#cflags + = -flto
CFLAGS += -function- sections -fdata-sections -Wno-implicit-function-declaration
#代码大小链接
GC: = - wl - gc-sections
SRC = SRC /
构建:=构建/
= $(shell pwd)
APP_SRC:= ./app/B4S.c \
./app/system/periph_setup.c \
./app/system/b4s_uart.c \
$(src)模块/ app / src / app.c \
$(src)模块/ app / src / app_sec.c \
美元(SRC)模块/ app / SRC / app_sec_task.c \
美元(SRC)模块/ app / SRC / app_task.c
BOOT_SRC:= plf/refip/src/arch/boot/rvds/system_ARMCM0.c \
plf / refip / src / arch /主/祝福/ hardfault_handler.c
#boot_src_s:= PLF / RECIP / SRC / ARCH / BOOT / RVDS / BOOT_VECTORSS.S
BOOT_SRC_S: =
ARCH_SRC:= plf/refip/src/arch/main/ble/arch_main.c \
PLF / REFIP / SRC / ARCH / MAIN / BLE / JUMP_TABLE.c \
plf / refip / src / arch /主/祝福/ arch_sleep.c \
plf / refip / src / arch /主/祝福/ nmi_handler.c \
plf / refip / src / arch /主/祝福/ arch_system.c
NVDS_SRC: =模块/ nvd / src / nvds.c
RWBLE_SRC:= modules/rwip/src/rwip.c \
ip /祝福/会/ src / rwble / rwble.c
HOST_SRC: = ip /幸福/霍奇金淋巴瘤/ src /主机/ / gapm / gapm.c缺口
DRIVER_SRC:= modules/rf/src/rf_580.c \
PLF / REFIP / SRC / DRIVER / GPIO / GPIO.C
PROFILE_SRC: =
SRCS_C: = (APP_SRC)美元(addprefix (SRC),美元(BOOT_SRC)) \
$(addprefix $(SRC), $(ARCH_SRC)) \
$(addprefix $(src),$(nvds_src))\
$(addprefix $(SRC), $(RWBLE_SRC)) \
$(addprefix $(src),$(driver_src))\
(addprefix (SRC)美元,美元(PROFILE_SRC))
SRCS_S:= $(addprefix $(SRC), $(BOOT_SRC_S))
HEADERS_DIR:= dialog/include \
ip /祝福/霍奇金淋巴瘤/ src / hcih \
ip /祝福/霍奇金淋巴瘤/ src /主机/丙氨酸\
ip /祝福/霍奇金淋巴瘤/ src /主机/丙氨酸/ attc \
IP / BLE / HL / SRC / HOST / ATT / ATTM \
IP / BLE / HL / SRC / HOST / ATT / ATTS \
ip /祝福/ hl \ / src /主机/差距
IP / BLE / HL / SRC / HOST / GAP / GAPC \
ip /祝福/霍奇金淋巴瘤/ src /主机/差距/ gapm \
ip /祝福/霍奇金淋巴瘤/ src /主机/关贸总协定\
ip /祝福/霍奇金淋巴瘤/ src /主机/关贸总协定/ gattc \
IP / BLE / HL / SRC / Host / Gatt / Gattm \
ip /祝福/霍奇金淋巴瘤/ src /主机/ i2c \
IP / BLE / HL / SRC / HOST / I2C / I2CC \
ip /祝福/霍奇金淋巴瘤/ src /主机/ i2c / i2cm \
IP / BLE / HL / SRC / Host / L2C / L2CC \
IP / BLE / HL / SRC / Host / SMP \
ip /祝福/霍奇金淋巴瘤/ src /主机/ smp / smpc \
IP / BLE / HL / SRC / Host / SMP / SMPM \
ip /祝福/霍奇金淋巴瘤/ src / rwble_hl \
ip /幸福/ / src /控制器/ em \
IP / BLE / LL / SRC / CONTROLLER / LLC \
IP / BLE / LL / SRC / CONTROLLER / LLD \
ip /幸福/ / src /控制器/ llm \
IP / BLE / LL / SRC / HCIC \
IP / ble / ll / src / rwble \
模块/ app / api \
模块/ app / src \
模块/ app / src / app_utils / app_console \
模块/ app / src / app_utils / app_multi_bond \
模块/ app / src / app_utils / app_stream_queue \
模块/ app / src / app_profiles /﹐\
模块/ app / src / app_profiles /过时\
模块/ app / src / app_profiles /低音\
模块/ app / src / app_profiles /阀瓣\
模块/ app / src / app_profiles /贬低\
模块/ app / src / app_profiles /蹄\
模块/ app / src / app_profiles / ht \
模块/ app / src / app_profiles /内外加厚\
模块/ app / src / app_profiles /微处理器\
模块/ app / src / app_profiles /内\
模块/ app / src / app_profiles / prox_reporter \
模块/ app / src / app_profiles / pru \
模块/ app / src / app_profiles / scppc \
模块/ app / src / app_profiles / spotar \
模块/ app / src / app_profiles \ /流
模块/ app / src / app_profiles / streamdatad \
模块/ app / src / app_profiles / streamdatah \
模块/常见/ api \
模块/ dbg / api \
模块/ gtl / api \
模块/ gtl / src \
模块/克/ api \
模块/克/ src \
模块/ nvd / api \
模块/ rf / api \
模块/ RWIP / API \
PLF / RECIP / SRC / ARCH \
plf refip / src / arch / boot /测量\
plf / refip / src / arch /编译器/测量\
plf / refip / src / arch /会/测量\
PLF / REFIP / SRC / ARCH / MAIN / BLE \
plf / accel \ / refip / src /驱动程序
plf / adc \ / refip / src /驱动程序
plf /电池\ / refip / src /驱动程序
plf / bme280 \ / refip / src /驱动程序
plf / coex \ / refip / src /驱动程序
plf / emi \ / refip / src /驱动程序
plf / gpio \ / refip / src /驱动程序
PLF / RECIP / SRC / DRIVER / I2C_CORE \
PLF / RECIP / SRC / DRIVER / I2C_EEPROM \
plf / intel \ / refip / src /驱动程序
plf /发票\ / refip / src /驱动程序
plf /领导\ / refip / src /驱动程序
PLF / REFIP / SRC / DRIVER / PWM \
plf / rc5 \ / refip / src /驱动程序
plf /注册\ / refip / src /驱动程序
PLF / REFIP / SRC / DRIVER / SPI \
plf / spi_flash \ / refip / src /驱动程序
PLF / RECIP / SRC / DRIVER / SPI_HCI \
plf / syscntl \ / refip / src /驱动程序
PLF / REFIP / SRC / DRIVER / TIMER \
PLF / RECIP / SRC / DRIVER / WKUPCT_QUADEC
BUILD_DIR:= $(addprefix $(BUILD),$(MODULES))
OBJ: = $ (patsubst src / % . c,构建/ % . o,美元(SRCS_C)) $ (patsubst src / % s,构建/ % . o,美元(SRCS_S))
包括:= $ (addprefix - $ ((SRC),美元addprefix (HEADERS_DIR)))我。应用程序i /应用程序/系统
#优化标志
#cflags + = -os -fplugin = tree_switch_shortcut_elf
CFLAGS + =操作系统
CFLAGS + = $(包括)
cflags + = -include da14580_config.h
打印- %:;@echo $* = $($*)
#全局配置
/ misc / rom_symdef.txt ROM_MAP_FILE: =
LDFlags + = $(USE_NANO)$(USE_NOHOST)$(LDScripts)$(GC)$(地图)
#不要抱怨未知属性(如zero_init)
cflags + = -wno-属性-wno-未使用
# CHECK:这个标志阻止警告
# "使用2字节的wchar_t,但输出使用4字节的wchar_t;
使用wchar_t值可能会失败"
如果wchar_t字符串不能正常工作,请重新访问。
ldflags + = -wl, - no-wchar-size-prote
src_cfiles:= $(srcs_c)
src_Sfiles: = $ (SRCS_S)
obj_cfiles:= $(src_cfiles:.c = .o)
obj_sfiles:= $(src_sfiles:.s = .o)
#Patch对象
patch_objs:= ./patch_code/obj/gapm_util.obj \
。/ patch_code / obj / smpc_task。obj \
./patch_code/obj/smpc.obj \
./patch_code/obj/atts_task.obj \
./patch_code/obj/ch_map.obj \
./patch_code/obj/kay_task.obj.
startup_obj: = $(启动:s = . o)
OBJ:= $(obj_cfiles) $(obj_Sfiles) $(startup_obj)
#目标
TARGET_ELF: = full_emb_sysram
包括common.mk
-----------------------
和我的常见..
#
# makefile使用的常用变量和recipe。
#定义以下变量:
#cc:c交叉编译器
#CPP:交叉预处理器
#Objcopy:Cross-Objcopy
# USE_NANO: link flags to select newlib-nano
# USE_SEMIHOST: link flags to enable semihosting
#ured_nohost:链接标志以禁用半主轴
#地图:链接标志以创建地图文件
# LDSCRIPTS:使用自定义链接脚本的链接标志,从$(LINK_SCRIPT)生成。年代
#
CROSS_COMPILE = . . / toolschain / gcc -手臂没有eabi - 4 - _8 - 2014第三季度/ bin / arm-none-eabi -
CC = $ (CROSS_COMPILE) gcc
CPP = $ (CROSS_COMPILE) CPP
OBJCOPY = $ (CROSS_COMPILE) OBJCOPY
#冗长开关
v?= 0
ifeq ($ (V), 0)
V_CC = @echo " CC " $@;
V_CPP = @echo " CPP " $@;
v_link = @echo“链接”$ @;
V_OBJCOPY = @echo " OBJCPY" $@;
V_CLEAN = @echo " CLEAN ";
V_SED = @echo " SED " $@;
V_GAWK = @echo " GAWK " $@;
其他的
V_OPT = ' v '
endif
# newlib-nano使用。要禁用它,请指定USE_NANO=
use_nano:= --specs = nano.specs
#是否使用半托管
USE_SEMIHOST: = = rdimon.specs——规格
USE_NOHOST: = = nosys.specs——规格
创建地图文件
地图= -wl,-map = $(o)/ lst / $(target_elf).map
-mthumb -mcpu=cortex-m$(cortex-m)
#常规编译标志
CFLAGS += $(ARCH_FLAGS) $(STARTUP_DEFS) -std=gnu99
ifeq ($ (V), 2)
CFLAGS + =——冗长
ldflags + = -wl, - 冗长
endif
ROM_SYMDEF: = rom.symdef
ROM_SYMBOLS: = rom.symbols
link_script:= 580.lds
LDScripts:= -L。-t $(link_script)
: $ (O) / $ (TARGET_ELF)。十六进制(O) / (TARGET_ELF)美元。斌
清洁:
$(V_CLEAN)for file in $(OBJ);执行rm -f $(V_OPT)“$ $文件”;完成
@rm -rf $(v_opt)$(o)
@rm -f $(v_opt)$(rom_symdef)$(rom_symbols)$(link_script)
@rm -f $(v_opt)$(obj:.o = .d)
运行:$ (O) /美元(TARGET_ELF)。斌
@(cd $(O) && JLinkExe ../loadbin.txt)
(O) /美元:
@mkdir -p $(v_opt)$(o)/ lst
如何创建主要的ELF目标
(O) /美元(TARGET_ELF)。$(O)/ $(ROM_SYMBOLS) $(LINK_SCRIPT) $(OBJ)
(V_LINK) (CC)美元(CFLAGS) (LDFLAGS)美元(OBJ)美元(patch_objs) - o $ @
#如何创建最终十六进制文件
(O) /美元(TARGET_ELF)。十六进制:$ (O) / (TARGET_ELF) .axf美元
$(V_OBJCOPY)$(OBJCOPY) -O ihex $< $@
如何创建最终的二进制文件
(O) /美元(TARGET_ELF)。斌:(O) / (TARGET_ELF) .axf美元
$(V_OBJCOPY)$(OBJCOPY) -O二进制文件$< $@
如何创建链接器脚本
(LINK_SCRIPT):美元(LINK_SCRIPT)。年代
(V_CPP) (CPP)美元美元(CFLAGS)我。/app -P $< -o $@
#如何创建一个清洁的已知符号列表,由ROM代码使用
(ROM_SYMDEF):美元(ROM_MAP_FILE)
$ (V_SED) sed - n - e ' s / * / / g p <美元| sed - e ' / ^ [,] / d ' | \
排序|dos2unix> $ @
#如何使用已知符号创建文件,以便在链接器脚本中使用
(ROM_SYMBOLS):美元(ROM_SYMDEF)
$ (V_GAWK)呆呆的{printf“% s = % s; \ n”,$ $ 3 $ $ 1 }' $< > $@
-include $(obj:.o = .d)
如何编译C文件
%.o:%.c
$(V_CC)$(CC) $(CFLAGS) -c $< -o $@
@rm - f * .d美元。*
@$(CC) -MM $(CFLAGS) $*.c > $*.d
@mv - f $ *。d $ * .d.tmp
@sed - e ' s * |: | $ *。< $*.d.tmp > $*.d.tmp
@sed - e ' s /。*://' -e 's/\\$$//' < $*.d.tmp | fmt -1 | \
SED -E'S / ^ * //'-e's / $$$ /:/'>> $ *。D
@rm -f $ *。d.tmp
#如何编译装配文件
%.o:%.s
$(V_CC)$(CC) $(CFLAGS) -c $< -o $@
嗨cverdier,
我也在我的mac上编译文件,我认为甚至ubuntu版本的工具链没有这个-fplugin=tree_switch_shortcut_elf选项(至少在我的版本中)。我确信编译代码没有'tree_switch_elf'选项是行不通的,因为该选项用于优化由riviera waves实现的FSM。一个疯狂的选择是在arm-non -gcc的版本中启用tree_switch_elf插件(在arm-linux-gnueabi的情况下尝试了这个方法,但是调试和编译gcc至少需要一个星期)。会很快更新吗
Mohit Maheshwari.
我设法编译与'tree_switch_elf'选项使用GCC 4.9 mac,https://launchpad.net/gcc-arm-embedded/4.9.我在Makefile中做了这个更改:
#优化标志
CFLAGS += -Os -ftree-switch-shortcut
没有运气,同样的崩溃在模块上,只要我使用cmd->channel_map选择一个频道广播。
如果我理解正确的话,tree-switch-shortcut不再是一个插件,它是默认的,现在是gcc的一个特性。该文件是gcc源代码的一部分,也在gcc/gcc文件夹中,您可以查看一下
是否有机会在使用GNU GCC使用无线电(包括Makefile和更新链接器脚本)具有完整配置的工作项目,如有完整配置的工作项目,请使用GNU GCC?
任何关于这个问题的帮助都将非常感谢!
谢谢:)
你好,
还有任何更新吗?
阅读App note B-024似乎意味着项目构建和工作,有人得到无线电与gcc工具链工作了吗?
谢谢
解决方案是使用此工具链:
https://launchpad.net/gcc-arm-embedded/4.9/4.9-2015-q3-update
并将-fplugin=tree_switch_shortcut_elf修改为-ftree-switch-shortcut
可能你会得到关于__weak的下一个错误,解决方法是在common.mk中的CFLAGS中添加- d weak="__attribute__((weak))"
以及关于__nop()的错误,通过添加-d“__ nop()”=“asm(\”nop \“)来解决该问题。
你能确认你生成的十六进制文件有效吗?