STM32RTOS開発3注意点(後編)

STM32MCUでRTOS開発を行う時の3注意点、前編のSTM32CubeMX、HALに続き、本稿後編でCMSIS-RTOS関連を示します。

※木曜からの東京オリンピック4連休のため、通常金曜を本日水曜日に先行して投稿します。

前編は、STM32RTOS開発実例として、NUCLEO-G474RE FreeRTOS_QueuesサンプルプロジェクトのSTM32CubeMX(以下CubeMX)コード出力を使い、HALタイムベース変更の必要性を示しました。後編は、前編と同じ実例を使ってCMSIS-RTOSの注意点を示します。

FreeRTOS_Queues STM32CubeMXファイルのTasks and Queues

NUCLEO-G474RE FreeRTOS_QueuesサンプルプロジェクトのCubeMX構成ファイル:FreeRTOS_Queues.icoを開き、Middleware>FREERTOSのTasks and Queuesタブをクリックしたのが下図です。

FreeRTOS_QueuesのSTM32CubeMXファイルTasks and Queues
FreeRTOS_QueuesのSTM32CubeMXファイルTasks and Queues

2つのタスク:MessageQueuePro(Qプロデューサ:送信タスク)とMessageQueueCon(Qコンシューマ:受信タスク)と、1つのQ:osQueue(深さ1:ワード)を、CubeMXで自動生成するパラメタが設定済みです。関連投稿:NXP版FreeRTOSのQueueデータ送受信と同じです。

全て黒文字パラメタですので、変更も可能ですが、このままソースコードを自動生成(Alt+K)してください。

CMSIS-RTOS APIからFreeRTOS API変換(wrapper)

CMSIS-RTOS APIからFreeRTOS API変換
CMSIS-RTOS APIからFreeRTOS API変換

main.cのL125に、osQueueを生成するAPI:osMessageCreateが自動生成済みです。また、L134とL138に、MessageQueueProとMessageQueueConのタスク(Thread)を生成するAPI:osThreadCreateも自動生成済みなのが判ります。

ここで、API先頭にosが付くのは、CMSIS-RTOSのAPIだからです(L145のosKernelStartも同様)。詳細は、次章で説明します。

さて、L125のosMessageCreateへカーソル移動し、F3をクリックすると、cmsis-os.cのL1040へジャンプし、CMSIS-RTOS APIのosMessageCreateの中身が見えます。その中身が、L1055のxQueueCreateで、これはFreeRTOSのAPIです。

つまり、CubeMXが自動生成したのは、CMSIS-RTOS APIですが、その実体は、FreeRTOS APIであることが判ります。
この例のように、CubeMXが生成したCMSIS-RTOS APIは、cmsis_os.cで全てFreeRTOS APIへ変換されます。

CMSIS-RTOS

CMSIS-RTOSは、Cortex-Mコア開発元ARM社が定めたRTOS APIの規格です。
※CMSIS:Cortex Microcontroller Software Interface Standard

Cortex-Mコアには、FreeRTOS/Azure RTOS/mbed OSなど様々なRTOSが使えます。下層のRTOSが変わるとAPIも変わりますが、そのAPIを変換し、上層アプリケーションへ共通なRTOS APIを提供する、これにより、

  1. RTOSが異なっても、同じ開発アプリケーションが使えること
  2. Cortex-Mコアが異なっても、開発アプリケーション移植を容易にすること

これらがCMSIS-RTOSの目的です。

これをラップ(wrap=…を包む)と呼ぶことがあります。ラップ関数(wrapper)とは、下層API差を隠蔽し、上層アプリケーションへ同一APIを提供する関数のことです。STM32RTOS開発でのCubeMXの役目の1つは、使用するRTOSに応じたwrapperを提供することです。

現在、STM32RTOS開発のCubeMXがラップしているのは、FreeRTOSだけです。今後、FreeRTOSがAzure RTOSなどへ変わっても、開発アプリケーションをそのまま活用するために、今の時点からCMSIS-RTOS APIを使っている訳です。

Cortex-M0/M0+/M3/M4/M7コア向けの共通RTOS APIがCMSIS V1、Cortex-A5/A7/A9と全Cortex-Mコア向けの共通RTOS APIがCMSIS V2です。STM32RTOS開発では、CMSIS V1を用います。

CMSIS-RTOS とFreeRTOSのAPI

UM1722にCMSIS-RTOS APIとFreeRTOS APIの一覧が示されています。抜粋したのが下表です。

FreeRTOSとCMSIS-RTOSのAPI
FreeRTOSとCMSIS-RTOSのAPI

接頭語にx/vなどが付くのがFreeRTOS API、osが付くのがCMSIS-RTOS APIです。

CubeMXが生成するコードは、常にCMSIS-RTOS APIですが、実体はFreeRTOS APIです。FreeRTOSが別のRTOSへ変わっても、CMSIS-RTOS APIは同じです。CMSIS-RTOS APIとFreeRTOS APIのwrapper分のオーバーヘッドは生じますが、下層RTOSに依存しない点は、先進的で優れています。

なおUM1722 Rev3には、単にAPI列記とwrapper、RTOSサンプルプロジェクトの簡単な説明が記載されているだけです。

まとめ

STM32MCUでRTOS開発を行う時の3注意点(前編:STM32CubeMX、HAL)に続き、本稿後編で3つ目のCMSIS-RTOSを示しました。

STM32RTOS開発のSTM32CubeMXが扱うRTOSは、現在FreeRTOSだけです。FreeRTOSが別のRTOSへ変わっても、CubeMXは、開発アプリケーション流用性を高めるためにFreeRTOS APIの代わりにRTOS共通CMSIS-RTOS APIを出力します。

CMSIS-RTOS APIには、Cortex-M0/M0+/M3/M4/M7コア間で開発アプリケーション移植性が高いCMSIS V1を使います。

CMSIS-RTOS API変換オーバーヘッドがありますが、流用性、移植性に優れたRTOSアプリケーション開発ができる点は、優れています。

あとがき

残念ながらCMSIS-RTOS情報は、シェア1位AWSのFreeRTOSに比べ少なく、この少ない情報を使ってSTM32RTOS開発を行うのは、大変です。
※2位がAzureのAzure RTOS、3位がGCP(Google Cloud Platform)のmbed OS。関連投稿はコチラ

例えば、最初の図:CubeMXのTasks and QueuesのGUI設定パラメタが多いにもかかわらず、UM1722サンプルプロジェクト説明が少ない点などです。

RTOSは、複数タスク(CMSIS-RTOSではThread)間の優先順位差とRTOS自身の動作により、開発タスク処理状態が変わります。ベアメタル視点に加え、RTOS視点でのタスク開発と経験が求められます。QueueなどRTOS単独手段理解が目的のサンプルプロジェクトだけでは、RTOS開発経験は積めません。

弊社はこれらの対策として、効率的なRTOS基礎固め、STM32RTOSアプリケーションのプロトタイプ開発早期着手を目的としたSTM版RTOSアプリケーションテンプレート(仮名)を検討中です。その構想は、固まり次第、別稿にて示す予定です。

なお、NXP版FreeRTOSアプリケーションテンプレートは、コチラで販売中です。

Windows 11ショックとTPM

所有3PCのWindows11要件チェック結果
所有3PCのWindows11要件チェック結果

今秋リリース予定のSun Valleyは、新OSのWindows 11でした。TPM 2.0が障壁になり、所有3PCのうち2PC(Note/Backup)はWindows 10からWindows 11へ無償アップグレードができません。アップグレード要件に変更が無ければ、MainのみWindows 11になり、残りはWindows 10のまま・・・、Windows 11ショックです。

このWindows 11ショック原因のTPM、現状の対処法などをまとめます。

TPM (Trusted Platform Module)

TPMは、MicrosoftがWindows 11(以下Win 11)要件にした専用ハードウェアで、PCを起動するBIOS/UEFIのデバイスです。セキュリティキー、暗号鍵や機密性の高いユーザーデータの保護・保管機能を持ち、最新版Version 2が必要です。

このTPM機能を既に持っているPCでも、Win 10では未使用が多かったのが判っています。弊社Main PCもそうで、設定を変更し最初の図のようにWin11対応チェック結果が全てOKになりました。

テレワークでPC需要が高いこの時期に、敢えてTPMをWin 11アップグレード要件にしたMicrosoftの狙いが、もしも新しいPCへの買換え需要喚起だとしたら、残り2PCは、WindowsからLinux MintへのOS乗換も対処法に入れます。

※2021年7月8日、Linux Mint 20.2 MATEがリリースされました。サポート期間は2025年までです。

弊社テレワーク利用中のMCU開発アプリケーションは、マルチプラットフォーム対応なのでOS乗換に問題はありません。

MCUのTPM相当機能

MCUにも暗号鍵などを保管するTPM相当の外付けチップがあります。例えば、関連投稿のNXP)EdgeLock SE050、Maxim)DS28E38などです。これらは、MCU外付けのセキュリティ強化ハードウェアです。

また、これら外付けハードウェアを使わずに、セキュリティ強化内蔵Flashへ機密情報を保存するCortex-M33コアMCUなどもあります。

これらMCUへTPM相当の機密情報保持機能を実装すると、開発工数が増えることが判っています。

Win 11要件のTPMは、IoT MCUがMicrosoft Azure接続時、上記どちらかの機密情報保持機能を持たないMCUは、例え接続中であっても、将来のセキュリティ脅威を理由に接続拒否することに近いと思います。

MCU開発者は、新たな開発案件が増えて喜びそうですが、Azure利用中の顧客は、納得するでしょうか? Azure以外のAWSやGoogleクラウドへの移行にならないでしょうか?

関連投稿:多様化MCU RTOS対策

一方、スマホなどモバイルデバイスのTPM相当:機密情報保持機能も知りたいと思います。今後調査予定です。

TPM効果

  • なぜBIOS/UEFIのTPMハードウェアなのか、OSソフトウェアで代替しない(できない)理由は何か?
  • TPM情報は、PCのバックアップアプリでバックアップ/リカバリできるか?
  • BIOS/UEFI更新時、TPM情報は保持されるのか?
  • TPM不具合発生時、Win 11は起動しないのか?
  • PC廃棄時のTPM情報の完全削除とその確認方法は?
  • TPM搭載Win 11 PCと、非搭載Win 10 PCのサイバー攻撃防衛差は、どの程度か?

など、TPM採用の明確な理由とその効果を示した情報は、今のところ見当たりません。Win 10でTPMをデフォルト未使用としたのも、なんらかの理由や副作用があったからだと思います。

定性的には、セキュリティ対策が重要であることは解ります。しかし、定量的な比較や副作用も知りたいです。

具体的に、TPM無し(未使用)BIOS/UEFI のWin 10 PCと、TPM有効化Win 11 PCで比較し、攻撃防御差が大きいなら費用対効果によりWin 11対応の新PC購入もありえます。

もちろんPCハードウェアも経年劣化します。しかし、パーツ単体交換が容易なのもWin PCのMacやスマホに無い特徴です。最初の図のようにWin 10で快適に動作するハードウェアが、BIOS/UEFI TPMだけでNGになるのは、「足切り」に近いと感じます。

Win 10と同様、Win 11でもユーザ責任でTPM未使用オプションが設定できれば済む話です。Win 11プレビュー版は、TPM無しでも動作します。このオプション相当は既に存在します。

TPM効果、その具体的・数値的な攻撃防御差評価は、必要でしょう。

Windows 11とWindows 10の運用対処法

現在判っているWin 11とWin 10の主な運用面差が下表です。

Windows 11 Windows 10
OSコア 新OS(Cobalt) 旧OS
大型更新 年1回 年2回
サポート期間 大型更新後2年 大型更新後1.5年
サポート終了2025年10月

Win 11の下図のような新GUIに対して、使いなれたWin 10やWin 7に近いGUIへ戻す無償ツールが既にあります。筆者もOSの見た目の新しさは不要です。現行Win 10でさえ、上記ツールを使って効率的なGUIに変えて運用中です。

Windows11の新GUI
Windows11の新GUI

当然ながら新しいOSコア(Cobalt)ですので、旧OS比、見た目以外の性能も改善されるでしょう。

しかし、Win 10の旧OSコアがトラブルなく安定するまで数年を要したことや大型更新回数が年1回に減ったことも考慮すると、最低でもWin 11新OSコア(Cobalt)安定に1年はかかると思います。

従って、次回Win 11大型更新の1年後まで、アップグレードを待つのは、安全策として良さそうです。

Windows 10サポート延長

Win 10のサポート終了は、2025年10月14日となっています。しかし、良い意味で撤回し、「Win 7のようにサポート終了が延長」される可能性は高いと筆者は思います。

その理由は、Win 10 Version 21H1が、20H1からの3世代、2年に渡る同じOSコアの小規模更新をした結果、更新トラブルが減り安定度が増したこと、Win 11へ更新できない多くのWin PCの「最後の受け皿OS」となること、などです。

サポート終了のWin 7、2023年1月10日にサポート終了予定のWin 8.1のPCは、足切りTPMのためWin 11へのアップグレードが不可能です。Win 7/8.1世代のPCは全てWin 10になり、アップグレードしないWin 10を含めて2025年10月までこれらPC群は稼働できます。

4年半後、2025年10月予定のこれらPC群へのWin 10サポート終了は、多くのユーザ反感を買うと同時に、セキュリティ更新無しで稼働するPCを多数生みます。

何らかの方法でWin 10へTPM相当機能を実装するか、または、セキュリティサポートを延長することは、これまで足切りアップグレードを避けることでシェアを伸ばしてきたMicrosoftの宿命だと思います。

まとめ

2025年10月14日のWindows 10サポート終了までは、Windows 11 TPM要件のため、所有3PCをWin11とWin10の2種運用とするか、それとも3PCともWin10運用とするか、今秋のWindows 11リリース後のトラブル状況や、前章までに示した対処法で決める予定です。

ポイントの1つは、TPM未使用のWin 10 PCとTPMを使うWin 11 PCのサイバー攻撃防御差、その費用対効果です。
※ネットカフェのWin PC移行状況でこの評価結果が判ると思います。

ただMCUテンプレートを新たに開発する立場からは、最新PC環境、つまりWin 11で新開発テンプレートの動作確認は必須です。2 OS運用は余分に手間が掛かりますが、Win11とWin10の併用にならざるを得ない、というのがWindows 11ショックの根源です😣。

なおMicrosoftは、Win 11要件の見直しも行っているようです。TPM相当手段や未使用オプションなどに期待しています。また、7月14日発表のWindows 365 Cloud PCも、料金次第ですが気になる存在です。

* * *

速報:Microsoftは、7月15日(米国現地時間)、Windows 11とは別に、次期Windows 10バージョン 21H2 、サポート期間1.5年の提供を発表しました。また、5年サポート期間の Windows 10バージョンLTSC(Long-Term Servicing Channel)も提供するようです。今秋、提供開始予定です。

半導体・デジタル産業とホノルル便パイロット

経産省が2021年6月4日に発表した「半導体・デジタル産業戦略」について、専門家の評価は悲観的です。

我々IoT MCU開発者は、ホノルル便パイロットを見習い、対応策を持つべきだと思います。

経産省半導体・デジタル戦略の評価

今こそ日本の大手電機各社は半導体技術の重要性に気付くべき、EE Times Japan、2021年6月15日

日本の半導体戦略は“絵に描いた餅”、TechFactory、2021年6月16日

日本の半導体ブームは“偽物”、再生には学校教育の改革が必要だ、EE Times Japan、2021年6月22日

専門家が日本政府や経産省の方針を批判するのは、コロナ対策と同様、当然です。また下記、英)Financial Times評価を紹介した記事からも、専門家評価と同様、概ね懐疑的であることが判ります。

半導体製造業の日本の取組みに対する海外メディア評価、Gigazine、2021年7月6日

この戦略結果として生じる半導体・デジタル産業の市場変化の影響を直接受けるのは、我々IoT MCU開発者です。しかも、結果がでるまでの時間は、ますます短くなっています。この分野が、自動車や次世代通信などを含む「全ての産業の要」だからです。

経産省戦略資料は、コチラからダウンロードできます。概要・概略だけでも相当な量があり、対象がMCU技術者ならまだしも、マネジメントや一般技術者が、本当に要点を把握できるか、筆者でも疑問に感じます。

ホノルル便緊急事態対策

かつて護送船団方式ともいわれた日本産業の舵取りは、成功もありますが失敗も多いです。同調圧力に弱い日本人には、この方式が向いていたのかもしれません。

問題は、舵取りの結果生じる市場変化に、どう対応するかです。

対応策ヒントの1つになるのが下記記事です。

太平洋の真ん中でエンジン停止したらどうなるか、東洋経済、2021年6月27日

パイロットは、太平洋上での緊急事態対応のため、60分毎に東京/ミッドウェー/ホノルルの天候情報を集め、燃料残量や対地速度などの機体状況を確認し、180分以内に着陸できる空港を検討するのです。しかも、この緊急事態は、パイロットが入社し定年退職するまでに一度も経験することの無い0.024%の発生確率でもです。

ホノルル便パイロットの緊急事態対応(出展:記事)
ホノルル便パイロットの緊急事態対応(出展:記事)

この東京~ホノルル便エンジン停止などの緊急事態発生確率に比べると、半導体・デジタル産業の国による舵取り失敗確率は、高いと思います。

我々MCU開発者も、ホノルル便パイロット並みとはいかなくても、せめて開発が一段落付く毎に、最新IoT MCU状況を確認し対応を検討することは重要です。一段落が付いた時は、開発に使ったMCUの利点欠点を把握直後なので、他MCUとの比較も精度良くできるからです。

この検討結果をどのように反映するかは、開発者次第です。

お勧めは、もしもの時の「第2候補IoT MCU案:Plan Bを、開発者個人で持つこと」です。Plan Bは、たとえ同じARM Cortex-Mコア利用であっても、ベンダ毎に手間やAPIが異なるIoT MCU開発に、心理的余裕を与えます。Non ARMコア利用ならなおさらです。

個人でなら、同調圧力に関係なく、自分の開発経験や勘を使ってPlan Bを検討できます。

まとめ

2021年6月経産省が発表した半導体・デジタル産業戦略の専門家評価は、悲観的です。国の舵取りが失敗した例は、過去の電機や半導体企業の衰退が物語っています。巨額投資と市場シェアの両方が必要な半導体・デジタル分野は、既に弱体化した国内企業の巻返しにも期待はできません。

舵取り失敗確率は、現役ホノルル便パイロットが、太平洋上で緊急事態に出会う確率よりも高いでしょう。

最先端デバイスを利用するIoT MCU開発者の対応策の1つは、開発が一段落付く毎に、最新半導体・デジタル市場を確認し、もしもの時の第2 IoT MCU利用案:Plan Bを開発者個人で持つことです。

個人で安価にPlan Bを持つため、評価ボード動作確認済み各種マイコンテンプレートはお役に立てると思います。関連投稿:半導体不足とMCU開発案に、Plan B構成案もあります。

STM32RTOS開発3注意点(前編)

STマイクロエレクトロニクス)STM32MCUを使ってRTOS開発時のSTM32CubeMX、HAL、CMSIS RTOSの3注意点について示します。前編が、STM32CubeMXとHALについてです。CMSIS RTOSは、別途後編で示します。

STM32CubeMXとHAL の注意点を解説した後、サンプルプロジェクトで実例を示すという順番で説明します。

ソースコード生成ツール:STM32CubeMX

STマイクロのソースコード生成ツール:STM32CubeMX(以下CubeMX)は、MCU内蔵周辺回路の初期設定やAPIを、GUIベースで自動生成する非常に便利なツールです。

※MCUベンダのAPI生成ツールを比較した関連投稿は、コチラをご覧ください。

CubeMX生成APIは、ハードウェアを抽象化し、STM32MCU間で最大限の高いソフトウェア移植性を狙ったHAL (Hardware Abstraction Layer)と、よりハードウェアに近くHALよりも高速・軽量なエキスパート向けLL(Low-layer)の2種類から選択可能です。

HALとLL比較(出典:STM32 Embedded Software Overvire)
HALとLL比較(※説明のため着色しています。出典:STM32 Embedded Software Overvire)

一般的に、HAL APIが好まれます。というのは、このLL APIを利用し開発した2019年6月発売のSTM32G0xテンプレートV1の売上げはゼロでした。対策に、LL APIからHAL APIに変更し再開発した2020年6月発売のSTM32G0xテンプレートV2は、人気があるからです。

これらCubeMXの各種GUI設定や選択APIは、CubeMXファイル(.ico)に構成ファイルとして纏められます。

STM32MCU新規プロジェクト開発時に、この既成CubeMXファイル(.ico)を利用すると、ゼロから着手するのに比べ、効率的かつ間違いなく周辺回路や初期設定ができるため、利用価値の高いファイルです。

特に、ベアメタル比、さらに多くのCubeMX設定が必要となるRTOS開発では、既成CubeMXファイルを再利用するメリットがより高まります。同時に、生成コードの意味も理解しておく必要があります。

HALタイムベース

HALには、他ベンダにない便利なAPI:HAL_Delayがあります。

例えば、10msの待ち処理を行う場合、他ベンダなら、MCUコア速度に応じて適当にループ回数を調整したループ処理で10ms相当の遅延を自作します。しかし、HAL APIならば、HAL_Delay(10)の記述だけで、MCUコア速度に依存しない正確な10ms遅延が実現できます。

これは、HAL自身が、MCU内蔵タイマ:SysTickの利用を前提に設計されているからです。遅延処理を例に説明しましたが、STM32のHAL APIsは、SysTickと強く結びついています。

もちろん、HAL APIをベアメタル開発で利用する場合は、この結びつきに何ら問題はありません。

RTOSタイムベース

FreeRTOSも、タスク(スレッド)状態遷移タイムベースに、SysTickを使います。

これは、FreeRTOSだけでなく他のRTOSでも同じです。SysTickは、その名称が示すようにMCUシステムレベルのタイムベース専用タイマです。

従って、STM32MCUでRTOS開発を行い、かつHAL APIを利用する場合には、RTOS側でSysTickを使うのが、名称に基づいた本来の使い方です。

HALタイムベース変更

そこで、STM32RTOS開発でHAL利用の場合は、HALのタイムベースを、デフォルト使用のSysTickから別のタイマへ変更する必要が生じます。この変更に伴う手動設定も当然必要となります。

*  *  *

ここまでが、STM32RTOS開発におけるSTM32CubeMXとHALに関する注意点です。
これらの注意点が解っていると、次章で示すRTOSサンプルプロジェクトのCubeMXファイルの意味と生成コードが理解できます。

STM32RTOS開発実例

STM32RTOS開発実例に、評価ボード:NUCLEO-G474RE(Cortex-M4/170MHz、Flash/512KB、RAM/96KB)でRTOS開発する場合を示します。

NUCLEO-G071RB(Cortex-M0+/64MHz、Flash/128KB、RAM/32KB)でRTOS開発する時でも同様です。しかも、RTOSサンプルプロジェクトは、STM32G071RBの方が(発売が古いためか?)多いので、NUCLEO-G071RBをお持ちの方は、是非ご自身で試してみてください。

FreeRTOS Example Selector

STM32CubeIDEのFile>STM32 Projectで、新規プロジェクト作成パネルを表示します(最新情報更新のため、表示に少し時間がかかる場合があります)。Example Selectorタブを選択、Middleware>FreeRTOSにチェックを入れ、NUCLEO-G474REのFreeRTOS_Queuesを選択したのが下図です。

NUCLEO-G474REのFreeRTOS_Queues
NUCLEO-G474REのFreeRTOS_Queues

右上欄、Noteの内容が、前半までに示した注意点のことです。参照先UM1722 Rev3は、CMSIS RTOSとFreeRTOSの関係があるのみです。このCMSIS RTOSについては、別途後編で説明します。

Nextをクリックし、FreeRTOS_Queuesサンプルプロジェクトを新規作成します。

さて、FreeRTOS Examples Listが318アイテム(STM32CubeIDE v1.6.1時)もあるので、Exportをクリックし、出力されたExcelファイルをBoardでフィルタリング、NUCLEO-G071RBとNUCLEO-G474REを抽出したのが下図です。

FreeRTOS Example List
FreeRTOS Example List

緑に色付けしたNUCLEO-G071RBの方が、FreeRTOSサンプルプロジェクト数が多いことが判ります。開発予定のSTM版FreeRTOSアプリケーションテンプレートは、Cortex-M4コアが対象ですので、本稿ではNUCLEO-G474REのFreeRTOS_Queuesを実例として使いました。

FreeRTOS_QueuesのSTM32CubeMXファイル

FreeRTOS_QueuesサンプルプロジェクトのCubeMX構成ファイル:FreeRTOS_Queues.icoが下図です。グレー文字は変更不可、黒文字は変更可能を示します。

FreeRTOS_Queues.ico
FreeRTOS_Queues.ico

TIM6がグレーなのは、HALタイムベース変更先がTIM6だからです。Kernel settings CPU CLOCK HZのSystemCoreClockがグレーなのは、RTOSタイムベースがSysTickだからです。つまり、本来の名称に基づいたSysTickがRTOS側で使われ、HALの新タイムベースにTIM6が割当済みであることが解ります。

FreeRTOS APIは、変更不可のグレーCMSIS V1です。ここは、後編で説明します。

デフォルトDisabledのUSE IDEL HOOKを、Enabledに変更し、ソースコード自動生成のGenerate Code(Alt+K)を実行してください。

HALタイムベースTIM6変更結果

FreeRTOS_QueseのTIM6とHook関数
FreeRTOS_QueseのTIM6とHook関数

app_freertos.cのL62に、Hook関数:vApplicationIdleHoolのひな型が自動生成済みです。ここへWFIを追記すれば、FreeRTOSアイドル時に低電力動作ができます。コチラのNXP版関連投稿Step5: FreeRTOS低電力動作追記と同じです。

main.cのL289は、TIM6満了時動作です。HAL_IncTick()が自動生成済みです。ベアメタル開発のSysTickからTIM6へHALタイムベースが変更されたことが解ります。

そのTIM6は、stm32g4xx_hal_timebase_tim.cで、1MHz=1ms満了に初期設定済みです。

つまり、STM32RTOS開発でHAL利用時に必要となる変更が、「全てCubeMXで自動生成済み」なのが解ります。

※上図は、USE_TICK_HOOKもEnabledへ変更した例です。Disabledへ戻すなどして、CubeMX自動生成ファイルが変化することを確かめてください。

この実例のように、CubeMX付属RTOSサンプルプロジェクトのCubeMXファイル(*.ico)を再利用すれば、周辺回路や初期設定ミスを防ぎ、RTOS新規アプリケーション開発が容易になることが解ります。

まとめ

STM32MCUでRTOS開発を行う時の3注意点、STM32CubeMX、HAL、CMSIS RTOSのうち、前編としてSTM32CubeMX、HALの2注意点とサンプルプロジェクトを使ってその実例を示しました。

RTOS開発では、既成STM32CubeMXファイル再利用価値が高まること、HALタイムベース変更の必要性がご理解頂けたと思います。3つ目のCMSIS RTOS関連は後編で示します。

あとがき

ベアメタル開発経験者であっても、STM32RTOS開発時、CubeMXのNoteを読むだけで、ベアメタル開発では何の問題も無かったHAL タイムベース変更理由が解り、その結果生じるCubeMXファイルや自動生成ソースコードの中身が理解できる方は、少ないと思います。本稿は、この変更理由と生成コードに説明を加えました。

STM32CubeMXは、STM32MCU開発に必須で強力なAPI生成ツールです。が、時々、説明不足を感じます。問題は、どのレベル読者を相手にするかです。エキスパートなら説明不要ですが、初心者ならゼロから説明しても解らないかもしれません。文章による組込み技術説明が、難しいのが根本原因でしょう😂。

そんな組込み開発ですが、文章だけでなく、「実際に評価ボードと手足を使って慣れてくると、案外すんなり簡単に理解、習得できる方が多いのも組込み開発」です。

販売中のNXP版FreeRTOSアプリケーションテンプレートにも、本稿同様、詳しいFreeRTOS解説を付けています(一部ダウンロード可能)。FreeRTOS開発を手軽に試せ、習得を支援するツールです。

FreeRTOSアプリケーションテンプレート発売

FreeRTOSアプリケーションテンプレート動作中
FreeRTOSアプリケーションテンプレート動作中

ARM Cortex-M4コア動作のFreeRTOSアプリケーションテンプレート第一弾、NXP)LPCXpresso54114対応版(税込2000円)を本日より発売します。概要、要点、FreeRTOSアプリケーションテンプレートとは、に関する説明資料は、コチラから無料ダウンロードできますのでご覧ください。

開発背景

IoT MCUのクラウド接続には、AWSならAmazon FreeRTOS、Microsoft AzureならAzure RTOSなどのRTOSが必要です。クラウド側からは、1つのRTOSライブラリを使って様々なMCUハードウェアを接続するための手段、これがRTOSです。

一方、IoT MCU側からは、接続先サービスに応じたRTOSライブラリ利用に加え、従来のベアメタル開発からRTOS上でのアプリケーション開発へ発展する必要もあります。IoT化に伴うこのような変化に対し、開発者個人が手間なく対応するためのツール、これが弊社FreeRTOSアプリケーションテンプレートです。

MCU RTOS多様化対策のFreeRTOSアプリケーションテンプレート
MCU RTOS多様化対策のFreeRTOSアプリケーションテンプレート

目的

FreeRTOSアプリケーションテンプレートの目的は、「RTOS基礎固め」と「FreeRTOSプロトタイプ開発のスタートプロジェクトとなること」の2点です。

RTOS開発は、ベアメタル開発とは異なります。

RTOS Kernelが、開発した処理(タスクやThread)と他タスクの優先順位により、処理実行/待機を決めます。開発タスク単体の流用性は高まりますが、タスク間同期や通信に、セマフォやQueueなどのRTOS独特の手段が必要です。

IoTにより全てのモノ(MCU)がクラウドへ接続する時代の基盤は、RTOSです。

ベアメタル開発経験者が、このRTOSの早期基礎固め、Kernelと自身で開発したタスクの並列処理を理解するには、個々にRTOS手段を説明するサンプルソフトよりも、具体的なRTOSアプリケーションの方が実践的で役立ちます。

RTOSアプリケーションがあれば、優先順位を変えた時のタスク動作変化や、その他経験に基づいたRTOS実務開発で知りたい事柄を手間なく試し、新たな知見・見識を得られるからです。これらは、サンプルソフトや、説明文から得ることは困難で、実際のRTOSアプリケーションで開発者自身が試行するのがベストです。

そこで、各FreeRTOS手段を説明した弊社MCU RTOS習得ページを理解した次の段階として、最初の図に示したプロトタイプ開発着手に必須となるADC/LCD/SW/LED/VCOM処理を、NXP)LPCXpresso54114(Cortex-M4/150MHz、Flash/256KB、RAM/192KB)とBaseboard、Arduinoプロトタイプシールドに実装し、動作確認済みRTOSプロジェクトが、FreeRTOSアプリケーションテンプレートです。

FreeRTOS Application Template (NXP Version)
FreeRTOS Application Template (NXP Version)

※上記プロジェクトは、クラウド接続は行っておりません。RTOS基礎固めとFreeRTOSプロトタイプ開発に適すことが目的ですので、クラウド接続RTOSライブラリは未実装です。

FreeRTOSを選んだのは、現在MCU RTOSシェア1位だからです(関連投稿はコチラ)。RTOS手段は、各RTOS共通技術であるSemaphoreとQueueの2つを用いております。LPCXpresso54114のFlashやRAM使用量にはまだ十分余裕がありますので、より高度なミューテックスやイベントグループなどの手段を適用するのも容易です。

特徴

本テンプレートには、上記FreeRTOSプロジェクトと同じ動作確認済みのベアメタル開発プロジェクトも添付しております。これは、ベアメタル開発に慣れた方が、FreeRTOSとベアメタルの差分をより明確に理解し、比較や評価をするためです(比較・評価は、ご購入者ご自身で行って頂きます)。

本テンプレート付属説明資料は、主にベアメタル開発者視点から見たFreeRTOSプロジェクトを解説しており、ベアメタルプロジェクトに関する説明は、ソースコードを読めばご理解頂けるとして省略しております。

従って、FreeRTOSアプリケーションテンプレートは、ベアメタル開発経験者を対象といたします。ベアメタル初心者の方は、先ずは各MCUベンダCortex-M0+/M3コア対応の従来マイコンテンプレートをご購入ください。従来テンプレート付属説明資料には、ベアメタル動作の詳しい説明が付いています。

※本テンプレートのベアメタルプロジェクトは、従来テンプレートCortex-M0+/M3コアをCortex-M4コア対応へ発展させたものです。ベアメタルプロトタイプ開発着手時に適すプロジェクトです。

FreeRTOSアプリケーションテンプレートは、ベアメタル開発経験者が、手間なく直にRTOSとベアメタルの差を理解・実感し、かつ、IoT基盤RTOSの効率的な基礎固めができるツールです。

なお、既に従来マイコンテンプレートご購入者様は、50%OFF特典があり、税込1000円にて本FreeRTOSアプリケーションテンプレートをご購入頂けます。弊社での確認ミスを防ぐため、ご購入時に従来テンプレート購入者様である旨、お知らせください。

勿論、従来テンプレートとFreeRTOSアプリケーションテンプレートの同時購入でも、この特典は適用されます。

まとめと今後

ベアメタル開発経験者が、IoT MCUクラウド接続に必要となるRTOSの効率的な基礎固め、FreeRTOSプロトタイプ開発着手プロジェクトとして使えることを目的に、NXP)LPCXpresso54114、Baseboard、Arduinoプロトタイプシールドを使ったFreeRTOSアプリケーションテンプレートを発売しました。

本テンプレートは、Amazon FreeRTOSのHardware Independent FreeRTOS Exampleを原本としています。第1弾はNXP)LPCXpresso54114へ適用しましたが、今後、STマイクロエレクトロニクス)STM32G4やCypress)PSoC 6など他社Cortex-M4コアの対応版も開発予定です。

WebシミュレータのRL78/G23開発

今年4月に発表されたばかりのルネサスIoT向き新汎用RL78/G23が、RL78 Webシミュレータを使うと手間暇かけずに開発できます。このWebシミュレータの使い方と、RL78/G23シミュレーション結果を示します。

IoT新汎用RL78/G23特徴は、コチラの関連投稿を参照してください。

RL78 Webシミュレータとは?

評価ボードやIDE無しに、Webブラウザだけで対象MCUのアプリケーションを開発でき、その消費電流が判ります。バッテリー寿命予測などに好都合です。

対象MCUは、RL78/G1xシリーズでしたが、早くもG1x後継MCUのIoT向き新汎用RL78/G23が追加されました。ログイン必須ですが、無料で利用できます。

また、Webシミュレータ上で開発したソフトウェアは、CS+やe2 studioとも互換性があるので、そのまま実際のIDE/評価ボードへエクスポートして使うこともできます。

つまり、初期費用ゼロでRL78/G23が開発でき、その開発資産も活かせます。コロナ過の今こそ役立つツールと言えます。

競合他社32ビットCortex-M0+クラスのeclipseベースIDEにも、消費電流シミュレータが付属しています。RL78/G13比、30%低消費電力化したRL78/G23の低い消費電流と比較可能です。

RL78/G23 Webシミュレーション結果

RL78/G23の評価ボード:Fast Prototyping Boardを使って、基本的なA/D変換アプリケーションをシミュレーションする例で、Webシミュレータの使い方を示します。

MCU Simulator Online (Web IDE)

Webシミュレータ初期画面のアプリケーションから選択メニューのA/D変換機能をクリックし、対象デバイスRL78/G23のMCU Simulator Online起動をクリックします。ガイドツアー利用有無を聞いてきますが、後回しOKです。

Webシミュレータ初期画面からA/D変換機能をクリックした画面
Webシミュレータ初期画面からA/D変換機能をクリックした画面

RL78/G23 Fast Prototyping Board上で、A/D変換アプリケーション(サンプルアプリケーション)がインポートされたMCU Simulator Online画面が表示されます。

RL78/G23 A/D変換アプリケーションのMCU Simulation Online画面(Web IDE)
RL78/G23 A/D変換アプリケーションのMCU Simulation Online画面(Web IDE)

ビルド、リセットや実行などアプリケーション開発に最低限必要となるボタンが用意されたWeb IDEがMCU Simulator Onlineです。

ビルドをクリックするとConsole窓にビルド結果が表示されます。オリジナルサンプルアプリケーションのまま無変更なので、ビルドは成功します。

RL78/G23 Fast Prototyping Board

左端Boardクリックで、RL78/G23 Fast Prototyping Boardが表示されます。アプリケーション動作確認に必要な外部部品:ポテンショメータは、P22/ANI2に接続済みです。

RL78/G23 A/D変換アプリケーションのFasr Prototyping Board画面
RL78/G23 A/D変換アプリケーションのFasr Prototyping Board画面

実行をクリックすると、ポテンショメータのスライドバーに連動して、赤7セグ表示(変数値表示パネル)が変わります。これが、アプリケーション実行時のFast Prototyping Board動作状態です。

RL78/G23 A/D変換アプリケーション消費電流

左端Reportクリックで、アプリケーション動作時の消費電流シミュレーション波形と平均値が表示されます。ピーク時3mA、平均600μA程度でA/D変換を実行することが判ります。

RL78/G23 A/D変換アプリケーションの消費電流画面
RL78/G23 A/D変換アプリケーションの消費電流画面

Webシミュレータ終了

Webシミュレータで、RL78/G23とA/D変換アプリケーションを選んでビルド、評価ボードで動作確認、消費電流シミュレーション波形とその平均値を得るまで、わずか2~3分です(ガイドツアーは除く)。

実機で同じことを行えば、半日~1日は掛かります。しかも、実際のIDE設定や評価ボードとの接続、測定装置準備など全てが上手く出来た上での話です。実機ではこの段階で、つまずきを経験した方も多いでしょう。

手間暇かけずにWebシミュレータ上でRL78/G23開発を試すことができることがお解り頂けたと思います。

また、Web IDEでサンプルアプリケーションに変更を加えステップ実行、SWやLEDなどの外部部品をBoardへ追加することもできます。詳しくは、左下Info.クリックで表示されるガイドツアー、オリジナルプロジェクト作成を試すクリックで判ります。

ガイドツアー開始画面
ガイドツアー開始画面

Webシミュレータ終了は、MCU Simulator Online右上ハンバーガーメニューのサインアウトクリックです。プロジェクトは、90日間自動保存されますので、途中から開発継続することも容易です。

Web Simulator Online終了ダイアログ
Web Simulator Online終了ダイアログ

まとめ

RL78 Webシミュレータは、ブラウザだけを使って、誰でも簡単に初期費用ゼロでRL78/G1x/G2x開発が試せます。予め多くのサンプルアプリケーションがWeb IDEに用意済みで、仮想評価ボード上でアプリケーション動作確認、消費電流波形、平均消費電流計算が、僅か数分でシミュレーションできます。

Webシミュレータで開発したソフトウェアは、CS+やe2 studioへエクスポートできます。実機開発前、または、開発中であっても並行利用によりRL78/G1x/G2x開発に役立つツールです。

汎用RL78/G1x後継となったIoT向き新汎用RL78/G23のFast Prototyping Board上で、A/D変換アプリケーションシミュレーション例を示し、Webシミュレータ使用法、平均600μA低消費電流計算結果を得ました。

多様化MCU RTOS対策

IoT MCUクラウド市場は、AWSとMicrosoft Azureがリードしており世界収益の半分以上を占めるという記事に掲載されたのが下図です(EE Times 2021年6月7日、横軸:市場シェア、縦軸:年平均成長率)。Microsoftは徐々にAmazonに迫っており、市場シェア差は、過去1年で2ポイント縮まったそうです。

クラウトプロバイダの市場シェア(出典:記事)
クラウトプロバイダの市場シェア(出典:記事)

多様化MCU RTOS

AWSへの接続にはAmazon FreeRTOS、Microsoft AzureにはAzure RTOSを用います。IoTクラウド接続ウェビナーでは、どのMCUベンダでも先行しているAmazon FreeRTOSを使った接続例が主流です。しかし、最近は、Azure RTOS利用の接続資料やウェビナーも見られます。AWSとMicrosoft Azureの差が縮まりつつある証左でしょう。

また、第3勢力として急成長中のGoogleクラウド接続にはARM mbed OSが使われます。IoT MCUに実装するRTOSは多様化してきました。

IoT MCU RTOSとPCブラウザ

IoT MCU RTOSとPCブラウザ比較
IoT MCU RTOSとPCブラウザ比較

この状況は、PCブラウザが現状、複数共存しているのに似ています。

機能的には同じブラウザですが、表示/印刷/広告などの使い勝手が少しずつ異なるため、必要に応じて複数ブラウザを使い分ける方も多いでしょう。記憶容量の大きいPCでは、ブラウザ併用・共存も簡単です。

しかし、限られた容量しか持たないMCUの場合は、複数RTOSの中からMCU搭載RTOSは1つに絞られると思います。

例えば、AmazonやMicrosoft、Google各社の強み(販売/文書/広告)や特徴を活かし、IoT機器制御サービスやAI活用サービスなど魅力的クラウドサービスを各社各様で提供し、その価格、顧客との結びつきの強さなどがサービス選択の決め手となるでしょう。

いずれにせよ顧客が、利用するクラウドサービスを決め、その接続手段として各社RTOS接続ライブラリの使用、加えてRTOS環境での上層MCUソフトウェア開発を行うことになります。

問題は、RTOS環境のMCUソフトウェア開発手法がベアメタルと異なること、各社RTOS仕様が少しずつ異なることです。

多様化RTOS対策

仮に、Cortex-M4/M0+ディアルコアMCUで、クラウド通信処理全てを、Cortex-M0+コア側のRTOSライブラリで行い、通信とアプリケーションが完全分離された構成であれば、問題は解決します。接続サービス毎にRTOS通信ライブラリを変えさえすれば、対応できるからです。

BluetoothやThreadなど複数無線通信規格から1つを選んで処理するなど、この構成に近いベアメタルソフトウェア対応のMCUが既にあります。

しかし、主流ウェビナーで用いられる高性能Cortex-M4シングルコアを使って、クラウド通信とアプリケーションの両方を処理する場合には、接続先のクラウドに応じて「FreeRTOS/Azure RTOS/Mbed OSなど様々なRTOS環境の上層アプリケーション開発」になります。

RTOSの目的は、MCUハードウェア隠蔽と開発ソフトウェア流用性向上なのに、複数RTOS存在で開発アプリケーションが異なるとは、皮肉な結果です。

最初の図は、IoT MCU開発者が、今後急増するクラウド接続IoT MCU開発に、これら複数RTOSを効率的に習得し、かつ、顧客が選ぶ1個のRTOSアプリケーションを早期に開発できるスキルを獲得しなければならない現状や将来を示しているとも言えます。

こういう状況での常套手段は、共通部分と個別部分の分離、共通部分からの段階的習得です。

どのRTOSでもSemaphoreやQueueは、ほぼ共通の基本機能です。先ずは、この2機能をしっかり把握し、より高度なミューテックスやイベントグループなどRTOS毎に特徴があり機能も異なる対象へ発展するのが効率的でしょう。

※RTOSは、複数タスク(AzureはThread)を、優先順位に応じてリアルタイムに実行/待機/状態保存復帰の切替えを行います。タスク間同期手段がSemaphore、データ送受手段がQueueで、この2つはどのRTOSでも共通の基本機能です。

まとめ

IoT MCUクラウド市場シェアから、クラウド接続IoT MCU RTOSもPCブラウザ同様、様々な仕様併存の可能性があります。

顧客が選ぶRTOSに柔軟対応し、そのRTOS上層の様々なRTOSアプリケーションを早期開発するには、先ず、各RTOS共通機能のSemaphoreとQueueを把握し、より高度でRTOS毎に異なる個別機能へ発展する習得アプローチが効率的です。

6Eリリース予定の弊社FreeRTOSアプリケーションテンプレート(税込2000円)は、主流のAmazon FreeRTOSを用い、NXP)LPCXpresso54114(Cortex-M4/150MHz、Flash/256KB、RAM/192KB)にて動作確認済みです。

添付するRTOSプロジェクトは、各RTOS共通機能SemaphoreとQueueを利用しており、上記習得アプローチを満たすツールとして、また、全ての物をつなげる主役IoT MCU RTOS基礎固めに最適です。

21H2 Sun Valleyは大規模更新

5月19日に手動更新したWindows 10 21H1は、その後も安定して動作中です。この21H1と次回大型更新で「この10年間で最も重要なWindowsアップデートの1つ」と言われるSun Valleyこと21H2 の2記事を紹介し、今秋21H2大規模更新失敗時の対処案を示します。

秋21H2は大規模更新、春21H1機能追加はわずか

今秋のWindows 10大型更新は、Microsoft CEO) Nadella氏よると「この10年で最も重要なWindowsアップデートの1つ」で、スタートメニュー、アクションセンター、ファイルエクスプローラー、タスクバーなどの見慣れたユーザインタフェース(GUI)が新しいデザインへ変更、新機能追加の可能性もあるそうです(CNET Japan、2021/06/03)。

6月24日のオンラインイベントで次世代Windowsの詳細が発表されそうです。開発コード名Sun Valleyこと次期Windows 10バージョン21H2は、大規模更新になりそうです。

一方、今春の“21H1の機能追加はわずか(日経クロステック、2021/05/31)”の記事で、Windows 10大型更新と更新規模、その更新プログラム配布方法について解り易い図が掲載されていますので、抜粋し21H2の予想を追加しました。

Windows 10バージョン 大型更新開始時期 更新規模 更新プログラム配布方法
20H1 2020年上期 大規模? 通常(一括ダウンロード)
20H2 2020年下期 小規模 有効化パッケージ
21H1(今春:現状) 2021年上期 小規模 有効化パッケージ
21H2(今秋予定) 2021年下期 大規模? 通常(一括ダウンロード予想)

更新プログラム配布方法の有効化パッケージとは、大型更新開始前に、更新内容を無効化した状態でPCへ段階的に更新プログラムをパッケージで配布しておき、大型更新時にそれらを有効化する方法です。小規模更新の場合には、更新プログラムダウンロード時間が短くなるなどのユーザメリットがあります。

大規模更新では事前配布パッケージ自体もおそらく大きくなるため、Windows7から8/8.1への更新と同様、事前配布無しに一括して更新プログラムをダウンロードする通常方法になると予想します。

OSクリーンインストール歴史

Windows 10初版リリースが2015年なので、ここ10年の範囲にはWindows 7や8/8.1なども含まれるでしょう。筆者は、Windows 7や8の時代は、新OSリリースに合わせて、または、PCの調子が悪い時は、リカバリよりもOSクリーンインストールを行っていました。

既存アプリケーションの再インストールや再設定も必要で、手間と時間がかかる作業でしたが、リカバリよりも新OSをクリーン環境で使うメリットが大きいと判断したからです。

Windows 10へアップグレート後は、クリーンインストール回数は減り、20H1以降は、全てのPCで問題なく大型更新が成功しています。クリーンインストールの手間を考慮すると、少々のトラブルは、自己修復してきたとも言えますが、それでも旧OSに比べ、安定度や安心感は高いと評価しています。

Windows 21H2大規模更新失敗対策案

今秋21H2は、操作性も含めた大規模更新で、開発中止したWindows 10X機能などを含める噂もあり、共通コアOSに比べ、更新失敗の可能性は高くなります。関連情報を収集分析しますが、所有PCは、最終的には3つの更新結果になると予想しています。

  • 21H2手動更新成功
  • 21H2手動更新失敗➡21H2クリーンインストール
  • 21H2手動更新失敗➡21H1へリカバリし継続使用

更新成功を期待しますが、失敗時は、21H2をクリーンインストールする案と、21H1へリカバリして継続使用する2案があります。

現在使用中の21H1は、20H1から続く共通コアOSのWindows 10です。21H1サポート終了の2022年12月(2022年5月という記事もあり)までは、継続使用でも安心して運用ができます。またGUIも、現状のままでも不満はありません。

最新21H2をクリーンインストールするか否かは、発表される次世代Windowsの内容次第です。

魅力的なOSであれば、手間をかけてもクリーンインストールするでしょう。次世代Windowsの内容は、本ブログでも適宜取上げていきます。

FreeRTOSユーザタスクの作り方

ベアメタルサンプルソフトを活用したFreeRTOSユーザタスクの作り方を示します。先に結論を言うと、ベアメタルサンプルソフト無限ループ内に、RTOS待ち処理を挿入するだけでFreeRTOSタスク開発ができます。

図1 ベアメタル処理とFreeRTOSタスク処理並列多重
図1 ベアメタル処理とFreeRTOSタスク処理並列多重

RTOS環境のユーザタスク開発

IoT MCUをAWSやAzureなどのクラウドへ接続する時には、FreeRTOSやAzure RTOSなどのRTOSが必須です。クラウド接続用のRTOSタスク集が入ったライブラリを利用するからです。もちろん、このライブラリ内のタスク開発は必要ありません。

問題は、このIoT MCU RTOS環境で、ユーザタスクをどのように開発するかです。

RTOSの目的は、タスク独立性とリアルタイムなタスク並列多重、MCUハードウェア隠蔽です。ベアメタル開発経験者にとっては、ソフトウェア動作環境が著しく異なることが解ります。

RTOS開発障壁を下げるアプローチ

そこで、ベアメタル開発経験者は、先ずこのRTOS環境の理解に努めます。

セマフォやミューテックス、QueueなどRTOS特有の手段を理解します。弊社も各種FreeRTOS機能を説明しましたし、ウェビナー等でも同様です。但し、このアプローチAは、「RTOSの手段」理解が最初に来ますので、障壁が高いと感じる方も多いでしょう。筆者はそうでした。

そこで、お勧めするのは、RTOS手段をざっと読んだら、今度は逆に「RTOSの目的」からRTOS環境で、複数ユーザタスクを並列多重するアプローチBです。

複数ユーザタクスを、どうすればRTOSへ組込むかを検討するこの逆アプローチBは、Aよりもベアメタル開発経験者向きで、しかもRTOS手段は後回しですので障壁が低く感じられます。

ベアメタル処理のFreeRTOSタスク化と並列多重

2個のベアメタル処理をタスク化し、RTOSで並列多重処理する例で考えます。

・処理#1:緑LEDを、1秒毎にトグル点灯
・処理#2:赤LEDを、SW押下げでトグル点灯

ベアメタル開発経験者なら、どちらの処理も簡単に開発できます。処理概要は、最初図1の左側になります。

違いは判断内容で、処理#1が1秒経過、処理#2がSW割込みです。もちろん、両処理を並列に多重するのは、ベアメタル開発では工夫が必要です。処理#1と#2は、別々のプロジェクト、例えば2個のサンプルプロジェクトとして提供されるのが一般的です。

両処理をタスク化して組込むRTOSには、LPCXpresso54114のSDK付属generic_freertosプロジェクトを用います。“generic”が示すように、ハードウェアに依存しない汎用的なFreeRTOSプロジェクトです(generic_freertosの詳細は、コチラの関連投稿を参照してください)。

RTOSへ組込んだ時のタスク処理概要が、図1の右側です。ベアメタルとの違いは、タスク#1は、遅延処理vTaskDelayを無限ループに加えること、タスク#2は、割込みISRからの同期セマフォ受信を無限ループに加えることだけです。

両処理へ追加したのは、どちらも「RTOS処理待ち」です。この処理待ちを、RTOSが解除/待ちに切替えることで、複数タスクが並列に動作します。

RTOSは、複数タスクを処理待ち状態にし、処理待ちタスクの中から優先順位に応じて1個のタスクを実行状態に割当てます。RTOS(Kernel)自身が、順位判断や実行タスクの切替え、タスク実行状態の保存/リカバリのためスタックプッシュ/ポップ処理を行い、それらの処理間隔がTICK_RATEです。

リアルタイムでタスクを切替えるには、高速なKernel動作(AWSによると25MHz以上)と短期間のTICK_RATE(通常1ms)が必要で、タスク数に応じてスタック使用量(AWS RAM 64KB以上)は急増します。
※数値で示したAWS FreeRTOS必須条件の詳細は、コチラのハードウェア最小仕様要件を参照してください。

要するに、RTOSへユーザタスクを追加するには、ベアメタルでユーザ処理を開発し、その無限ループ内にRTOS処理待ちを加えさえすれば、RTOSユーザタスクになります。

ベアメタル開発経験者がデバッグし慣れた処理がそのままRTOSユーザタスク開発にも使え、RTOS処理待ちは、generic_freertosに実装済みのセマフォとQueueのRTOS手段だけでも、リアルタイムタスク並列多重のRTOSアプリケーション開発ができます。

まとめ

本稿は、IoT MCU RTOS環境でユーザタスクを開発し、FreeRTOSへ実装する方法として、ユーザ処理をベアメタルで開発し、無限ループ内へRTOS処理待ちを加えタスク化する方法を説明しました。

RTOS処理待ちは、セマフォとQueueのRTOS手段を理解していれば、プロトタイプ段階のFreeRTOSアプリケーションとしては十分です。ユーザ処理を自主開発する代わりに、ベンダ提供のベアメタルサンプルソフトを活用すれば、豊富なサンプル処理のFreeRTOSタスク化も簡単です。

タスク化処理を組込むRTOSには、NXP)LPCXpresso54114 SDK付属のgeneric_freertosプロジェクトを使います。このプロジェクトは、ハードウェア非依存の汎用FreeRTOSプロジェクトで、セマフォとQueueを実装済みです。そこで、これら2つのRTOS手段を手始めに理解すれば、RTOS開発障壁も低くなります。

あとがき

本稿で示したユーザタスク追加方法により開発したNXP)LPCXpresso54114(Cortex-M4/150MHz、Flash/256KB、RAM/192KB)で動作確認済みのFreeRTOSアプリケーションテンプレートは、6Eにリリース予定です(ADC入力とLCD出力、VCOM入出力処理も追加済み)。

FreeRTOS Application Template (NXP Version)
FreeRTOS Application Template (NXP Version)

このテンプレートには、FreeRTOSプロジェクトに加え、同じアプリケーション動作のベアメタルプロジェクトも添付します。ベアメタル処理に処理多重の工夫を加えた弊社Cortex-M0+/M3コア向けBaseboardテンプレートを、Cortex-M4コアへも適用したベアメタルプロジェクトです。

FreeRTOS開発とベアメタル開発の、Flash/RAM使用量差、開発難易度、消費電力差などCortex-M4コアMCU開発で実務上知りたい事柄を直接比較・評価することが可能です。また、どちらのプロジェクトも、基本的アプリケーションのテンプレート(=スタートプロジェクト)としても活用でき、プロトタイプ開発に最適です(FreeRTOS/ベアメタルの2プロジェクト+説明資料、税込2000円)。

また、STマイクロエレクトロニクス)STM32G4(Cortex-M4/170MHz、Flash/512KB、RAM/96KB)対応版も開発を予定しています。

FreeRTOSアプリケーションテンプレートを使ったプロトタイプ開発の次の段階としては、セマフォやQueue以外のミューテックスやイベントグループなどのより高度なRTOS手段の利用や、高速でRAM使用量も少ないタスク通知手段などのチューニング開発へとステップアップすることです。

21H1手動更新成功

5月19日、2021年春のWindows 10 21H1手動更新に成功しました。更新方法は、関連投稿:20H2の時と同じです。

Windows 10 Version 21H1
Windows 10 Version 21H1

2日経過した現在、トラブルは無く、Microsoft Office/LibreOfficeやブラウザなどの主要アプリケーション、FreeRTOSアプリケーションテンプレート開発に使用中のMCUXpresso IDEも正常に動作しております。1世代前の20H2と特に変わった点は見当たらず、今回もまた小規模更新でした。本稿も最新21H1で作成しました。

要点と春21H1手動更新用USBメディア作成

前回の20H2との違いは、21H1用のMediaCreationTool21H1.exeをダウンロードし、USB/DVDメディアを作成する点です。どなたでもダウンロードできます。

21H1ビルド番号は、19043.985です。コチラの記事のMicrosoft表明から、既に何回か更新されています。

手動更新の要点は、「旧Windows 10 20H2起動状態」で、作成したUSBのsetup.exeを実行すること、トラブルに備えた「バックアップ&リカバリーができる」ことです。これらを注意すれば、個人用ファイルと既存アプリを引き継いだまま、手動でWindows 10 21H1へ更新できます。

その他の留意事項

手動更新メリットは、ユーザ主体でWindows更新ができることです。デメリットは、Windows 10レジストリがデフォルト値に戻ること、一部の既存アプリ設定が引き継がれない場合があることです。

弊社の場合、今回の手動更新で、Dynamic Theme、EaseUS Todo Backupに引き継がれていない設定がありました。特に、EaseUS Todo Backupは、バックアップアプリで重要です。このように、重要なアプリは、Windows更新完了後、ユーザ自身で動作と設定確認をすることをお勧めします。

※OS更新後の既存アプリ動作と設定確認は、手動更新以外の方法でもユーザ自身で行う必要があると思います。細かい話をすると、ローカルアカウント画像が引き継がれていないPCもありました😅。この程度は、更新トラブルに含めません。

秋21H2:大規模更新リスク対処

年2回のWindows 10大型更新と更新規模
年2回のWindows 10大型更新と更新規模

各種Windows記事によると、次回秋の21H2は、スタートメニューなど操作性も含めて大規模更新になるそうです。

今回春の21H1は、従来OSコアと共通の小規模更新でした。そこで、弊社所有Windows PC 3台全てを19日に手動更新し、2日経過した現在、いずれも安定動作しております。更新に要した時間は、0.5日/3PCでした(バックアップ時間除く)。

大規模更新が見込まれる次回21H2は、更新トラブル有無を1PC当たり2~3日かけて慎重に確認後、段階的に手動更新する予定です。

小規模更新との差は、動作確認を3PC並列に行うか、1PCずつ直列に行うかです。直列確認中に1台でもトラブルが発生した時は、以降のOS更新を止めます。これにより、作業中の業務停止を防ぎ、Windows大規模更新へのリスク対策とします。

今秋のMCU開発業務が一段落付いた頃を見計らって、21H2大規模更新に1週間/3PCを費やす予定です。