4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

STM32CubeIDEでTOPPERS/ASPカーネルとHALドライバを同居 - 準備編 (1)

Last updated at Posted at 2019-09-24

はじめに

こちらの記事にて「STM32CubeIDEでTOPPERS/ASPカーネルを動かす」ことには成功しました。

がしかし、単にASPカーネルを取り込んだだけなので、STマイクロのHALドライバが使えません。。。

昔気質のエンジニアであれば、
「ドライバはゴリゴリ書くもんじゃ!!」
なんて言い出しそうですが、時代じゃないですね。楽できるところは楽しちゃいましょう。笑

ということで、これらを同居させる方法を紹介します!

環境

本編

1. ASPカーネル環境構築

先に書いてしまうと、かなり面倒なため、以下に成果物は配置済みです。
面倒な方はaspディレクトリごとコピーし、1-3.にスキップしてください。

1-1. 過去資産の取り込み

STM32CubeIDEでTOPPERS/ASPカーネルを動かす - 準備編 - Qiita
https://qiita.com/imagou/items/8e19ed77884af4fb4e71

に従い、
ASPカーネルがビルドでき、かつ正常動作する
ところまで確認してください。

1-2. 追加修正

1-2-1. シンボル定義を削除

(削除する理由はこちらを参照)

まず、リンカスクリプトからhardware_init_hookを削除。

user@user-VirtualBox:~/toppers/asp/target/stm32l476discovery_gcc$ grep hardware_init_hook stm32l4xx_rom.ld
PROVIDE(hardware_init_hook = 0);
user@user-VirtualBox:~/toppers/asp/target/stm32l476discovery_gcc$ cp -p stm32l4xx_rom.ld stm32l4xx_rom.ld.org
user@user-VirtualBox:~/toppers/asp/target/stm32l476discovery_gcc$ grep -v hardware_init_hook stm32l4xx_rom.ld.org > stm32l4xx_rom.ld
user@user-VirtualBox:~/toppers/asp/target/stm32l476discovery_gcc$ diff stm32l4xx_rom.ld stm32l4xx_rom.ld.org
9a10
> PROVIDE(hardware_init_hook = 0);

また、cfg1_outのビルドが通らなくなるので、リンカスクリプトを二重化。

user@user-VirtualBox:~/toppers/asp/OBJ$ cp -p Makefile Makefile.org
user@user-VirtualBox:~/toppers/asp/OBJ$ sed -i -e 's/^\(\s*\)CFG1_OUT_LDFLAGS\(.*\)$(LDSCRIPT)$/&.org/' Makefile
user@user-VirtualBox:~/toppers/asp/OBJ$ diff Makefile Makefile.org
278c278
<   CFG1_OUT_LDFLAGS := $(CFG1_OUT_LDFLAGS) -Wl,-T,$(LDSCRIPT).org
---
>   CFG1_OUT_LDFLAGS := $(CFG1_OUT_LDFLAGS) -Wl,-T,$(LDSCRIPT)

1-2-2. ヘッダの名称変更

以下の通り、stm32l4xx.hというヘッダがincludeされています。

user@user-VirtualBox:~/toppers/asp$ find . -name stm32l4xx.h
./arch/arm_m_gcc/stm32l4xx/stm32l4xx.h
user@user-VirtualBox:~/toppers/asp$ grep -r stm32l4xx.h
arch/arm_m_gcc/stm32l4xx/MANIFEST:stm32l4xx.h
arch/arm_m_gcc/stm32l4xx/chip_config.c:#include "stm32l4xx.h"
arch/arm_m_gcc/stm32l4xx/stm32l4xx.h: *  @(#) $Id: stm32l4xx.h,v 1.2 2018/11/05 20:31:08 roi Exp $
(略)

本ファイルがHALドライバと重複してしまうので、事前に_renamed_stm32l4xx.hに変更しておきます。

当然ですが、ファイル名変更だけではビルドが通らないので、中身(include元)も変更してください。
(MANIFESTファイルも変更しなきゃいけない模様。。。)

1-3. ビルド・動作確認

先の手順と同様、ビルドが通ること、及び正常動作を確認してください。

2. アプリケーションの独立化

HALドライバ呼び出しのため、OBJディレクトリ配下にあったアプリケーションを独立化させます。

2-1. 作成

OBJディレクトリごとコピーしてMakefileを書き換えて云々、、、の手順が同じく面倒なので、以下に成果物を配置しました。
applicationディレクトリごとコピーしてください。

2-2. ビルド

ビルドが通ることだけ確認します。ここではコンパイルだけ実施、リンカは動かしていません。

(以下ディレクトリに移動し)
user@user-VirtualBox:~/toppers/application$ make depend
if ! [ -f Makefile.depend ]; then \
        rm -f kernel_cfg.timestamp kernel_cfg.h kernel_cfg.c ; \
(略)
check complete
Generating Makefile.depend.
user@user-VirtualBox:~/toppers/application$ make
arm-none-eabi-gcc -c  -DSIO_PORTID=2 -mlittle-endian -nostartfiles -mthumb  -mcpu=cortex-m4 -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -g  -Wall -O2  -DTOPPERS_CORTEX_M4 -D__TARGET_ARCH_THUMB=4 -D__TARGET_FPU_FPV4_SP -DTOPPERS_FPU_ENABLE -DTOPPERS_FPU_LAZYSTACKING -DTOPPERS_FPU_CONTEXT  -DTOPPERS_ROM -I. -I../asp/include -I../asp/arch -I../asp  -I../asp/target/stm32l476discovery_gcc -I../asp/arch/arm_m_gcc/stm32l4xx -I../asp/arch/arm_m_gcc/common -I../asp/arch/gcc   -DALLFUNC  -I../asp/kernel kernel_cfg.c
arm-none-eabi-gcc -c  -DSIO_PORTID=2 -mlittle-endian -nostartfiles -mthumb  -mcpu=cortex-m4 -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -g  -Wall -O2  -DTOPPERS_CORTEX_M4 -D__TARGET_ARCH_THUMB=4 -D__TARGET_FPU_FPV4_SP -DTOPPERS_FPU_ENABLE -DTOPPERS_FPU_LAZYSTACKING -DTOPPERS_FPU_CONTEXT  -DTOPPERS_ROM -I. -I../asp/include -I../asp/arch -I../asp  -I../asp/target/stm32l476discovery_gcc -I../asp/arch/arm_m_gcc/stm32l4xx -I../asp/arch/arm_m_gcc/common -I../asp/arch/gcc  sample1.c

3. STM32CubeIDEへの取り込み

3-1. ASPカーネル

3-1-1. 空のプロジェクト生成

STM32CubeIDEから「STM32 project」でもって作成します(ターゲットボードは適当に選択してください)。

  • 「Project Name」は「RTOS」
  • 「Targeted Binary Type」は「Static Library」
  • 「Targeted Project Type」は「Empty」

以上とし、「Finish」押下で、空のプロジェクトが生成されます!

SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-10-17_15-58-54_No-00.png

3-1-2. インポート

「RTOS」プロジェクトの上で右クリック - 「Import...」を選択。

SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-10-17_16-3-33_No-00.png

「General」 - 「File System」を選び、「Next >」押下。

SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-10-17_16-4-6_No-00.png

  1. 「From directory」で作成済みの「asp」ディレクトリを選択
  2. すべてのディレクトリ・ファイルにチェック
  3. 「Create top-level folder」にもチェックを入れる

とし、最後に「Finish」ボタンを押下すると、、、

SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-10-17_16-4-51_No-00.png

以下の通り、見事に取り込まれました!

SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-10-17_16-5-7_No-00.png

3-1-3. 余計なディレクトリを削除

必須ではありませんが、使わないであろう「Src」「Inc」は右クリックメニューから削除しておきましょう。
(画像はありません、すみません)

3-1-4. ビルドロケーションの変更

プロジェクトの上で右クリック - 「Properties」を開き、「C/C++ Build」メニューを選択します。

  1. 「Makefile generation」の「Generate Makefiles automatically」のチェックを外す
  2. 「Build location」の「Build directory」のお尻を「Debug」から「asp/OBJ」に変更

した後、「Apply and Close」を押下。

SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-10-18_15-17-27_No-00.png

3-1-5. いざ、ビルド

後は、右クリックメニューから「Clean Project」「Build Project」を実行するだけです。
(場合によっては、コンソールでのmake cleandep/make dependが必要かもしれません)

無事通っていますね!

SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-10-18_15-17-56_No-00.png

3-2. アプリケーション

3-2-1. 空のプロジェクト生成

こちらは単なるオブジェクトなので、STM32CubeIDEから「C/C++ project」でもって作成します。

下記画面のように、「C Managed Project」を選択してください。

SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-10-21_13-14-40_No-00.png

  • 「Project name」は「RTApp」
  • 「Project type」は「Empty Project」
  • 「Toolcahins」は「MCU ARM GCC」

とし、「Finish」押下で、空のプロジェクトが作成されます。

SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-10-21_13-16-54_No-00.png

3-2-2. インポート

[ASPカーネル](#3-1-2-インポート)とやり方は同じです。
インポートするディレクトリは「application」としてください。

SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-10-21_13-22-9_No-00.png

3-2-3. ビルドロケーションの変更

こちらは、「Build location」の「Build directory」のお尻を「Debug」から「application」に変更します。

SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-10-21_13-23-31_No-00.png

3-2-4. Makefile書き換え

ASPカーネルのパスが変わったので、Makefileを書き換えます。

user@user-VirtualBox:~/workspace/STM32CubeIDE/RTApp/application$ cp -p Makefile Makefile.org
user@user-VirtualBox:~/workspace/STM32CubeIDE/RTApp/application$ sed -i -e 's/^\(SRCDIR\)\(\s*\)\(=\)\(\s*\)\(.*\)$/\1\2\3\4..\/..\/RTOS\/asp/' Makefile
user@user-VirtualBox:~/workspace/STM32CubeIDE/RTApp/application$ diff Makefile Makefile.org
70c70
< SRCDIR = ../../RTOS/asp
---
> SRCDIR = ../asp

3-2-5. ビルド

こちらも、ビルド(コンパイル)が通ることを確認してください!
(同じく、手動でのmake cleandep/dependが必要かも)

SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-10-21_13-25-20_No-00.png

4. 動作確認

ここまででビルドは済んでいるので、ASPカーネル側のみ動作確認します。

4-1. 設定

「RTOS」プロジェクトの上で右クリック - 「Debug As」 - 「STM32 MCU C/C++ Application」を選択。

SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-10-21_13-30-46_No-00.png

「asp」が選択されたままの状態で「OK」押下。

SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-10-21_13-27-31_No-00.png

以下は、「Disabled auto build」としておいたほうが幸せになれそう。で「OK」押下。

SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-10-21_13-29-52_No-00.png

4-1. 動作確認

以降は(ダイアログが出たりしますが、適当にあしらって)ブレークポイントも張ってない手前、勝手にプログラムが動き出すはずです。

先の手順と同様、正常動作を確認してください。

おわりに

次記事も準備編の予定

STM32CubeIDEでTOPPERS/ASPカーネルとHALドライバを同居 - 準備編 (2) - Qiita
https://qiita.com/imagou/items/29edbaefcc3da5a9c073

参考

(特になし)

4
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?