STM32のFreeRTOSを使ってみる

コンパイルオプション


スケッチの中でarchitecture、使用しているコア、ボード情報を判定することができます。
以下のコードでarchitecture、product_line、board_nameを判定しています。
#if defined(ARDUINO_ARCH_AVR)
  #define arch "AVR"
#elif defined(ARDUINO_ARCH_SAM)
  #define arch "SAM"
#elif defined(ARDUINO_ARCH_STM32)
  #define arch "STM32"
#else
  #define arch "UNKNOWN"
#endif

#if defined(__STM32F1__) // for maple core
  #define product_line "STM32F1(MAPLE)"
#elif defined(STM32F103xB) // for ST core
  #define product_line "STM32F103xB(ST)"
#elif defined(STM32F407xx) // for ST core
  #define product_line "STM32F407xx(ST)"
#else
  #define product_line "UNKNOWN"
#endif

#if defined(ARDUINO_NUCLEO_F103RB)
  #define board_type "ARDUINO_NUCLEO_F103RB"
#elif defined(ARDUINO_BLUEPILL_F103C8)
  #define board_type "ARDUINO_BLUEPILL_F103C8"
#elif defined(ARDUINO_BLACKPILL_F103C8)
  #define board_type "ARDUINO_BLACKPILL_F103C8"
#else
  #define board_type "UNKOWN"
#endif


void setup() {
  Serial.begin(115200);
}

void loop() {
  Serial.println("arch=" + String(arch));
  Serial.println("product_line=" + String(product_line));
  Serial.println("board_type=" + String(board_type));
#if defined(BOARD_NAME)
  Serial.println("BOARD_NAME=" + String(BOARD_NAME));
#endif
  delay(1000);
}

こ ちらのファイルに各ボードのビルド情報が定義されています。
NUCLEO-F103RBの場合は、以下の様に定義されています。
# NUCLEO_F103RB board
Nucleo_64.menu.pnum.NUCLEO_F103RB=Nucleo F103RB
Nucleo_64.menu.pnum.NUCLEO_F103RB.node="NODE_F103RB,NUCLEO"
Nucleo_64.menu.pnum.NUCLEO_F103RB.upload.maximum_size=131072
Nucleo_64.menu.pnum.NUCLEO_F103RB.upload.maximum_data_size=20480
Nucleo_64.menu.pnum.NUCLEO_F103RB.build.mcu=cortex-m3
Nucleo_64.menu.pnum.NUCLEO_F103RB.build.board=NUCLEO_F103RB
Nucleo_64.menu.pnum.NUCLEO_F103RB.build.series=STM32F1xx
Nucleo_64.menu.pnum.NUCLEO_F103RB.build.product_line=STM32F103xB
Nucleo_64.menu.pnum.NUCLEO_F103RB.build.variant=NUCLEO_F103RB
Nucleo_64.menu.pnum.NUCLEO_F103RB.build.cmsis_lib_gcc=arm_cortexM3l_math

NUCLEO-F103RBの名前でビルドした場合、コンパイル時に以下のオプションが使われます。

-DARDUINO_ARCH_STM32
-DSTM32F103xB
-DARDUINO_NUCLEO_F103RB
-DBOARD_NAME=NUCLEO_F103RB

MAPLEコアを使っても、STコアを使っても、「ARDUINO_ARCH_STM32」は定義されるので、
これを判定すればSTM32かどうかを判定することができます。

「__STM32F1__」はMAPLEコアだけで定義され、「STM32F103xB」はSTコアだけで定義されます。
これを判定すれば、MAPLEコアかSTコアが区別することができます。

これらの情報を判定すれば、どのボードなのか判定することができます。
MAPLEコアの表示
arch=STM32
product_line=STM32F1(MAPLE)

STコアの表示
arch=STM32
product_line=STM32F103xB(ST)
BOARD_NAME=NUCLEO_F103RB

こ ちらに新しいvariant(ボード)の追加手順が公開されています。

続く....