BluetoothとTHREAD両サポートのKinetis KW41Z

NXPからBLE 4.2とThread両方をサポートするKinetis WシリーズKW41Zが発売されました。低価格で有名な評価ボードですがFRDM-KW41Zは、約1万6千円します。USB-KW41Z Sniffer/Development Boardでも約6千円です。

Multiprotocol MCU Kinetis KW41Z
Multiprotocol MCU Kinetis KW41Z(説明動画より)

IoTマイコン無線規格:BLEまたはThreadか

様々なIoT無線規格が乱立するなかで、KW41ZがBLE4.2とThreadを選んだのは、これらが生残る可能性が高いためでしょう(IoT無線規格はコチラを参照してください)。両方のプロトコルをサポートするため、Cortex-M0+コアで最大512KB ROM/128KB RAMと大容量が必要です。USB-KW41Z の価格から推測すると、MCU単体価格も高そうです。

IoTアプリケーションも身近になりつつあります。無線規格確定まで待てないとお考えの方には、早期開発を成功させるツールとして役立つかもしれません。

www.nxp.com/FRDM-KW41Z/startnowに解りやすいスタートアップ方法が掲載されています。無線デモソフトをクローン化し、ユーザアプリを作る手法のようです。IoT無線ソフトを1から開発することは難しい証左でしょう。ベンダー提供ライブラリの活用領域と思われます。

新生NXPマイコンラインアップ

NXPがFreescaleを買収後、新生NXPのARMコアMCU製品ラインアップが一目で解る図を見つけたので掲載します。
出典は、組込みシステム向けコンテンツ・プロバイダ)インスケイプ様のマガジンVOLUME.13:「さらなる高みへ。新生NXPのマイコン戦略に迫る MCU約1,100ラインアップ。シナジー効果の最大化へ」です。

NXP+FreescaleのARM Cortex MCUラインアップ

NXPサイトは、NXPのLPCマイコンと旧FreescaleのKinetisマイコンがそれぞれ別ページで示されるので、経営統合後のARM Cortex MCU製品ラインアップが分かりにくいのが現状です。

既存ユーザにはページ分離記載で問題ないでしょうが、以前記載した今後を予想するには、下図が解りやすいと思います。

NXP ARM Cortex MCU Lineup
NXP ARM Cortex MCU Lineup(記事より抜粋)

左側の汎用MCUでは、Cortex-M0/M0+でLPC800、LPC1100/1200とKinetis Lシリーズが競合しています。IDEも、それぞれのMCU対応にLPCXpressoとKinetis Design Studioの2種を提供中です。
一方、右側の特定用途MCUでは、Kinetisシリーズにより製品補完がされたことが解ります。

出典記事に、各MCUの詳しい特徴が解りやすく記載されております。

統合により、NXPは、ARMコア提供数は(恐らく)世界最大で、MCUコアのデファクトスタンダードCortex MCUのリーダーです。今後の動向が気になります。

CortexーM0/M0+対応マイコンテンプレート

弊社は、コスト重視で8/16ビット市場の置換えを狙う32ビットMCUコアCortex-M0/M0+を使ったLPC8xx、LPC111x、Kinetis Eに対してマイコンテンプレートを販売中です。動向によっては、このラインアップも変わるかもしれません。

※Kinetis Lシリーズは、Kinetis Eとソフト、ピン互換性があります。Kinteis EテンプレートのLシリーズへの適用は、弊社へお問合せください。

速報:Windows10 1607のマイコンIDE動作確認

Windows 10 Anniversary Update、Red Stone 1(RS1)のリリースが8月2日実施されました。

弊社マイコンテンプレート使用中のマイコンIDEを、このWindows 10 RS1、1607で動作確認しましたのでお知らせします。

IDEは、全て8月3日時点最新版です。マイコンテンプレートソフトのコンパイルと評価ボードへのダウンロード動作を確認しました。

マイコンIDEの詳細はコチラ、評価ボードはコチラに一覧表を掲載しております。

※Windows10 1511で動作していたものは、今のところ1607でも問題なく動作します。
※Windows 7時代に購入した評価ボードは、一部Windows 10で動作しない場合があります。この場合は、ボードドライバ(USBドライバ)の更新で動作するようになります。

Windows 10 1607動作確認マイコンIDE
マイコンIDE(ベンダ名) Windows 10 1607動作確認バージョン
CS+ for CC(ルネサス) V4.00.00 [15 Mar 2016]
e2 studio(ルネサス) Version: 5.1.0.022
LPCXpresso(NXP v8.2.0 [Build 647] [2016-07-18]
Kinetis Design Studio(NXP Version: 3.2.0
PSoC Creator(Cypress PSoC Creator  3.3 CP3 (3.3.0.9604)
Arduino IDE(Intel 1.6.10 Hourly Build 2016/07/26

 

マイコンIDE更新

扱うMCUデバイスの追加、WindowsやiOSなどのOS変更、Eclipseそのものの変更、バグ修正など様々な要因によりマイコン開発環境:IDEの更新は発生します。今回は、マイコンIDE更新について解説します。

更新通知と更新理由

マイコンアプリケーションソフト開発中ならば、リスクが増える可能性もあるIDE更新は避けたいものです。
このため「開発者が更新をするか否かを選択」できるのがマイコンIDEの特徴です。Windowsと大きく異なる点ですね。

更新判断には、「更新が発生」したか、「更新の理由」は何か、この2つを知る必要があります。この情報をIDEのWelcome画面のWebリンクで教えてくれるのがEclipseベースのIDEです。NXPのLPCXpressoの例を示します。

LPCXpresso Welcome page
LPCXpresso Welcome page

赤矢印のリンク先をみると、最新版IDEと、変更内容などが解ります。使用中のIDEと版数が異なる場合には、この内容を読んで更新判断ができます。新旧LPCXpressoは、緑囲いで示した版数毎に別フォルダへインストールされるので、IDE更新リスクがフォルダ内に閉じ込められるので安心です。

また、NXPに買収された旧FreescaleのKinetis Design Studio: KDSの例が下図です。Welcome画面に加え、Help>Check for Updatesで更新確認と新版インストールまでバックグラウンドで可能です。この機能は、LPCXpressoにはありません。

Kinetis Design Studio Check for Updates
Kinetis Design Studio Check for Updates

但し、私の環境では、ベースとなるEclipseのメジャー更新が関係しているのかもしれませんが、KDS V3.1からV3.2への更新ができませんでした。V3.2更新は、別途インストーラで可能です。やはりIDE更新確認ツールがあっても、時々サイトでIDEの最新版確認は、必要だと思いました。

また、CypressのPSoC Creatorは、Update Managerツールで更新確認とインストールができます。旧版はアーカイブ保存されるので、万一最新版にトラブルが発生しても安心です。

Cypress Update Manager
Cypress Update Manager

以上3社のマイコンIDEは、どれもEclipseベースのIDEですが、更新方法や旧版の扱いは各社異なります。

一方、ルネサス独自仕様のIDE:CS+もアップデート・マネジャーツールで更新します。独自仕様なので、細かい更新内容確認や、一部選択更新なども可能です。ツール・ニュースなどで更新、バグ情報を知らせてくれるのも役立ちます。
また、更新前に、「開発ツールをパックして保存(K)…」を実行すると、更新トラブル対策も可能です。

Runesus CS+ Packing tool
Runesus CS+ Packing Tool

マイコンIDE更新を安全にするには

マイコンIDEの更新トラブル回避には、OS起因でない場合は、旧版のIDEへ戻せることが必要です。また、Eclipseのメジャー更新時などは、操作方法が変わることもあるので注意が必要です。
開発案件のキリが良い時期に更新するのが安全策でしょう。

マイコンIDE開発経験を活かすには

弊社マイコンテンプレートで使用中の各社IDE特徴を示します。マイコンIDEは、Eclipseベースに集約されつつあるようです。今回は、同じベースでもIDEの更新方法が異なることを示しました。

これは、EclipseベースのIDEを使う時に覚えておくと役立つのが、各社共通のエディタやデバッグなどのコア機能であることを暗示しています。他社IDE使用時に、この経験が活かせるからです。

MCU IDE Comparison
マイコンIDE比較

マイコンIDE習得のコツやTipsは、コチラのページにもまとめています。参考にしてください。

ブログカテゴリ変更とテンプレートサイト更新のお知らせ

本ブログカテゴリを下記のとおり変更しました。

「MCU:マイコン」と「MPU/SCB:IoT用コンピュータ」を別カテゴリにしました。

※MCU: Micro Controller Unit…    ARM Cortex-M0+/M0、NXP) LPC, Kinetisシリーズ、Cypress)PSoC 4 /PSoC 4 BLE/PROCシリーズ、ルネサス)RL78/G1xシリーズなど

※MPU/SCB: Micro Processor Unit or Single Board Computer…      Raspberry Piシリーズ、DragonBoardなど

→ MCUとMPU/SCBのIoT階層構造は、コチラを参照してください。

マイリンクも下記とおり変更しました。

マイコンテンプレートサイトに、「マイコンテンプレートを利用する際に知っていると便利なTipsやコツ」のページを追加しました。

今後、MPU/SCB:IoT用コンピュータの内容も充実させる予定です。

NXPとCypress動向

NXPは2015年にFreescale、Cypressは2014年にSpansionを買収しました。買収後のNXPとCypressのマイコンラインアップがどう変わるかが気になります。
日経テクノロジーOnlineで両社のマイコン新製品と今後の開発動向に関する記事がありましたので、要点をリストアップしました。

NXP: LPCとKinetisを徐々に統合

“新生NXP初のマイコン、旧NXP系で低消費電力がウリモノ” 2016/02/24より

  • NXPのマイコンシェア、車載MCUは世界第2位、車載を除くMCUは世界第1位
  • LPCマイコンと(旧Freescale)Kinetisマイコンは、徐々に統合(Geoff Lee氏談)
  • 新製品は、NXP系のLPC54000シリーズ(Cortex-M4FでコプロセサにCortex-M0+搭載可)

弊社マイコンテンプレートで使った、NXPのLPC8xx/LPC111xと旧FreescaleのKinties Eも現在NXPから全て供給中ですが、統合される可能性があることが解ります。

Cypress: PSoC 4へCortex-M0+コアを採用

“FMマイコンもPSoCも同じツールで開発、Cypressがアルファ版をデモ” 2016/02/29より

  • 新製品PSoC 4 Sは旧Spansionライセンス取得のCortex-M0+を採用。今後新開発PSoC 4もM0+を使う
  • PSoC 4 S搭載の第4世代CapSenceは、第3世代比、雑音耐性向上と低電力化
  • PSoC 4 S Pioneer Kit ($49)、PSoC 4 S Prototyping Kit ($10)発売
  • PSoC CreatorでFM0+マイコン(旧Spansion)も開発できるよう強化中

Cortex-M0+とM0を比較すれば、M0+が優れているので、新開発のPSoC 4系にM0+を採用するのは理解できます。
数あるマイコンIDEの中で私が最も使いやすいと評価するPSoC Creatorですが、PSoC 4とFM0+はアーキテクチャが異なり、さらにPSoC 4系にM0+が採用されれば、ますますFM0+を使う機会は減ると思います。
通常のマイコンソフト開発では、M0+とM0を区別することも少ないので、Creator強化は静観したいと思います。

マイコンテンプレート利用のコツやTips:その3

マイコンテンプレートを利用するコツ/Tipsの第3回目は「時分割処理のタイミングとインタフェースRAM」について示します。
販売中のテンプレート処理起動の間隔は、250us/1ms/10ms/100ms/1s/無限ループの6種類です。この6種類の使い方を示します。

処理起動タイミング

マイコンの処理は、電源投入後、「1回のみ実行する」スタート処理と、無限ループで「繰り返し実行する処理」の2つに大別できます(ROM/RAMを初期化するなどのスタートアップ処理は、除いています)。

ここでは無限ループに代わってテンプレートが実行する、繰り返し実行する処理の間隔:「タイミング」を考察します。

テンプレートは、起動する処理が無い無限ループ:空き時間で起動するのは、Sleepなどの低消費電力処理であることは、第2回で示しました。

100msと1sの起動間隔は、マイコンにとっては「遅い処理」、例えば、LED点滅や、LCD初期設定、SWチャタリング対策の起動に適しています。
※LCD初期設定は、無限ループ前のスタート処理で実行することも可能です。

1msと10msの起動間隔は、「早い処理」、例えば、割込みの応答処理などの起動に適しています。

250us起動間隔は、「最も早い処理が必要」な、例えば、UART/I2Cなどのデータ受信処理を起動することを想定しています。

つまり、早いレスポンスが必要な処理ほど処理間隔が短く、起動される処理のソース記述位置も上側になるのです。これがテンプレート時分割起動の「基本的な使い方」です。

実例が下図です。赤/緑/青LEDを、0.5/1/2秒毎にトグル点滅する場合です。赤囲みが、テンプレートへ追加されたLEDトグル処理を表します。それ以外が、テンプレートに初めから記述済みの起動処理です。

LED点滅処理での優先順位の例
LED点滅処理での優先順位の例

起動間隔

起動の間隔は、第2回で示したtick interruptの発生間隔です。
1ms>10ms>100ms>1sの順にレスポンスが早くなりますが、250usだけ特別に超高速応答です。これは、UART受信などの主として「いつ発生するか判らない応答に早く即応する」ためです。

販売中のテンプレートは、全てこの250usを起動間隔として開発しておりますが、実は「250usである必要性は無い」のです。因みに、FreeRTOSなどの組込OSでもtick interruptは1msです。

250usは、経験的にこの最高速でこれまで利用に問題が無かったからです。
この起動間隔を1msにし、UART受信処理を1ms起動に変更しても、メニュードリブンテンプレート動作などには問題ありません。
メニュードリブンテンプレートは、当該マイコンのUART受信バッファが1バイトでも、UARTコマンド長も1バイトなので、受信完了確認後ゆっくりバッファからデータを取り出しても間に合うからです。

起動間隔の設定は、テンプレート購入者様が「独自判断で設定して頂いても構いません」。

但し、250usよりも高速:短くすることは無いと思います。これよりも短いと、処理分割をより細かくする必要があり、開発がより厳しくなるからです。逆に、250usよりも長くすると、処理分割は楽になります。

テンプレートは、マイコン「コア動作速度を最高速」に設定し、起動間隔も「最高速と思われる250us」でデフォルトは設定しております。これは、「最初」にマイコンの最大能力で動作するアプリケーション開発後、「次の段階」としてコア周波数を下げるなどで、低消費電力化するアプローチを想定しているからです。

インタフェースRAM

処理間のデータやり取りにインタフェースRAMを使うことは、第1回で示しました。ルネサスのRL78/G1xは、通常RAMよりも高速アクセス可能なSADDRを持つなど特殊な例もありますが、低価格マイコンではRAMが貴重なリソースであることに変わりはありません。

この貴重なRAMを使う時に、ビット単位構造体を使い、ビット単位フラグでデータをやり取りすると、1バイトRAMで最大8個のフラグを使えるので効率的です。

テンプレートでは、このビット単位アクセスを容易にするため、userdefine.hにユーザ型定義を追記しております。処理間にブラグを多用する場合などにご活用ください。

マイコンテンプレートとは?

第1~3回で示したテンプレートは、「ISRは、サンプルプログラムを一部またはそのまま流用し、その他全処理をポーリング起動するマルチタスク処理の骨組み」と説明すると理解が早いかもしれません。

割込み処理は、ISRで割込みフラグ処理のみを行い、ISR発生をポーリングし割込み実処理を起動する。
サンプルプログラムの無限ループポーリングとの差は、処理に応じた時分割ポーリングである。
骨組みのテンプレートへ、サンプルプログラム流用の処理を組込んでプロトタイピング開発をする。
この理解で良いと思います。

ポイントのまとめ

  • 処理起動間隔は、250usとしているが、変更は可能、かつ任意
  • 高速な応答が必要な処理は、短い起動間隔へ配置
  • インタフェースRAMの効率的な利用に、ビット単位構造体も有効

* * *

3回に分けてマイコンテンプレート利用のコツ/Tipsを示しました。これらは、ソフトウエア開発では当然の事柄とダブる部分も多くありますが、数値では表せないのであえてコツ/Tipsとして記載しました。

組込OSを使うよりも簡単で、サンプル流用も可能なマルチタスク実現テンプレートが、お判り頂けたと思います。

販売中のマイコンテンプレートを活用し、アプリケーションの早期開発を成功させてください。

マイコンテンプレート利用のコツやTips:その2

マイコンテンプレートを利用するコツ/Tipsの第2回目はテンプレートの「マルチタスク処理の実現方法」を示します。

組込OSの分割起動

シングルコアのマイコンで、マルチタスク処理の実現方法が、「処理の分割起動」です。
組込OSは、この分割処理=タスクの起動をOSが行います。FreeRTOSの“USING THE FREERTOS REAL TIME KERNEL”から抜粋したFigure 4は、このことを解り易く示しています。

OSのKernelは、tick interrupt毎にタスク切り替えを行います。t2でTask1は「強制的に中断」され、Task2へ切り替わります。t3では、Task2が強制中断され、Task1が「中断処理から再開」されます。

FreeRTOSの分割起動
FreeRTOSの分割起動

ある時刻で動作する処理は、Kernelを含めて1個ですが、tick interrupt毎に処理を切り替えてマルチタスク処理を実現します。

テンプレートの分割起動

分割起動は、テンプレートでも同じです。テンプレートは、第1回目で説明した「細かく分割した処理」をtick interrupt毎に時分割で起動します。組込OSとの差は、(簡単に説明すると)起動処理を強制的に中断したり、再開したりする機能が無いことです。

マイコンテンプレートの分割起動
マイコンテンプレートの分割起動

起動処理1の中断機能が無いので、t2のタイミングまでに「処理1が終了」していることが必要になります。

処理終了のための分割

この「処理終了」は、どうすれば得られるのでしょうか?

第1回説明の「細かい処理の分割」は、結果として処理時間も短くなり、この処理終了をもたらします。

マイコン処理分類(注意点)
マイコン処理分類(注意点)

注意すべきは、赤丸の処理の完了確認が必要な入出力処理です。しかし、ここを「完了確認の処理」と、「その結果で動作する処理」の2つに分けて開発すれば、問題解決です。それぞれの処理が短時間で終了するからです。

同じように割込み処理も、基本的にISR: Interrupt Service Routine内では、「割込み発生確認と割込み要因のクリア」のみを行い、「割込みの結果で動作する処理は別処理」として分割して処理化します。

このような処理分割により、デバッグが容易となり、別アプリへ流用/応用性、部品化も高まります。

勿論、サンプルプログラムのISR処理を「そのまま流用」してもテンプレートへ組込んでもOKです。サンプルプログラムが提供する典型的なISRは、処理時間が短い場合が殆どでだからです。

分割起動後の処理

起動処理で起動される側の処理時間が短くなると、起動処理へ戻る時間が増えます(上図ピンク)。この戻った時の処理が、無限ループの処理です。

テンプレートでは、無限ループ内で起動する処理は、低電力処理のSleep(またはDeep Sleep)です。
この結果、高速マイコンであればある程この「無限ループ:空き時間」が長くなり、マイコン消費電力の大部分を占めるコア動作を停止するSleepを効果的に使えます。

ポイントのまとめ

  • 処理時間を短くするため、「確認処理」と「その結果の処理」を分離
  • 起動処理無しの「空き時間」は、低消費電力処理を起動(SleepとDeep Sleepの差には注意)

次回予告

テンプレートが処理を分割し、これを分割起動するマルチタスク処理の実現方法を示し、処理分割のコツ/Tipsを示しました。次回は、「時分割のタイミング」について説明する予定です。

マイコンテンプレート利用のコツやTips:その1

マルチタスク処理と組込OSの前回記事で、マイコンテンプレートを利用するコツ/Tips、ノウハウを示すことになり、その第1回目は「処理分割の重要性」について示します。
※説明するこのコツ/Tipsは、「販売中の全ての弊社マイコンテンプレート」に適用可能です。

処理分類

テンプレートが想定しているマイコンで開発する処理を、下記のように4つに分類してみます。

マイコン処理分類
マイコン処理分類

マイコンのアプリケーションは、これら「4分類の処理を組合せて」開発します。

説明の内容から「その他の処理」を除くと、各処理は数10~数100ステップの単純な処理です。従って、これら単純な処理の品質、バグが無いことが重要です。

「その他の処理」は、内容によっては多くの計算や開発ノウハウが必要となる分野です。
そこで、マイコン計算能力や大きなROM/RAMが必要になるかもしれないその内容には踏み込まず、「その他の処理」としてひとくくりにしています。

マイコンテンプレートも、この「その他の処理」の1つです。

サンプルソフト有無

「入力処理」~「割込み処理」のような単純な処理は、ベンダ提供のサンプルプログラムで提供されることも多いのです。だから、1から自分で開発するよりも、サンプルプログラムを利用する方が手間も少なくバグも無くなるのです(サンプルソフトの見つけ方はコチラを参照)。

マイコンテンプレートが、サンプルプログラムの流用/活用を重視するのは、これが理由です。

「骨組み」を提供するテンプレートへ、サンプルから入手した入力~割込みなどの「処理」を、骨組みに「追加」することでアプリケーションを早期完成します。

また、適当なサンプルソフトが無い場合でも、このように分類しておけば、「既存サンプルと似た方法」で開発する指針が与えられます。
つまり、サンプルソフトが提唱するマイコンに適した方法で処理を開発するのです。

サンプルソフトは、単にサンプルではなく、「当該マイコン利用のバイブル」と言っても過言ではありません。サンプルソフトの手法を活用/流用することこそ、開発成功の秘訣です。

テンプレートのメリット

テンプレートを使えば、最も重要で開発時間もかかる「その他の処理へ労力を集中」したアプリケーション開発が可能です。

このアプリケーション早期開発の結果、計算能力が不足した場合には、より高性能なマイコンを利用することや、改版や仕様追加を見越して、より大きなROM/RAMを使うなどの対策が「事前」に取れます。

プロトタイピング開発は、実際のアプリケーション開発に近い環境で、このように現状マイコンに対する予測/見識を持てること、これが最大の目的です。勿論、現状のマイコン能力で十分であれば、アプリケーション開発も完了です。

インタフェースRAM

処理間のデータやり取りにRAMを使うこと、これもテンプレートの特徴です。インタフェースRAMで処理を分離し、部品化するのです。

処理を分離しておけば、処理の中身がデバッグ中、または未完成であっても、完成後の想定データをデバッガでインタフェースRAMへ設定しさえすれば、データを送受する側の処理開発ができます。

RAMにより処理を分離分割し、なるべく単純でデバッグしやすい処理単位で開発することが目的です。

まとめ

要は、
処理単体を、細かく分割、できれば(なるべく)サンプルソフトを利用/流用して開発し、
インタフェースRAMで処理間を分離、当該開発のみでなく、他へも流用/活用できることを狙い、
アプリケーションのプロトタイピング開発ができる骨組み、
これがマイコンテンプレートです。

今回のポイントを下記に示します。

  • 処理を細かく分割する指針、方針を持ってサンプルソフトを読む
  • 分割した処理は、RAM値で動作決定する部品化
  • テンプレートへ、分割処理を追加してアプリケーション開発

次回予定

サンプルソフトは、解り易いシングルタスクの説明に重点を置いているため、「マルチタスク処理への配慮」がありません。そこで、次回は、テンプレートでどのようにマルチタスク処理の実現しているのか、そして今回説明した処理分割とどう結びつくか、などを説明する予定です。

次回以降のテンプレートを利用するコツ/Tipsは、下記内容の説明を予定しています。
第2回:テンプレートのマルチタスク処理
第3回:テンプレートの時分割タイミングとインタフェースRAM(最終回)

マルチタスク処理と組込OS

マイコンにマルチタスク処理をさせるには、FreeRTOSなどの組込OSを使う方法が一般的です。
NXPのLPCXpressoには、 このFreeRTOSを使って評価ボードLEDを点滅させる、いわゆる「Lチカサンプルソフト」が添付されています。
今回は、ARM Cortex-M0/M0+と同程度の性能を持つマイコンの組込OSを考察します。

FreeRTOS Lチカサンプルソフト

LPCXpresso824評価ボード(LPC824/Cortex-M0+、ROM:32KB、RAM:8KB)の赤LEDを0.5秒、緑を2秒、青を1秒毎に点滅させるFreeRTOS Lチカサンプルソースコードが下記です
(出典:lpcopen_2_19_lpcxpresso_nxp_lpcxpresso_824.zip、日本語コメントは筆者追記)。

FreeRTOSのLチカサンプルソフト
FreeRTOSのLチカサンプルソフト
FreeRTOSのLチカサンプルソフトリソース使用量
text data bss dec hex filename
10060 8 780 10848 2a60 freertos_blinky.axf

 

main()処理は、prvSetupHardware()でスタート処理、xTaskCreate()で各LEDトグルタスクを登録し、vTaskStartScheduler()でOSカーネルを起動します(prv/x/vなどはFreeRTOS関数名の接頭語で決まり文句)。
右側のvLEDTask0~2()がタクス本体です。vTaskDelay()の変更で、トグルタイミングが簡単に変えられます。

このように組込OS:FreeRTOSを使えば「タスク単体開発/変更が容易」であることが解ります。

デバッグビルド時のリソース使用量は、約10kBです(弊社マイコンテンプレートで同じ処理の場合は、半分の5KBで実現、どちらもLPCXpresso v8.0.0でLPCOpenライブラリ込みの結果)。ソースコードから、その殆どがFreeRTOS(含むライブラリ)を利用するためのサイズです。

組込OSのメリットは、「タスク開発の容易さ」、デメリットは、「利用のオーバーヘッド」です。このオーバーヘッドには、上記リソースの他に、様々なOS知識やコツ、利用経験など数値に現れないものも含みます。

従ってこのメリットデメリット両方を天秤に掛け、組込OSを使うか否かを判断する必要があります。

またデバッグは、追加したタスクが主ですが、最終的にはOSも含めたトータル動作確認が必要なため、OSをブラックボックスとして扱えるのかも考慮する必要があります。
※Windowsに代表されるOS改版に悩まされる危険性にも配慮しましょう。

ARM mbed OS

ARM Cortex-M0/M0+クラスのマイコンであるLPC824への上記FreeRTOS適用は、まれな例です。
なぜなら、多くの場合FreeRTOSは、Cortex-M3、例えばNXPならLPC17xx、またはより高性能なマイコンへの適用が多いからです(Cortexの性能比はコチラを参照)。天秤判断の結果でしょう。

GNU General Public License (GPL)のFreeRTOSは、その名の通り無償:Freeで多くのマイコン搭載実績もあります。しかし、ROM/RAMが少なく低価格を追求したCortex-M0/M0+クラスのマイコンには、少し「荷が重い」と個人的にも思います。

このCortex-M0/M0+クラスを含むCortex-Mマイコンに向けてARM社自身が開発中の新OSがmbed OSです。2015年10月リリースの予定でしたが、正式出荷はまだです。

IoT向けの機能も追加するmbed OSは、実質上対応OSが無いCortex-M0/M0+にも使える可能性がある組込OSです。

マイコンテンプレートのLチカソフト

FreeRTOSのLチカサンプルと同じマルチタスク処理を、弊社マイコンテンプレートで行った時のソースコード(一部抜粋)が下記です。
FreeRTOSと同じSysTick割込みを1msに設定していますので、解り易いソースコードとなっています。

テンプレートのLチカサンプルソフト
テンプレートのLチカサンプルソフト
テンプレートのLチカソフト使用量
text data bss dec hex filename
4580 8 20 4608 1200 BlinkyLikeRTOS_824.axf

 

トグルタイミングの変更は、FreeRTOSと比べると複雑ですが難しくはありません。何より、処理が全部見えますので理解や変更は容易です。しかもコードサイズは、半分以下です。

Cortex-M0/M0+、または同程度のマイコン性能でマルチタスク処理をさせるなら「マイコンテンプレート」をお勧めする理由です。

* * *

そこで、次回以後何回かに分けて、簡単にマルチタスク処理が実行でき、デバッグも容易なマイコンテンプレートのTipsや利用のコツを示します。
現在販売中の5種マイコンテンプレートに興味がある方は、コチラを参照してください。