将一个Keil uVision项目移植到GNU工具链

13个职位/ 0新
最后一篇
Mohit3112.
离线
最后一次露面:9个月,3个星期前
专家
加入:2014-08-04 13:45
将一个Keil uVision项目移植到GNU工具链

我使用的应用指南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:文件无法识别:文件格式无法识别
Collect2: error: ld returned 1 exit status
使:*** [出/ full_emb_sysram.axf]错误1

所以基本上补丁代码不被GCC-臂无 - EABI认可

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

谢谢你!
Mohit Maheshwari.

je_dialog
离线
最后一次露面:1个月1周前
职员
加入:2013-12-05 14:02
你好,Mohit,

你好,Mohit,

我们的GNU专家本周是OOO,我承认我自己没有太多的GNU经验。我在网上快速搜索了一下:。obj文件可以在GNU中链接吗?下面的这个线程暗示不是。

BR JE_Dialog

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

Mohit3112.
离线
最后一次露面:9个月,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.“你可以点我的资源在那里我可以得到兼容的编译器

剖腹脉
离线
最后一次露面:5年7个月前
加入:2014-09-25 14:54
你好,

你好,

我得到了相同的结果,当我用这个工具链gcc-arm-none-eabi-4_8-2014q3编译时,不能做广告。然而,我可以运行代码(即。Led闪烁)和它的工作。
我也可以证实,UART驱动程序不与工具链的工作。我使用的转换脚本生成Makefile文件。我也做了一些测试与没有运气的DA14580_BEACON_3.40-2.6示例代码。

无论样本代码,我使用当我设置CMD-> channel_map到什么,但我归零似乎崩溃的模块...

任何的想法 ?

剖腹脉
离线
最后一次露面:5年7个月前
加入:2014-09-25 14:54
我可以确认-fplugin

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

剖腹脉
离线
最后一次露面:5年7个月前
加入:2014-09-25 14:54
这是我的makefile

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

#该生成文件必须定义以下变量,其通过使用common.mk:
# O:输出目录
#STACK_SIZE:字节数到储备堆栈的
#Heap_size:为堆保留的字节数
# CORTEX_M:目标的Cortex-M模型
# STARTUP_DEFS:定义配置启动代码的值
# CFLAGS:用于编译和链接的标志
#ldflags:用于链接的标志
# ROM_MAP_FILE:ROM映射文件
#OBJ:对象文件编译和链接的列表
# TARGET_ELF:目标的名称(在生成的图像中使用)

# 输出目录
O ? =

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

#启动代码
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截面-fdata截面编译代码的大小
#cflags + = -flto
CFLAGS + = -ffunction截面-fdata截面-Wno隐函数声明
#代码大小链接
GC:=轮候册, - GC-节

SRC = SRC /
构建:=构建/

TOP?= $(壳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)的模块/应用程序/ SRC / app_sec_task.c \
美元(SRC)模块/ app / SRC / app_task.c

BOOT_SRC:= PLF / refip / SRC / ARCH /引导/ RVDS / system_ARMCM0.c \
PLF / refip / src目录/拱/主/ BLE / hardfault_handler.c

#boot_src_s:= PLF / RECIP / SRC / ARCH / BOOT / RVDS / BOOT_VECTORSS.S
BOOT_SRC_S: =

= 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 / BLE / LL / 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))

SRC:= $(addprefix $(SRC), $(BOOT_SRC_S))

HEADERS_DIR:=对话框/包括\
ip /祝福/霍奇金淋巴瘤/ src / hcih \
ip /祝福/霍奇金淋巴瘤/ src /主机/丙氨酸\
IP / BLE / HL / src目录/主机/ ATT / ATTC \
IP / BLE / HL / SRC / HOST / ATT / ATTM \
IP / BLE / HL / SRC / HOST / ATT / ATTS \
IP / BLE / 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 / BLE / HL / 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 / BLE / HL / src目录/ rwble_hl \
IP / BLE / LL / 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 \
模块/应用程序/ SRC \
模块/应用程序/ SRC / app_utils / app_console \
模块/应用程序/ SRC / app_utils / app_multi_bond \
模块/ app / src / app_utils / app_stream_queue \
模块/应用程序/ SRC / app_profiles / ANCC \
模块/应用程序/ SRC / app_profiles / BASC \
模块/应用程序/ SRC / app_profiles /低音\
模块/ app / src / app_profiles /阀瓣\
模块/ app / src / app_profiles /贬低\
模块/ app / src / app_profiles /蹄\
模块/ app / src / app_profiles / ht \
模块/应用程序/ SRC / app_profiles / IEU \
模块/ app / src / app_profiles /微处理器\
模块/ app / src / app_profiles /内\
模块/ app / src / app_profiles / prox_reporter \
模块/ app / src / app_profiles / pru \
模块/应用程序/ SRC / app_profiles / scppc \
模块/应用程序/ SRC / app_profiles / spotar \
模块/应用程序/ 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目录/拱/ LL / RVDS \
PLF / REFIP / SRC / ARCH / MAIN / BLE \
plf / accel \ / refip / src /驱动程序
plf / adc \ / refip / src /驱动程序
plf /电池\ / refip / src /驱动程序
PLF / refip / src目录/驱动器/ bme280 \
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目录/驱动器/ INV \
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 / refip / src目录/驱动器/ syscntl \
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 -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 $ * = $($ *)

#全局配置

/ 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使用的常见变量和配方。
#以下变量定义:
#cc:c交叉编译器
#CPP:交叉预处理器
#Objcopy:Cross-Objcopy
# USE_NANO: link flags to select newlib-nano
# USE_SEMIHOST:启用半主机的链接标志
#ured_nohost:链接标志以禁用半主轴
#地图:链接标志以创建地图文件
#LDSCRIPTS:链接标志使用自定义链接脚本,从$(LINK_SCRIPT)产生.S

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 " clear ";
V_SED = @echo " SED " $@;
V_GAWK = @echo " GAWK " $@;
别的
V_OPT = ' v '
endif

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

#是否使用半主机
USE_SEMIHOST:= --specs = rdimon.specs
USE_NOHOST: = = nosys.specs——规格

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

ARCH_FLAGS = -mthumb -mcpu =皮质-M $(CORTEX_M)

#普通编译标志
CFLAGS += $(ARCH_FLAGS) $(STARTUP_DEFS) -std=gnu99 . CFLAGS += $(ARCH_FLAGS) $(STARTUP_DEFS) -std=gnu99 . CFLAGS += $(ARCH_FLAGS

IFEQ($(V),2)
CFLAGS + = --verbose
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);做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).axf:$(O)/ $(ROM_SYMBOLS)$(LINK_SCRIPT)$(OBJ)
(V_LINK) (CC)美元(CFLAGS) (LDFLAGS)美元(OBJ)美元(patch_objs) - o $ @

#如何创建最终hex文件
$(o)/ $(target_elf).hex:$(o)/ $(target_elf).axf
$(V_OBJCOPY)$(OBJCOPY) -O ihex $< $@

#如何创建最终二进制文件
$(O)/ $(TARGET_ELF)的.bin:$(O)/ $(TARGET_ELF).axf
$(V_OBJCOPY)$(objcopy把)-O二进制$ <$ @

如何创建链接器脚本
(LINK_SCRIPT):美元(LINK_SCRIPT)。年代
$(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.p 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.
离线
最后一次露面:9个月,3个星期前
专家
加入:2014-08-04 13:45
嗨cverdier,

嗨cverdier,

我还编我的Mac上的文件,我认为工具链甚至Ubuntu的版本没有此-fplugin =(在版本我至少)tree_switch_shortcut_elf选项。我相信,没有编译“tree_switch_elf”选项的代码将不能工作,因为该选项用于优化FSM实现的海滨波。一个疯狂的选择是建立我们的版本手臂没有-GCC与tree_switch_elf插件启用(试图在ARM-Linux的gnueabi的情况下而回,但需要至少具有一个星期的调试和编译GCC)。将更新很快相同

Mohit Maheshwari.

剖腹脉
离线
最后一次露面:5年7个月前
加入:2014-09-25 14:54
我设法用

我用GCC 4.9 for mac编译了'tree_switch_elf'选项,https://launchpad.net/gcc-arm-embedded/4.9.我在Makefile中做了如下更改:

#优化标志
CFLAGS += -Os -ftree-switch-shortcut

没有运气,死机一样的模块,只要我使用CMD-> channel_map选择广播一个通道..

ankitdaf
离线
最后一次露面:2年9个月前
加入:2015年9月3日20:14
树切换 - 快捷方式是没有

如果我理解正确的话,树开关快捷键不再是一个插件,它是默认发生的,现在是gcc的一个特性。该文件是gcc源代码的一部分,也在gcc/gcc文件夹中,您可以看一看

剖腹脉
离线
最后一次露面:5年7个月前
加入:2014-09-25 14:54
还有机会吗

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

关于这个问题的任何帮助将非常感谢!

谢谢 :)

CoreyWilliamson.
离线
最后一次露面:4年12个月前
加入:2014-10-10 06:29
你好,

你好,

还有任何更新吗?

阅读应用笔记B-024似乎暗示了该项目建造和工程,已经有人得到了无线电工作与GCC工具链了吗?

谢谢

保罗.Deber
离线
最后一次露面:1年零3个月前
加入:2014-06-03 10:57
解决办法就是使用这个

解决方案是使用此工具链:
https://launchpad.net/gcc-arm-embedded/4.9/4.9-2015-q3-update
并改变-fplugin = tree_switch_shortcut_elf成-ftree开关的快捷

也许你会得到关于__weak下一个错误,解决通过添加-D__weak =“__ __属性((弱))”在common.mk的CFLAGS
以及关于__nop()的错误,通过添加-d“__ nop()”=“asm(\”nop \“)来解决该问题。

Mohit3112.
离线
最后一次露面:9个月,3个星期前
专家
加入:2014-08-04 13:45
你能确认这个hexfile吗

你能确认你生成的hexfile有效吗?