Porting a Keil uVision project to the GNU tool chain

13个帖子/ 0新
最后一篇
Mohit3112.
Offline
最后一次露面:7 months 2 weeks ago
Expert
加入:2014-08-04 13:45
Porting a Keil uVision project to the GNU tool chain

我正在使用应用笔记B-24,在一些编辑之后,我才能完成链接阶段,但在此之后我得到了这个错误

cc ../../../src/modules/app/src/app_project/template_fh/app_template_proj.o.
cc startup_armcm0.o.
LINK out/full_emb_sysram.axf
../../patch_code/obj/ch_map.odj:未识别的文件:未识别文件格式
collect2: error: ld returned 1 exit status
制作:*** [out / full_emb_sysram.axf]错误1

因此,GCC-ARM-None-EABI无法识别基本的补丁代码

任何关于我可能做错的评论?

Thank you
Mohit Maheshwari.

je_dialog
Offline
最后一次露面:1 day 11 hours ago
职员
加入:2013-12-05 14:02
Hello Mohit,

Hello Mohit,

our GNU expert is OOO this week and admittedly I dont have much experience of GNU myself. I did a quick search online : can .obj files be linked in GNU ? this thread belwo implies not.

BR JE_DIALOG.

http://www.delorie.com/djgpp/v2faq/faq17_5.html.

Mohit3112.
Offline
最后一次露面:7 months 2 weeks ago
Expert
加入:2014-08-04 13:45
谢谢你的relpy,我得到了新的

谢谢你的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.“你能把我指向资源,我可以得到兼容的编译器

剖腹脉
Offline
最后一次露面:5 years 5 months ago
加入:2014-09-25 14:54
Hi,

Hi,

I ve got the same result, can not advertise when I compile with this toolchain gcc-arm-none-eabi-4_8-2014q3. However I can run come code (ie. led blinking) and its working.
我还可以确认UART驱动程序无法使用该工具链。我使用转换脚本来生成makefile。我也用DA14580_Beacon_3.40-2.6的样本代码进行了一些测试,没有运气。

无论我将CMD-> Channel_Map设置为零但零的任何东西,我似乎都崩溃了...

任何想法 ?

剖腹脉
Offline
最后一次露面:5 years 5 months ago
加入:2014-09-25 14:54
I can confirm that -fplugin

我可以确认--fplugin = tree_switch_shortcut_ELF与Windows&Mac版本的GCC-ARM-None-EABI-4_8-2014Q3不兼容,但仅在Linux上。我没有尝试使用带有选项的Linux盒子(我正在编译在Mac上。)

剖腹脉
Offline
最后一次露面:5 years 5 months ago
加入:2014-09-25 14:54
这是我的makefile

这是我的makefile以获取更多信息:

#makefile必须定义以下变量,该变量由common.mk使用:
#O: output directory
#stack_size:为堆栈保留的字节数
#Heap_size:为堆保留的字节数
#CORTEX_M: the Cortex-M model to target
#STARTUP_DEFS: define's that configure the start-up code
#CFLAGS: flags used for compilation AND linking
#ldflags:用于链接的标志
#ROM_MAP_FILE:ROM map file
#obj:要编译和链接的对象文件列表
#TARGET_ELF: name of the target (used in the generated images)

# 输出目录
O ?= out

#堆栈大小
stack_size = 0x0600.
#堆大小
heap_size = 0x0100.

#启动代码
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 -funding-sections -fdata-sections编译代码大小
#cflags + = -flto
cflags + = -ffunction-sections -fdata-sections -wno-mackic-function-ocomation
#代码大小链接
GC:= -WL, - GC-部分

SRC := src/
构建:=构建/

top?= $(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)modules/app/src/app_task.c

boot_src:= plf / scip / src / arch / boot / rvds / system_armc0.c \
PLF / RECIP / SRC / ARCH / MAIN / BLE / 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/main/ble/arch_sleep.c \
plf/refip/src/arch/main/ble/nmi_handler.c \
plf/refip/src/arch/main/ble/arch_system.c

NVDS_SRC := modules/nvds/src/nvds.c

RWBLE_SRC := modules/rwip/src/rwip.c \
IP / BLE / LL / SRC / RWBER / RWBE.C

HOST_SRC := ip/ble/hl/src/host/gap/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))

标题_DIR:=对话框/包括\
ip /ble/hl/src/hcih \
ip /ble/hl/src/host/att \
IP / BLE / HL / SRC / HOST / ATT / ATTC \
IP / BLE / HL / SRC / HOST / ATT / ATTM \
IP / BLE / HL / SRC / HOST / ATT / ATTS \
IP / BLE / HL / SRC / HOST / GAP \
IP / BLE / HL / SRC / HOST / GAP / GAPC \
ip /ble/hl/src/host/gap/gapm \
ip /ble/hl/src/host/gatt \
ip /ble/hl/src/host/gatt/gattc \
IP / BLE / HL / SRC / Host / Gatt / Gattm \
ip /ble/hl/src/host/i2c \
IP / BLE / HL / SRC / HOST / I2C / I2CC \
IP / BLE / HL / SRC / HOST / I2C / I2CM \
IP / BLE / HL / SRC / Host / L2C / L2CC \
IP / BLE / HL / SRC / Host / SMP \
ip /ble/hl/src/host/smp/smpc \
IP / BLE / HL / SRC / Host / SMP / SMPM \
IP / ble / hl / src / rwble_hl \
IP / BLE / LL / SRC / CONTROLLER / EM \
IP / BLE / LL / SRC / CONTROLLER / LLC \
IP / BLE / LL / SRC / CONTROLLER / LLD \
ip /ble/ll/src/controller/llm \
IP / BLE / LL / SRC / HCIC \
IP / ble / ll / src / rwble \
modules/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 / ancc \
模块/ app / src / app_profiles / basc \
模块/ app / src / app_profiles / bass \
模块/ app / src /应用程序_profiles/disc \
模块/ app / src /应用程序_profiles/diss \
模块/ app / src /应用程序_profiles/findme \
模块/ app / src /应用程序_profiles/ht \
模块/ app / src / app_profiles / ieu \
模块/ app / src /应用程序_profiles/mpu \
模块/ app / src /应用程序_profiles/neb \
模块/ 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 / stree \
模块/ app / src / app_profiles / streamdatad \
模块/ app / src / app_profiles / streamdatah \
模块/常见/ api \
模块/ dbg / api \
模块/ gtl / api \
modules/gtl/src \
模块/ ke / api \
模块/ ke / src \
modules/nvds/api \
模块/ rf / api \
模块/ RWIP / API \
PLF / RECIP / SRC / ARCH \
plf refip / src / arch / boot /测量\
plf/refip/src/arch/compiler/rvds \
PLF / REFIP / SRC / ARCH / LL / RVDS \
PLF / REFIP / SRC / ARCH / MAIN / BLE \
plf/refip/src/driver/accel \
plf/refip/src/driver/adc \
plf/refip/src/driver/battery \
PLF / REFIP / SRC / DRIVER / BME280 \
plf/refip/src/driver/coex \
plf/refip/src/driver/emi \
plf/refip/src/driver/gpio \
PLF / RECIP / SRC / DRIVER / I2C_CORE \
PLF / RECIP / SRC / DRIVER / I2C_EEPROM \
plf/refip/src/driver/intc \
PLF / RECIP / SRC / DRIVER / INV \
plf/refip/src/driver/led \
PLF / REFIP / SRC / DRIVER / PWM \
plf/refip/src/driver/rc5 \
plf/refip/src/driver/reg \
PLF / REFIP / SRC / DRIVER / SPI \
plf/refip/src/driver/spi_flash \
PLF / RECIP / SRC / DRIVER / SPI_HCI \
PLF / REFIP / SRC / DRIVER / SYSCNTL \
PLF / REFIP / SRC / DRIVER / TIMER \
PLF / RECIP / SRC / DRIVER / WKUPCT_QUADEC

BUILD_DIR := $(addprefix $(BUILD),$(MODULES))
OBJ := $(patsubst src/%.c,build/%.o,$(SRCS_C)) $(patsubst src/%.s,build/%.o,$(SRCS_S))
包括:= $(addprefix -i,$(addprefix $(src),$(headers_dir)))-i./app -i./app/system

#优化标志
#cflags + = -os -fplugin = tree_switch_shortcut_elf
cflags + = -os
cflags + = $(包括)
cflags + = -include da14580_config.h

打印-% : ;@echo $ * = $($ *)

#全局配置

ROM_MAP_FILE := ./misc/rom_symdef.txt

LDFlags + = $(USE_NANO)$(USE_NOHOST)$(LDScripts)$(GC)$(地图)

#don't complain about unknown attributes (i.e. zero_init)
cflags + = -wno-属性-wno-未使用

#CHECK: this flag prevents the warning
#“使用2字节WCHOR_T但输出是使用4字节WCH1_T;
#使用对象的WCHAR_T值可能会失败“
#revisit if things don't work as expected with wchar_t strings.
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 := $(STARTUP:.S=.o)

OBJ := $(obj_cfiles) $(obj_Sfiles) $(startup_obj)

# 目标
target_ell:= full_emb_sysram

include common.mk

---------------------

和我的常见..


#Common variables and recipies used by Makefiles.
#定义了以下变量:
#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).s

CROSS_COMPILE = ../toolschain/gcc-arm-none-eabi-4_8-2014q3/bin/arm-none-eabi-
CC = $(CROSS_COMPILE)gcc
CPP = $(CROSS_COMPILE)cpp
objcopy = $(cross_compile)objcopy

#verbosity switch
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

#Use newlib-nano. To disable it, specify USE_NANO=
use_nano:= --specs = nano.specs

#Use semihosting or not
use_semihost:= --specs = rdimon.specs
USE_NOHOST := --specs=nosys.specs

#创建地图文件
地图= -wl,-map = $(o)/ lst / $(target_elf).map

ARCH_FLAGS = -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).hex $(o)/ $(target_elf).bin

干净的:
$(v_clean)以$(obj)为文件;do 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)

run: $(O)/$(TARGET_ELF).bin
@(CD $(o)&& jlinkexe ../loadbin.txt)

$(O)/ :
@mkdir -p $(v_opt)$(o)/ lst

#how to create the main ELF target
$(o)/ $(target_elf).axf:$()/ $(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).bin:$()/ $(target_elf).axf
$(v_objcopy)$(objcopy)-o二进制$ <$ @

#how to create the linker script
$(LINK_SCRIPT): $(LINK_SCRIPT).S
$(v_cpp)$(cpp)$(cflags)-i./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)gawk'{printf“%s =%s; \ n”,$$ 3,$$ 1}'$ <> $ @

-include $(obj:.o = .d)

#how to compile C files
%.o:%.c
$(v_cc)$(cc)$(cflags)-c $ <-o $ @
@rm -f $ *。天。*
@$(CC) -MM $(CFLAGS) $*.c > $*.d
@mv -f $ *。D $ *。D.TMP
@sed -e 's|.*:|$*.o:|' < $*.d.tmp > $*.d
@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 $ @

Mohit3112.
Offline
最后一次露面:7 months 2 weeks ago
Expert
加入:2014-08-04 13:45
嗨cverdier,

嗨cverdier,

我还编译了我的Mac上的文件,我认为甚至Ubuntu-version的工具链没有这个--fplugin = tree_switch_shortcut_elf选项(至少在我拥有的版本中)。我确信没有'tree_switch_elf'选项的编译代码将无法运行,因为该选项用于优化由Riviera波实现的FSM。一个疯狂的选项是通过启用Tree_Switch_EFP插件构建我们的ARM-None-GCC版本(在返回的ARM-Linux-GNUEABI的情况下尝试,但它将在调试和编译GCC中采用。会很快更新

Mohit Maheshwari.

剖腹脉
Offline
最后一次露面:5 years 5 months ago
加入:2014-09-25 14:54
I managed to compile with the

I managed to compile with the 'tree_switch_elf' option using GCC 4.9 for mac,https://launchpad.net/gcc-arm-embedded/4.9. I make this change in the Makefile :

#优化标志
cflags + = -os-ftree-switch-shortcut

在我使用cmd-> channel_map时,在模块上没有运气,在模块上相同的崩溃,选择一个广播频道..

ankitdaf.
Offline
最后一次露面:2年7个月前
加入:2015-09-03 20:14
树切换 - 快捷方式是没有

树切换 - 快捷方式是没有longer a plugin if I understood correctly, it happens by default and is a feature of gcc now. The file is a part of the gcc source as well in the gcc/gcc folder, you can have a look

剖腹脉
Offline
最后一次露面:5 years 5 months ago
加入:2014-09-25 14:54
Is there any chance to have

是否有机会在使用GNU GCC使用无线电(包括Makefile和更新链接器脚本)具有完整配置的工作项目,如有完整配置的工作项目,请使用GNU GCC?

对这一主题的任何帮助都非常感谢!

谢谢 :)

CoreyWilliamson.
Offline
最后一次露面:4 years 9 months ago
加入:2014-10-10 06:29
Hi,

Hi,

还有任何更新吗?

阅读App Note B-024似乎暗示该项目构建和作品,有人有人遇到了与GCC工具链一起使用吗?

Thanks

保罗.Deber
Offline
最后一次露面:1年1个月前
加入:2014-06-03 10:57
The solution is to use this

解决方案是使用此工具链:
https://launchpad.net/gcc-arm-embedded/4.9/4.9-2015-q3-update
并将-fplugin = tree_switch_shortcut_ELF更改为-Ftree-Switch-快捷方式

可能您将获得关于__weak的下一个错误,通过添加-d__weak =“__属性__((弱))”在compar中的cflags来解决。
以及关于__nop()的错误,通过添加-d“__ nop()”=“asm(\”nop \“)来解决该问题。

Mohit3112.
Offline
最后一次露面:7 months 2 weeks ago
Expert
加入:2014-08-04 13:45
can you confirm the hexfile

can you confirm the hexfile you generated worked ?