はじめに
ついにASPカーネルとHALドライバを同居させます!
(本編の)本編
1. 準備
1-1. リアルタイムアプリケーション側の変更
1-1-1. サンプルコード書き換え
RTApp(RTOSではないので注意!)プロジェクトのsample.c
に、LED2を点滅させるコードを追加してやります。
以下のdiffを参考にしてください。
user@user-VirtualBox:~/workspace/STM32CubeIDE/RTApp/application$ diff sample1.c.org sample1.c
114a115,116
> /* HALを使用したいので */
> #include "main.h"
152a155,156
> /* タスク1ならトグル */
> if (tskno == 1) HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin);
しかしあまりにも雑なので、以下にコードを置いておきました。
https://github.com/imagou/QiitaSource/tree/master/STM32CubeIDE_ASP_HAL
1-1-2. Makefileの書き換え
includeパスを追加してやる必要があります。
こちらも以下diffを参考、またgithubにも配置済み。
user@user-VirtualBox:~/workspace/STM32CubeIDE/RTApp/application$ diff Makefile Makefile.org
148d147
< CDEFS := $(CDEFS) -DSTM32L475xx
150d148
< INCLUDES := $(INCLUDES) -I../../STM32App/Inc -I../../STM32App/Drivers/STM32L4xx_HAL_Driver/Inc -I../../STM32App/Drivers/CMSIS/Device/ST/STM32L4xx/Include -I../../STM32App/Drivers/CMSIS/Include
1-2. STM32アプリケーション側の変更
main()
に、ASPカーネルのスタートアップを追加します。
以下同文。
user@user-VirtualBox:~/workspace/STM32CubeIDE/STM32App/Src$ diff main.c.org main.c
72a73,74
> void hardware_init_hook(void);
> void sta_ker(void);
77a80,81
> void _kernel__start(void) {}
> void software_term_hook(void) {}
117a122,123
> hardware_init_hook();
> sta_ker();
また、タイマハンドラに、ASPカーネルのティック関数呼び出しを追加。
以下同文。
user@user-VirtualBox:~/workspace/STM32CubeIDE/STM32App/Src$ diff stm32l4xx_it.c.org stm32l4xx_it.c
49a50
> void target_timer_handler(void);
171a173
> target_timer_handler();
2. ビルド
2-1. リアルタイムアプリケーションのビルド
コンパイルさえ通っていればOKです。
(たぶんワーニングは出ます)
2-2. STM32アプリケーションのビルド
こちらは問題なく成功するはず。
3. 動作確認
ASPカーネル動作、及び0.4秒おきにLED2が点滅することを確認してください。
4. 解説
sample1.c
のdiff、及び実動作から一目瞭然ですが、HALドライバを用いてLEDをトグルさせているだけです!
おわりに
単純に、ASPカーネルのスタートアップ関数を呼ぶだけでOKでした。
すっきり。
残課題
3つもプロジェクトがあるのは鬱陶しいので、RTAppはSTM32Appに統合したほうがいい気もしていますが、今後の課題とします。
参考
(特になし)