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

# はじめに

[こちらの記事](https://qiita.com/imagou/items/2a208c877db1a77d341b)の続き、準備編 (2) です。

# 本編

## 1. 準備

### 1-1. STM32プロジェクト追加

STM32CubeIDEから「STM32 project」を作成します。

- 「Project Name」は「STM32App」
- 他はデフォルトのまま

後は「Finish」押下。

![SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-10-21_13-45-44_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447304/0a91c5d2-51b1-a00b-c989-95bf5ac84b77.png)

以降も「Yes」押下でOKです。

![SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-10-21_13-51-16_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447304/e5fd3d44-b067-6e5c-4841-1e25da308ea9.png)

### 1-2. 割り込み設定変更

ASPカーネルで（たぶん）ディスパッチ時に使用している、SVC割り込みのコード作成をやめます。

「STM32App.ioc」を開き、左側フレームから「Categories」 - 「System Core」 - 「NVIC」を選択。

次に右側フレームの「Code generation」タブより、「System service call via SWI instruction」行の「Generate IRQ handler」のチェックを外します。

![SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-10-9_11-46-56_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447304/81f3bd86-f474-bb67-9dc6-7f6a9172fc9d.png)

保存後のコード生成も忘れずに！

### 1-3. ビルド設定変更

#### 1-3-1. 浮動小数点リンケージの変更

STM32Appプロジェクトの上で右クリック - 「Properties」を開き、「C/C++ Build」 - 「Settings」を選択、更に「Tool Settings」タブを選択。

「MCU Settings」の「Floating-point ABI」を「Mix HW/SW Implementation (-mfloat-abi=softfp)」とします。
（ASPカーネルと設定値を合わせています）

![SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-10-21_13-55-28_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447304/a23fef84-0db9-10f0-88f1-688e6039f0a1.png)

#### 1-3-2. ASPカーネルライブラリを取り込む

上記と同じく「Tool Settings」タブを選択。

「MCU GCC Linker」 - 「Libraries」の設定を以下とします。

- 「Libraries (-l)」に「kernel」を追加
- 「Library search path」に「"${workspace_loc:/RTOS}/asp/OBJ"」を追加

![SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-10-21_13-59-20_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447304/4170415a-5f69-a1ed-0803-2fdb2a786361.png)

#### 1-3-3. ASPカーネル・アプリケーションオブジェクトを取り込む

上記と同じく「Tool Settings」タブを選択。

「MCU GCC Linker」 - 「Miscellaneous」、「Additional object files」に以下の順で追加します。

- ${workspace_loc:/RTOS}/asp/OBJ/log_output.o
- ${workspace_loc:/RTOS}/asp/OBJ/vasyslog.o
- ${workspace_loc:/RTOS}/asp/OBJ/t_perror.o
- ${workspace_loc:/RTOS}/asp/OBJ/strerror.o
- ${workspace_loc:/RTOS}/asp/OBJ/target_inithook.o
- ${workspace_loc:/RTOS}/asp/OBJ/chip_serial.o
- ${workspace_loc:/RTOS}/asp/OBJ/banner.o
- ${workspace_loc:/RTOS}/asp/OBJ/syslog.o
- ${workspace_loc:/RTOS}/asp/OBJ/serial.o
- ${workspace_loc:/RTOS}/asp/OBJ/logtask.o
- ${workspace_loc:/RTApp}/application/sample1.o
- ${workspace_loc:/RTApp}/application/kernel_cfg.o

※手動でプロジェクトファイルを書き換えたほうがたぶん早い

![SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-10-21_14-11-20_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447304/63e91f1e-1f0d-7ffb-c89c-c52a5f22291e.png)

## 2. ビルド確認

この段階でビルドが通り、`STM32App.elf`が生成されれば、設定は完了しています。

```console
（略）
arm-none-eabi-size   STM32App.elf 
arm-none-eabi-objdump -h -S  STM32App.elf  > "STM32App.list"
   text	   data	    bss	    dec	    hex	filename
  18432	     20	   3196	  21648	   5490	STM32App.elf
Finished building: default.size.stdout
 
Finished building: STM32App.list
（略）
```

## 3. 動作確認

この段階では単なる空のアプリケーションなので、ログも出なければLEDも点滅しませんが、
**「ダウンロードでき、例外等が発生しない」**
その程度は見たほうがいい（かも）です。

# おわりに

~~次回~~以下記事で、いよいよHALドライバを使い、LEDを点滅~~させてみます~~させました！

**STM32CubeIDEでTOPPERS/ASPカーネルとHALドライバを同居 - 本編 - Qiita**
https://qiita.com/imagou/items/f13ddfbccecafb8d3f1b

# 参考

（特になし）