将Keil UVision项目移植到GNU工具链

13 posts / 0 new
Last post
Mohit3112.
离线
Last seen:8个月3天前
专家
加入:2014-08-04 13:45
将Keil UVision项目移植到GNU工具链

I am using application note B-24 ,after some editing i got it working till linking stage but after that i get this error

cc ../../../src/modules/app/src/app_project/template_fh/app_template_proj.o.
cc startup_armcm0.o.
链接out / full_emb_sysram.axf
。。/../../patch_code/obj/ch_map.obj: file not recognized: File format not recognized
collect2:错误:LD返回1个退出状态
make: *** [out/full_emb_sysram.axf] Error 1

so basically patch code is not recognised by gcc-arm-none-eabi

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

谢谢
Mohit Maheshwari.

je_dialog
离线
Last seen:1周5天前
职员
加入:2013-12-05 14:02
你好莫希特,

你好莫希特,

本周我们的GNU专家是ooo,允许我自己没有多大的GNU经验。我在线快速搜索:可以在GNU中链接才能链接吗?这个线程Belwo意味着没有。

BR JE_Dialog

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

Mohit3112.
离线
Last seen:8个月3天前
专家
加入: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.' can you point me to resource where i can get compatible compiler

剖腹脉
离线
Last seen:5年6个月前
加入:2014-09-25 14:54
你好,

你好,

我得到了相同的结果,当我使用这个工具链GCC-ARM-None-EABI-4_8-2014Q3编译时无法宣传。但是,我可以运行代码(即LED闪烁)及其工作。
I can also confirm that the uart driver is not working with that tool chain. I used the conversion script to generate the Makefile. I did also some test with the DA14580_BEACON_3.40-2.6 sample code with no luck.

Whatever sample code I use when I set cmd->channel_map to anything but zero I seems to crash the module...

Any idea ?

剖腹脉
离线
Last seen:5年6个月前
加入:2014-09-25 14:54
我可以确认-FPLUGIN

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

剖腹脉
离线
Last seen:5年6个月前
加入:2014-09-25 14:54
这是我的makefile

这是我的makefile以获取更多信息:
#
# The Makefile must define the following variables, which are used by common.mk:
#O:输出目录
# STACK_SIZE: number of bytes to reserve for the stack
#Heap_size:为堆保留的字节数
#Cortex_m:Cortex-M模型为目标
#startup_defs:define配置启动代码
#cflags:用于编译和链接的标志
#ldflags:用于链接的标志
#rom_map_file:rom地图文件
# OBJ: list of object files to compile and link
#target_ell:目标的名称(用于生成的图像)
#

# 输出目录
o?=出来

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

# Startup code
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 -ffunction-sections -fdata-sections to compile for code size
#cflags + = -flto
CFLAGS += -ffunction-sections -fdata-sections -Wno-implicit-function-declaration
#代码大小链接
GC := -Wl,--gc-sections

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)modules/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/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 / RECIP / SRC / ARCH / MAIN / BLE / ARCH_SLEEP.C \
PLF / REFIP / SRC / ARCH / MAIN / BLE / NMI_HANDLER.C \
PLF / RECIP / 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/rwble/rwble.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),$(profise_src))

srcs_s:= $(addprefix $(src),$(boot_src_s))

HEADERS_DIR := dialog/include \
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 /祝福/ hl \ / src /主机/差距
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 \
模块/ app / api \
modules/app/src \
modules/app/src/app_utils/app_console \
modules/app/src/app_utils/app_multi_bond \
模块/ app / src / app_utils / app_stream_queue \
modules/app/src/app_profiles/ancc \
modules/app/src/app_profiles/basc \
modules/app/src/app_profiles/bass \
模块/ app / src / app_profiles / disc \
模块/ app / src / app_profiles / play \
模块/ app / src / app_profiles / findme \
模块/ app / src / app_profiles / ht \
modules/app/src/app_profiles/ieu \
模块/ app / src / app_profiles / mpu \
模块/ app / src / app_profiles / neb \
模块/ app / src / app_profiles / prox_reporter \
模块/ app / src / app_profiles / pru \
modules/app/src/app_profiles/scppc \
modules/app/src/app_profiles/spotar \
modules/app/src/app_profiles/stream \
模块/ app / src / app_profiles / streamdatad \
模块/ app / src / app_profiles / streamdatah \
模块/常见/ api \
模块/ dbg / api \
模块/ gtl / api \
模块/ gtl / src \
modules/ke/api \
modules/ke/src \
模块/ nvds / api \
模块/ rf / api \
模块/ RWIP / API \
PLF / RECIP / SRC / ARCH \
PLF / REFIP / SRC / ARCH / BOOT / RVDS \
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 /司机/电池\
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/refip/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 / RECIP / 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),$(模块))
obj:= $(patsubst src /%c,build /%。o,$(srcs_c))$(patsubst src /%s,build /%。o,$(srcs_s))
INCLUDES := $(addprefix -I,$(addprefix $(SRC),$(HEADERS_DIR))) -I./app -I./app/system

#优化标志
#cflags + = -os -fplugin = tree_switch_shortcut_elf
CFLAGS += -Os
CFLAGS += $(INCLUDES)
cflags + = -include da14580_config.h

print-% : ; @echo $* = $($*)

#全局配置

rom_map_file:= ./misc/rom_symdef.txt

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

#不要抱怨未知属性(即Zero_Init)
cflags + = -wno-属性-wno-未使用

#Check:此标志可防止警告
# "uses 2-byte wchar_t yet the output is to use 4-byte wchar_t;
# use of wchar_t values across objects may fail"
#重新审视如果由于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:= $(startup:.s = .o)

obj:= $(obj_cfiles)$(obj_sfiles)$(startup_obj)

# target
TARGET_ELF := full_emb_sysram

包括常见的..

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

和我的常见..

#
#makefiles使用的常见变量和谱。
# The following variables are defined:
#cc:c交叉编译器
#CPP:交叉预处理器
#Objcopy:Cross-Objcopy
#ured_nano:链接标志选择newlib-nano
#ured_semihost:链接标志以启用半主轴
#ured_nohost:链接标志以禁用半主轴
#地图:链接标志以创建地图文件
# LDSCRIPTS: link flags to use a custom link script, generated from $(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

#详细转换
v?= 0
ifeq ($(V),0)
v_cc = @echo“cc”$ @;
V_CPP = @echo " CPP " $@;
v_link = @echo“链接”$ @;
v_objcopy = @echo“objcpy”$ @;
v_clean = @echo“干净”;
v_sed = @echo“sed”$ @;
v_gawk = @echo“gawk”$ @;
else
v_opt ='-v'
万一

#使用newlib-nano。要禁用它,请指定dust_nano =
use_nano:= --specs = nano.specs

#使用半主轴
USE_SEMIHOST := --specs=rdimon.specs
use_nohost:= --specs = nosys.specs

# Create map file
地图= -wl,-map = $(o)/ lst / $(target_elf).map

ARCH_FLAGS = -mthumb -mcpu=cortex-m$(CORTEX_M)

# general compilation flags
cflags + = $(Arch_flags)$(startup_defs)-std = gnu99

ifeq ($(V),2)
CFLAGS += --verbose
ldflags + = -wl, - 冗长
万一

rom_symdef:= rom.symdef
rom_symbols:= rom.symbols
link_script:= 580.lds
LDScripts:= -L。-t $(link_script)

all: $(O)/$(TARGET_ELF).hex $(O)/$(TARGET_ELF).bin

清洁:
$(V_CLEAN)for file in $(OBJ); do rm -f $(V_OPT) "$$file"; done
@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).bin
@(cd $(O) && JLinkExe ../loadbin.txt)

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

#如何创建主ELF目标
$(O)/$(TARGET_ELF).axf: $(O)/ $(ROM_SYMBOLS) $(LINK_SCRIPT) $(OBJ)
$(v_link)$(cc)$(cflags)$(ldflags)$(obj)$(patch_objs)-o $ @

# how to create the final hex file
$(o)/ $(target_elf).hex:$(o)/ $(target_elf).axf
$(v_objcopy)$(objcopy)-o ihex $ <$ @

# how to create the final binary file
$(O)/$(TARGET_ELF).bin: $(O)/$(TARGET_ELF).axf
$(V_OBJCOPY)$(OBJCOPY) -O binary $< $@

#如何创建链接器脚本
$(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)

#如何编译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 |。*:| $ *。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.
离线
Last seen:8个月3天前
专家
加入:2014-08-04 13:45
嗨cverdier,

嗨cverdier,

I also compiled files on my mac and i think even ubuntu-version of toolchain does not have this -fplugin=tree_switch_shortcut_elf option (at least in the version that i have) . I am sure that compiling code without 'tree_switch_elf' option will not work because that option is used for optimisation of FSM implemented by riviera waves. One crazy option is to build our on version of arm-none-gcc with tree_switch_elf plugin enabled ( tried that in case of arm-linux-gnueabi while back , but it will take at-least one week to debug and compile gcc ). will update on same soon

Mohit Maheshwari.

剖腹脉
离线
Last seen:5年6个月前
加入:2014-09-25 14:54
我设法编译了

我设法使用GCC 4.9进行“Tree_Switch_ELF”选项for Mac,https://launchpad.net/gcc-arm-embedded/4.9。我在makefile中进行了这种变化:

#优化标志
cflags + = -os -ftree-switch-快捷方式

没有路ck, same crash on the module as soon as I use cmd->channel_map to select one channel for broadcast..

ankitdaf
离线
Last seen:2年8个月前
加入:2015-09-03 20:14
树切换 - 快捷方式是没有

如果我正确理解,树切换快捷方式不再是插件,默认情况下会发生这种情况,并且现在是GCC的一个功能。该文件在GCC / GCC文件夹中也是GCC源的一部分,您可以看看

剖腹脉
离线
Last seen:5年6个月前
加入:2014-09-25 14:54
有没有机会拥有

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

Any help on this subject will be much appreciated !

谢谢:)

CoreyWilliamson.
离线
Last seen:4年10个月前
加入:2014-10-10 06:29
你好,

你好,

还有任何更新吗?

Reading the App note B-024 seems to imply that the project builds and works, has someone gotten the radio to work with the gcc tool chain yet?

谢谢

保罗.Deber
离线
Last seen:1年1个月前
加入:2014-06-03 10:57
解决方案是使用它

解决方案是使用此工具链:
https://launchpad.net/gcc-arm-embedded/4.9/4.9-2015-q3-update.
and change the -fplugin=tree_switch_shortcut_elf into -ftree-switch-shortcut

Possibly you'll get the next error about __weak, solve that by adding -D__weak="__attribute__((weak))" to the CFLAGS in common.mk
以及关于__nop()的错误,通过添加-d“__ nop()”=“asm(\”nop \“)来解决该问题。

Mohit3112.
离线
Last seen:8个月3天前
专家
加入:2014-08-04 13:45
你能确认六角文件吗?

你能确认你生成的六角文件吗?