1

私は RTOS と ARM Cortex MCU の両方に不慣れです。STM32L053 nucleo ボードで FreeRTOS + GCC + mbed.org のライブラリを使用する必要があります。GCC+mbed+qt-creator でツールチェーンを作成できましたが、この組み合わせに FreeRTOS を追加する必要があります。同じターゲットで FreeRTOS を使用するプロジェクトを既に取得しているため、そのプロジェクトの FreeRTOS ファイルを自分のファイルで使用できると想定しています。しかし、そのプロジェクトは、異なるコンパイラとライブラリを使用してビルドされています。私の疑問は次のとおりです。

  • 新しいコンパイラ (私の場合は GCC) で既存の FreeRTOS ポートを構成するために考慮すべきことは何ですか。
  • mbed ライブラリは FreeRTOS の設定に影響を与えましたか?
  • プロジェクトの Makefile に必要な変更は何ですか。(私の既存のプロジェクトの Makefile を以下に示します)
# このファイルは mbed.org によって自動的に生成されました。多くのための

情報、
# http://mbed.org/handbook/Exporting-to-GCC-ARM-Embedded を参照

/mbed/TARGET_NUCLEO_L053R8/TOOLCHAIN_GCC_ARM/stm32l0xx_hal_smartcard.o ./mbed/TARGET_NUCLEO_L053R8/TOOLCHAIN_GCC_ARM/stm32l0xx_hal_i2c.o ./mbed/TARGET_NUCLEO_L053R8/TOOLCHAIN_GCC_ARM/stm32l0 .exhal_INC_I2c.o パス. -I./mbed -I./mbed/TARGET_NUCLEO_L053R8
-I./mbed/TARGET_NUCLEO_L053R8/TOOLCHAIN_GCC_ARM -I./mbed/TARGET_NUCLEO_L053R8/TARGET_STM -I./mbed/TARGET_NUCLEO_L053R8/TARGET_STM/TARGET_STM32L0 -I./mbed/TARGET_NUCLEO_L053R8/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L053R8

LIBRARY_PATHS = -L./mbed/TARGET_NUCLEO_L053R8/TOOLCHAIN_GCC_ARM ライブラリ = -lmbed LINKER_SCRIPT = ./mbed/TARGET_NUCLEO_L053R8/TOOLCHAIN_GCC_ARM/STM32L053X8.ld

#################################################### ############################# AS = $(GCC_BIN)arm-none-eabi-as CC = $(GCC_BIN)arm- none-eabi-gcc CPP = $(GCC_BIN)arm-none-eabi-g++ LD  
= $(GCC_BIN)arm-none-eabi-gcc OBJCOPY = $(GCC_BIN)arm-none-eabi-objcopy OBJDUMP = $(GCC_BIN)arm-none-eabi-objdump SIZE = $(GCC_BIN)arm-none-eabi-サイズ



CPU = -mcpu=cortex-m0plus -mthumb CC_FLAGS = $(CPU) -c -g -fno-common
-fmessage-length=0 -Wall -fno-exceptions -ffunction-sections -fdata-sections -fomit-frame-pointer -MMD -MP CC_SYMBOLS = -DTARGET_NUCLEO_L053R8 -DTARGET_M0P -DTARGET_CORTEX_M -DTARGET_STM -DTARGET_STM32L0 -DTARGET_STM32L053CCR8 -DTOOLCHAINDT_GCH_PLUS_M0DOOL -DARM_MATH_CM0PLUS -DMBED_BUILD_TIMESTAMP=1435204562.85 -D__MBED__=1 -DTARGET_FF_ARDUINO -DTARGET_FF_MORPHO

LD_FLAGS = $(CPU) -Wl,--gc-sections --specs=nano.specs -Wl,--wrap,main
-Wl,-Map=$(PROJECT).map,--cref
#LD_FLAGS += -u _printf_float -u _scanf_float LD_SYS_LIBS = -lstdc++ -lsupc++ -lm -lc -lgcc -lnosys


ifeq ($(DEBUG), 1) CC_FLAGS += -DDEBUG -O0 else CC_FLAGS +=
-DNDEBUG -Os endif

.PHONY: すべてきれいな lst サイズ

すべて: $(PROJECT).bin $(PROJECT).hex サイズ


クリーン: rm -f $(PROJECT).bin $(PROJECT).elf $(PROJECT).hex $(PROJECT).map $(PROJECT).lst $(OBJECTS) $(DEPS)


.so: $(AS) $(CPU) -o $@ $ $@

lst: $(PROJECT).lst

サイズ: $(PROJECT).elf $(SIZE) $(PROJECT).elf

DEPS = $(OBJECTS:.o=.d) $(SYS_OBJECTS:.o=.d)
-$(DEPS) を含める

4

2 に答える 2

2

GCC でツールチェーンを作成しました

それはどういう意味ですか?私は認めようと思っているよりも長い間、さまざまな ARM アーキテクチャで GCC を使用しており (その多くはFreeRTOS Web サイト にリストされています)、実際にツール チェーンを作成する必要はまだありません。代わりに、ビルド前の GCC バイナリを常に使用してきました。ARM 自身は、誰でも (当然のことながら) 無料で、構成やビルドを必要としない GCC のバージョンを維持しています。

このボードを対象とするプロジェクトを含むプロフェッショナルな GCC ツールチェーンが必要な場合は、Atollic のツールを検討してください (Google で検索してください)。多くの STM32 ボード用のプロジェクトを含む無料の GCC ツールチェーンが必要な場合は、openstm32.org Web サイトにあるツールを検討してください。

それとも私は要点を逃していますか?

新しいコンパイラ (私の場合は GCC) で既存の FreeRTOS ポートを構成するために考慮すべきことは何ですか。

コンパイラに依存する FreeRTOS 構成オプションはほとんどありません。 configMINIMAL_STACK_SIZEはおそらくその 1 つです。使用される GCC ライブラリによっては、タスクに割り当てられるスタックを、たとえば IAR コンパイラを使用する場合よりも大きくする必要がある場合があります。ただし、アーキテクチャに依存するかなりの数の構成オプションがあります。たとえば、Cortex-M デバイスを使用する場合、デバイスに実装されている優先度ビットの数、システム コールを実行できる最大割り込み優先度などを指定する必要があります。これらを設定する最も簡単な方法は、 STM32 パーツの既存のプロジェクト - FreeRTOS ディストリビューションまたはツール会社 (上記の 2 つなど) から。

mbed ライブラリは FreeRTOS の構成に影響を与えましたか?

私はmbedライブラリに精通していませんが、注意すべきことは、割り込みを有効および無効にする方法です(FreeRTOSはそのアーキテクチャで割り込みをグローバルに無効にすることはありませんが、ライブラリも操作している場合に混乱する可能性のあるマスクのネストカウントを保持します割り込みマスク)、および SysTick 割り込みを使用する場合 (デフォルトでは、FreeRTOS は SysTick を使用して RTOS ティック割り込みを生成します)。

于 2015-06-30T21:09:00.927 に答える