2016-11-10 17 views
0

すべての最新コンポーネントを含むgcc-6.2を使用したツールチェーンを構築しました。arm-none-eabi-gcを使用してarm-none-eabi-ldを起動しますか?

CC  = arm-none-eabi-gcc 
AS  = arm-none-eabi-as 
LD  = arm-none-eabi-ld 

私のMakefileのフラグは次のとおりです。私は、コンパイラを経由して持つことで連携しています

CFLAGS = -std=c11 -Wall -Werror -Wfatal-errors -Wstrict-prototypes -Wundef -gdwarf-2 -O2 -mthumb -mthumb-interwork -mcpu=cortex-m7 -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -mlittle-endian 

LDFLAGS = -nodefaultlibs -T./STM32F746NGHx_FLASH.ld -Wl,-Map=ugui3.map,--cref 

。背面のフロントとLDFLAGSでCFLAGS: CFLAGS = -mthumb

Linking: ugui3.elf 
arm-none-eabi-gcc -mthumb -mthumb-interwork -mcpu=cortex-m7 -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -mlittle-endian stm32746g_discovery.o stm32746g_discovery_lcd.o stm32746g_discovery_sdram.o stm32746g_discovery_ts.o system_stm32f7xx.o stm32f7xx_hal.o stm32f7xx_hal_cortex.o stm32f7xx_hal_dma.o stm32f7xx_hal_dma2d.o stm32f7xx_hal_dma_ex.o stm32f7xx_hal_gpio.o stm32f7xx_hal_i2c.o stm32f7xx_hal_i2c_ex.o stm32f7xx_hal_ltdc.o stm32f7xx_hal_pwr.o stm32f7xx_hal_pwr_ex.o stm32f7xx_hal_rcc.o stm32f7xx_hal_rcc_ex.o stm32f7xx_hal_sdram.o stm32f7xx_hal_uart.o stm32f7xx_ll_fmc.o stm32f7xx_hal_msp.o stm32f7xx_it.o main.o ugui.o ltdc.o sdram.o ft5336.o small_printf.o startup_stm32f746xx.o --output ugui3.elf -nodefaultlibs -T./STM32F746NGHx_FLASH.ld -Wl,-Map=ugui3.map,--cref 

私の質問-mthumb-インターワーク:

Linking: ugui3.elf 
arm-none-eabi-gcc -std=c11 -Wall -Werror -Wfatal-errors -Wstrict prototypes -Wundef -gdwarf-2 -O2 -mthumb -mthumb-interwork -mcpu=cortex-m7 -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -mlittle-endian stm32746g_discovery.o stm32746g_discovery_lcd.o stm32746g_discovery_sdram.o stm32746g_discovery_ts.o system_stm32f7xx.o stm32f7xx_hal.o stm32f7xx_hal_cortex.o stm32f7xx_hal_dma.o stm32f7xx_hal_dma2d.o stm32f7xx_hal_dma_ex.o stm32f7xx_hal_gpio.o stm32f7xx_hal_i2c.o stm32f7xx_hal_i2c_ex.o stm32f7xx_hal_ltdc.o stm32f7xx_hal_pwr.o stm32f7xx_hal_pwr_ex.o stm32f7xx_hal_rcc.o stm32f7xx_hal_rcc_ex.o stm32f7xx_hal_sdram.o stm32f7xx_hal_uart.o stm32f7xx_ll_fmc.o stm32f7xx_hal_msp.o stm32f7xx_it.o main.o ugui.o ltdc.o sdram.o ft5336.o small_printf.o startup_stm32f746xx.o --output ugui3.elf -nodefaultlibs -T./STM32F746NGHx_FLASH.ld -Wl,-Map=ugui3.map,--cref 

私はちょうどにCFLAGSにあるものを減らすことができます

  1. コンパイラを介してリンカを呼び出すことができますか?

  2. 第1の方法は第2の方法より優れていますか?より良い方法がありますか?

答えて

0

私はいくつかの他のプロジェクトに移行し、これを続けました。

A: 
arm-none-eabi-gcc -mthumb < .o files > --output image.elf -T./lpc1768.ld -nostartfiles -Wl,-Map=image.map,--cref 

B: 
arm-none-eabi-gcc < .o files > --output image.elf -T./lpc1768.ld -nostartfiles -Wl,-Map=image.map,--cref -L /usr/local/arm-none-eabi/lib/thumb 

AおよびBの両方が機能する。 "-mthumb"を指定したメソッドAは、親指バージョンのlibc.aにリンクしたいと仮定しています。メソッドBは、親指のバージョンを-L/usr/local/arm-none-eabi/lib/thumbと指定します。

さらに別のプロジェクトでは、リンク上に最小限の行を残すことができます。パス。

C: 
arm-none-eabi-gcc < .o files > --output image.elf -T./lpc2132.ld -nostartfiles -Wl,-Map=image.map,--cref 

メソッドCは、lpc2132(arm7tdmi-s)プロジェクトで動作します。しかし、メソッドCはlpc1768(Cortex-m3)プロジェクト(A & B)では動作しません。ほとんど同じ.ldファイルと開始ファイルがあります。

メソッドCが動作しない(明示的なライブラリまたはパスなし)理由は、ARMライブラリがデフォルトでリンクされているためです。 lpc1768はサムのみのプロセッサなので、これは良くありません。 「-mthumb」または「-L親指ライブラリへのパス」が必要です。

関連する問題