はじめに
こちらの記事にて「STM32CubeIDEでTOPPERS/ASPカーネルを動かす」ことには成功しました。
がしかし、単にASPカーネルを取り込んだだけなので、STマイクロのHALドライバが使えません。。。
昔気質のエンジニアであれば、
「ドライバはゴリゴリ書くもんじゃ!!」
なんて言い出しそうですが、時代じゃないですね。楽できるところは楽しちゃいましょう。笑
ということで、これらを同居させる方法を紹介します!
環境
- Ubuntu 16.04 LTS
- 評価用ボード: STM32L4 Discovery kit IoT node - 型番はB-L475E-IOT01A
- STM32CubeIDE 1.0.2
本編
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」押下で、空のプロジェクトが生成されます!
3-1-2. インポート
「RTOS」プロジェクトの上で右クリック - 「Import...」を選択。
「General」 - 「File System」を選び、「Next >」押下。
- 「From directory」で作成済みの「asp」ディレクトリを選択
- すべてのディレクトリ・ファイルにチェック
- 「Create top-level folder」にもチェックを入れる
とし、最後に「Finish」ボタンを押下すると、、、
以下の通り、見事に取り込まれました!
3-1-3. 余計なディレクトリを削除
必須ではありませんが、使わないであろう「Src」「Inc」は右クリックメニューから削除しておきましょう。
(画像はありません、すみません)
3-1-4. ビルドロケーションの変更
プロジェクトの上で右クリック - 「Properties」を開き、「C/C++ Build」メニューを選択します。
- 「Makefile generation」の「Generate Makefiles automatically」のチェックを外す
- 「Build location」の「Build directory」のお尻を「Debug」から「asp/OBJ」に変更
した後、「Apply and Close」を押下。
3-1-5. いざ、ビルド
後は、右クリックメニューから「Clean Project」「Build Project」を実行するだけです。
(場合によっては、コンソールでのmake cleandep/make dependが必要かもしれません)
無事通っていますね!
3-2. アプリケーション
3-2-1. 空のプロジェクト生成
こちらは単なるオブジェクトなので、STM32CubeIDEから「C/C++ project」でもって作成します。
下記画面のように、「C Managed Project」を選択してください。
- 「Project name」は「RTApp」
- 「Project type」は「Empty Project」
- 「Toolcahins」は「MCU ARM GCC」
とし、「Finish」押下で、空のプロジェクトが作成されます。
3-2-2. インポート
[ASPカーネル](#3-1-2-インポート)とやり方は同じです。
インポートするディレクトリは「application」としてください。
3-2-3. ビルドロケーションの変更
こちらは、「Build location」の「Build directory」のお尻を「Debug」から「application」に変更します。
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が必要かも)
4. 動作確認
ここまででビルドは済んでいるので、ASPカーネル側のみ動作確認します。
4-1. 設定
「RTOS」プロジェクトの上で右クリック - 「Debug As」 - 「STM32 MCU C/C++ Application」を選択。
「asp」が選択されたままの状態で「OK」押下。
以下は、「Disabled auto build」としておいたほうが幸せになれそう。で「OK」押下。
4-1. 動作確認
以降は(ダイアログが出たりしますが、適当にあしらって)ブレークポイントも張ってない手前、勝手にプログラムが動き出すはずです。
先の手順と同様、正常動作を確認してください。
おわりに
次記事も準備編の予定。
STM32CubeIDEでTOPPERS/ASPカーネルとHALドライバを同居 - 準備編 (2) - Qiita
https://qiita.com/imagou/items/29edbaefcc3da5a9c073
参考
(特になし)
![SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-10-17_15-58-54_No-00.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F447304%2F4831ff83-2863-1b81-13db-53bf724832da.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=80bff15ba0593c3bbdeeba8a9027051a)
![SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-10-17_16-3-33_No-00.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F447304%2F7b8003b2-61bb-3751-d656-b9a82551c1bd.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=2eac3289e8f42ee434cd64cdcd103b64)
![SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-10-17_16-4-6_No-00.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F447304%2F7608737b-ab40-7e4f-589d-084d6cb010f1.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=74405df955074fbe61f45b09a3da081f)
![SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-10-17_16-4-51_No-00.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F447304%2F759e5538-cac3-48ce-7129-40ab1660c7b6.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=8afd3f7bfcf8e9d42592d22d566042cb)
![SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-10-17_16-5-7_No-00.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F447304%2F47f61bc6-77f5-acc9-0a61-de7729a8a6c7.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=98f30671f9542fef8c7bc64cfd2041aa)
![SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-10-18_15-17-27_No-00.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F447304%2F08e8d2ac-f0c9-e811-55d9-71b6b0aacbd7.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=702d70425d268a8766c3561a1056723b)
![SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-10-18_15-17-56_No-00.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F447304%2Fd2763827-e381-b975-8197-2f95432b7a0f.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=122648480ceba9e9ee7613a33924bb28)
![SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-10-21_13-14-40_No-00.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F447304%2F0df4bb24-79c5-ca7b-026f-8032779f98c0.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=472c1b8557d2360ea141a2572a69c212)
![SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-10-21_13-16-54_No-00.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F447304%2F82a63576-2932-f79e-5279-45e5465fec91.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=dc82ba768befc170b361b87268b5f84f)
![SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-10-21_13-22-9_No-00.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F447304%2F772c2d10-ca86-7234-bead-194467966184.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=42b15c18049cbdb54492ae4b5574c1b0)
![SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-10-21_13-23-31_No-00.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F447304%2Fc687026e-653f-9fb1-8e10-7bc153560baf.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=b309c3b07479a2fdd328eff868347610)
![SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-10-21_13-25-20_No-00.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F447304%2F0640f3c8-3e14-666b-63e6-d839a7ec764b.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=040295d630f4f438ac3509acb470fdbe)
![SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-10-21_13-30-46_No-00.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F447304%2Fc6e3295e-031b-b628-1c9f-029d49024b75.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=0bbd2e2beacb4d143d4e2ed33736a27e)
![SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-10-21_13-27-31_No-00.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F447304%2Fe688380b-721a-1234-cd19-d2b52178def5.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=81670ac9b19e799fc80f6d4607dae1e7)
![SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-10-21_13-29-52_No-00.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F447304%2Feae3bd37-62cb-0767-7c93-a894e09c5df2.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=c08342d5238632daf824179227123381)