【STM32(nucleo)】PlatformIOでFPUを有効化する方法

前回の記事で構築したSTM32開発環境(PlatformIO+STM32CubeMX)は初期状態ではFPUが無効になってます

本記事ではFPUの有効化方法とその他やっておくべき設定について解説します

STM32(nucleo)開発環境構築(PlatformIO+STM32CubeMX)

FPUの有効化方法

FPUはCCFLAGSとLINKFLAGSに以下オプションを設定することで有効になります

-mfloat-abi=hard
-mfpu=fpv4-sp-d16

PlatformIOにてオプションを追加する方法は以下の通りです

  1. 外部スクリプトファイルを作成
  2. 作成した外部スクリプトファイルをplatformio.iniに追加(extra_scripts)

外部スクリプトファイル作成

CCFLAGSとLINKFLAGSにオプションを追加するスクリプトファイルを作成します

スクリプトファイルのひな型はPlatformIOのドキュメントページを参考にしました

Import("env")

#
# Dump build environment (for debug)
# print(env.Dump())
#

flags = [
    "-mfloat-abi=hard",
    "-mfpu=fpv4-sp-d16"
]
env.Append(CCFLAGS=flags, LINKFLAGS=flags)

作成した外部スクリプトファイルをplatformio.iniに追加(extra_scripts)

platformio.iniはプロジェクトフォルダ内にあります

以下が設定例です(extra_scripts = pre:[スクリプトファイル名]で指定します)

[env:nucleo_g474re]
platform = ststm32
board = nucleo_g474re
framework = stm32cube
build_flags = -Wl,-Map,output.map
board_build.ldscript = STM32G474RETX_FLASH.ld
extra_scripts = pre:extra_script.py
monitor_speed = 115200

[platformio]
include_dir = Core/Inc
src_dir = Core/Src

FPUが有効になっているかどうかの確認

sinf関数を実行したときの逆アセンブルを確認してFPUが有効になっているかどうかを判定しました

FPU有効後はVMOV、VLDR、VSUB、VNEGといったfloating-point命令が使用されています

・FPU有効化前

・FPU有効化後

その他の設定について

本記事に乗せたplatformio.iniについて、プロジェクト生成時より一部手を加えているのでついでに説明します

mapファイル出力設定(build_flags)

ビルド後にROM/RAMのマッピング情報をoutput.mapとして出力します

build_flags = -Wl,-Map,output.map

シリアルモニタ設定(monitor_speed)

STM32CubeMXのデフォルト設定が115,200bpsになっているのでシリアルモニタを使う場合は設定が必要です

(基本tera termを使うのであまり意味はなさそうですが・・・)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA